|
3 | 3 | //
|
4 | 4 |
|
5 | 5 | #include "kernel_selector_common.h"
|
| 6 | +#include "intel_gpu/graph/serialization/string_serializer.hpp" |
6 | 7 | #include <sstream>
|
7 | 8 | #include <string>
|
8 | 9 |
|
| 10 | +#ifdef ENABLE_ONEDNN_FOR_GPU |
| 11 | +#include "micro_utils.hpp" |
| 12 | +#endif |
| 13 | + |
9 | 14 | namespace kernel_selector {
|
10 | 15 | std::string GetStringEnv(const char* varName) {
|
11 | 16 | std::string str;
|
@@ -572,4 +577,54 @@ std::string toString(ReduceMode mode) {
|
572 | 577 | }
|
573 | 578 | }
|
574 | 579 |
|
| 580 | +void clKernelData::save(cldnn::BinaryOutputBuffer& ob) const { |
| 581 | + ob(params.workGroups.global, params.workGroups.local); |
| 582 | + ob << params.arguments.size(); |
| 583 | + for (const auto& arg : params.arguments) { |
| 584 | + ob << make_data(&arg.t, sizeof(cldnn::argument_desc::Types)) << arg.index; |
| 585 | + } |
| 586 | + ob << params.scalars.size(); |
| 587 | + for (const auto& scalar : params.scalars) { |
| 588 | + ob << make_data(&scalar.t, sizeof(cldnn::scalar_desc::Types)) << make_data(&scalar.v, sizeof(cldnn::scalar_desc::ValueT)); |
| 589 | + } |
| 590 | + ob << params.layerID; |
| 591 | +#ifdef ENABLE_ONEDNN_FOR_GPU |
| 592 | + ob << micro_kernels.size(); |
| 593 | + for (const auto& microkernel : micro_kernels) { |
| 594 | + microkernel->save(ob); |
| 595 | + } |
| 596 | +#endif |
| 597 | +} |
| 598 | + |
| 599 | +void clKernelData::load(cldnn::BinaryInputBuffer& ib) { |
| 600 | + ib(params.workGroups.global, params.workGroups.local); |
| 601 | + |
| 602 | + typename cldnn::arguments_desc::size_type arguments_desc_size = 0UL; |
| 603 | + ib >> arguments_desc_size; |
| 604 | + params.arguments.resize(arguments_desc_size); |
| 605 | + for (auto& arg : params.arguments) { |
| 606 | + ib >> make_data(&arg.t, sizeof(cldnn::argument_desc::Types)) >> arg.index; |
| 607 | + } |
| 608 | + |
| 609 | + typename cldnn::scalars_desc::size_type scalars_desc_size = 0UL; |
| 610 | + ib >> scalars_desc_size; |
| 611 | + params.scalars.resize(scalars_desc_size); |
| 612 | + for (auto& scalar : params.scalars) { |
| 613 | + ib >> make_data(&scalar.t, sizeof(cldnn::scalar_desc::Types)) >> make_data(&scalar.v, sizeof(cldnn::scalar_desc::ValueT)); |
| 614 | + } |
| 615 | + |
| 616 | + ib >> params.layerID; |
| 617 | + |
| 618 | +#ifdef ENABLE_ONEDNN_FOR_GPU |
| 619 | + size_t n_microkernels; |
| 620 | + ib >> n_microkernels; |
| 621 | + micro_kernels.clear(); |
| 622 | + for (size_t i = 0; i < n_microkernels; i++) { |
| 623 | + auto microkernel = std::make_shared<micro::MicroKernelPackage>(); |
| 624 | + microkernel->load(ib); |
| 625 | + micro_kernels.push_back(microkernel); |
| 626 | + } |
| 627 | +#endif |
| 628 | +} |
| 629 | + |
575 | 630 | } // namespace kernel_selector
|
0 commit comments