@@ -636,25 +636,56 @@ void kernels_cache::add_to_cached_kernels(const std::vector<kernel::ptr>& kernel
636
636
637
637
void kernels_cache::save (BinaryOutputBuffer& ob) const {
638
638
ob << _cached_binaries.size ();
639
+
640
+ auto is_zebin = [](const std::vector<unsigned char >& bin) {
641
+ constexpr uint32_t ELF_MAGIC = 0x464C457F ;
642
+
643
+ if (bin.size () < sizeof (uint32_t )) {
644
+ return false ;
645
+ }
646
+ auto magic = reinterpret_cast <const uint32_t *>(bin.data ())[0 ];
647
+ return magic == ELF_MAGIC;
648
+ };
649
+
639
650
for (auto & cached_binary : _cached_binaries) {
651
+ auto is_zebin_binary = is_zebin (cached_binary.first );
652
+
640
653
ob << cached_binary.second ;
641
654
ob << cached_binary.first ;
655
+ ob << is_zebin_binary;
656
+ if (!is_zebin_binary) {
657
+ auto driver_version = downcast<ocl::ocl_device>(*_device).get_info ().driver_version ;
658
+ ob << driver_version;
659
+ }
642
660
}
643
661
}
644
662
645
663
void kernels_cache::load (BinaryInputBuffer& ib) {
646
664
std::unordered_map<uint32_t , std::vector<unsigned char >> precompiled_kernels;
647
665
666
+ const auto & build_device = downcast<ocl::ocl_device>(*_device);
667
+
648
668
size_t num_cached_binaries;
649
669
ib >> num_cached_binaries;
650
670
for (size_t i = 0 ; i < num_cached_binaries; ++i) {
671
+ bool is_zebin_binary = true ;
672
+
651
673
uint32_t id;
652
674
ib >> id;
653
675
ib >> precompiled_kernels[id];
676
+ ib >> is_zebin_binary;
677
+ if (!is_zebin_binary) {
678
+ // Legacy patchtoken path
679
+ std::string driver_version, current_driver_version;
680
+ ib >> driver_version;
681
+ current_driver_version = build_device.get_info ().driver_version ;
682
+
683
+ if (driver_version != current_driver_version) {
684
+ OPENVINO_THROW (" Driver version mismatch in cached patchtoken kernels" );
685
+ }
686
+ }
654
687
}
655
688
656
- const auto & build_device = downcast<ocl::ocl_device>(*_device);
657
-
658
689
try {
659
690
std::lock_guard<std::mutex> lock (_mutex);
660
691
_cached_kernels.clear ();
0 commit comments