From 601b78571274c15be1274c4e69bcff6d44e08ea4 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Mon, 19 May 2025 05:06:45 -0700 Subject: [PATCH 1/2] [SYCL] Cache kernel assert usage --- sycl/source/detail/kernel_name_based_cache_t.hpp | 2 ++ .../detail/program_manager/program_manager.hpp | 13 +++++++++++-- sycl/source/detail/queue_impl.hpp | 3 ++- sycl/source/detail/scheduler/commands.cpp | 3 ++- sycl/source/handler.cpp | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) 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 8a0a1476c2ee1..3f29105fa60c1 100644 --- a/sycl/source/detail/queue_impl.hpp +++ b/sycl/source/detail/queue_impl.hpp @@ -777,7 +777,8 @@ class queue_impl { KernelUsesAssert = (!Handler.MKernel || Handler.MKernel->hasSYCLMetadata()) && ProgramManager::getInstance().kernelUsesAssert( - Handler.MKernelName.data()); + Handler.MKernelName.data(), + Handler.impl->MKernelNameBasedCachePtr); auto Event = MIsInorder ? finalizeHandlerInOrder(Handler) : finalizeHandlerOutOfOrder(Handler); diff --git a/sycl/source/detail/scheduler/commands.cpp b/sycl/source/detail/scheduler/commands.cpp index 3c4580acedee4..8ff6e17f6a205 100644 --- a/sycl/source/detail/scheduler/commands.cpp +++ b/sycl/source/detail/scheduler/commands.cpp @@ -3268,7 +3268,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; } From e1613ed0f6080763a2eea51bd1e2a141097e9f40 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Mon, 2 Jun 2025 05:15:36 -0700 Subject: [PATCH 2/2] Fix default value of cache ptr --- sycl/source/detail/handler_impl.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/source/detail/handler_impl.hpp b/sycl/source/detail/handler_impl.hpp index 9dac6a7f435d4..e54aaa662a335 100644 --- a/sycl/source/detail/handler_impl.hpp +++ b/sycl/source/detail/handler_impl.hpp @@ -210,7 +210,7 @@ class handler_impl { bool MKernelHasSpecialCaptures = true; // A pointer to a kernel name based cache retrieved on the application side. - KernelNameBasedCacheT *MKernelNameBasedCachePtr; + KernelNameBasedCacheT *MKernelNameBasedCachePtr = nullptr; }; } // namespace detail