diff --git a/sycl/source/detail/kernel_name_based_cache_t.hpp b/sycl/source/detail/kernel_name_based_cache_t.hpp index f1ecd3ec4cd9d..a078df17bfc7b 100644 --- a/sycl/source/detail/kernel_name_based_cache_t.hpp +++ b/sycl/source/detail/kernel_name_based_cache_t.hpp @@ -12,6 +12,7 @@ #include #include +#include #include @@ -36,6 +37,7 @@ struct FastKernelSubcacheT { struct KernelNameBasedCacheT { FastKernelSubcacheT FastKernelSubcache; + std::optional UsesAssert; }; } // namespace detail diff --git a/sycl/source/detail/program_manager/program_manager.hpp b/sycl/source/detail/program_manager/program_manager.hpp index 27c4610421ca4..2afa9593b135a 100644 --- a/sycl/source/detail/program_manager/program_manager.hpp +++ b/sycl/source/detail/program_manager/program_manager.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -359,8 +360,16 @@ class ProgramManager { ~ProgramManager() = default; template - bool kernelUsesAssert(const NameT &KernelName) const { - return m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end(); + bool kernelUsesAssert(const NameT &KernelName, + KernelNameBasedCacheT *KernelNameBasedCachePtr) const { + if (!KernelNameBasedCachePtr) + return m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end(); + + std::optional &UsesAssert = KernelNameBasedCachePtr->UsesAssert; + if (!UsesAssert.has_value()) + UsesAssert = + m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end(); + return UsesAssert.value(); } SanitizerType kernelUsesSanitizer() const { return m_SanitizerFoundInImage; } diff --git a/sycl/source/detail/queue_impl.hpp b/sycl/source/detail/queue_impl.hpp index 7860d4ee9e123..d510000838452 100644 --- a/sycl/source/detail/queue_impl.hpp +++ b/sycl/source/detail/queue_impl.hpp @@ -873,7 +873,8 @@ class queue_impl { KernelUsesAssert = (!Handler.MKernel || Handler.MKernel->hasSYCLMetadata()) && ProgramManager::getInstance().kernelUsesAssert( - Handler.MKernelName.data()); + Handler.MKernelName.data(), + Handler.impl->MKernelNameBasedCachePtr); auto &PostProcess = *PostProcessorFunc; PostProcess(IsKernel, KernelUsesAssert, Event); diff --git a/sycl/source/detail/scheduler/commands.cpp b/sycl/source/detail/scheduler/commands.cpp index 4309b6f1c0395..2a1851239ce89 100644 --- a/sycl/source/detail/scheduler/commands.cpp +++ b/sycl/source/detail/scheduler/commands.cpp @@ -3269,7 +3269,8 @@ ur_result_t ExecCGCommand::enqueueImpQueue() { // Kernel only uses assert if it's non interop one bool KernelUsesAssert = (!SyclKernel || SyclKernel->hasSYCLMetadata()) && - ProgramManager::getInstance().kernelUsesAssert(KernelName); + ProgramManager::getInstance().kernelUsesAssert( + KernelName, ExecKernel->MKernelNameBasedCachePtr); if (KernelUsesAssert) { EventImpl = MEvent.get(); } diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index a25107b143f6e..0c8a573946b87 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -541,7 +541,7 @@ event handler::finalize() { bool KernelUsesAssert = !(MKernel && MKernel->isInterop()) && detail::ProgramManager::getInstance().kernelUsesAssert( - MKernelName.data()); + MKernelName.data(), impl->MKernelNameBasedCachePtr); DiscardEvent = !KernelUsesAssert; }