Skip to content

Commit bfb646e

Browse files
[SYCL] Cache kernel assert usage (#18538)
Cache whether a kernel uses assertions or not to avoid a set lookup.
1 parent 5965a56 commit bfb646e

File tree

6 files changed

+19
-6
lines changed

6 files changed

+19
-6
lines changed

sycl/source/detail/handler_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ class handler_impl {
210210
bool MKernelHasSpecialCaptures = true;
211211

212212
// A pointer to a kernel name based cache retrieved on the application side.
213-
KernelNameBasedCacheT *MKernelNameBasedCachePtr;
213+
KernelNameBasedCacheT *MKernelNameBasedCachePtr = nullptr;
214214
};
215215

216216
} // namespace detail

sycl/source/detail/kernel_name_based_cache_t.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <sycl/detail/ur.hpp>
1313

1414
#include <mutex>
15+
#include <optional>
1516

1617
#include <boost/unordered/unordered_flat_map.hpp>
1718

@@ -36,6 +37,7 @@ struct FastKernelSubcacheT {
3637

3738
struct KernelNameBasedCacheT {
3839
FastKernelSubcacheT FastKernelSubcache;
40+
std::optional<bool> UsesAssert;
3941
};
4042

4143
} // namespace detail

sycl/source/detail/program_manager/program_manager.hpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <detail/device_global_map_entry.hpp>
1313
#include <detail/host_pipe_map_entry.hpp>
1414
#include <detail/kernel_arg_mask.hpp>
15+
#include <detail/kernel_name_based_cache_t.hpp>
1516
#include <detail/spec_constant_impl.hpp>
1617
#include <sycl/detail/cg_types.hpp>
1718
#include <sycl/detail/common.hpp>
@@ -359,8 +360,16 @@ class ProgramManager {
359360
~ProgramManager() = default;
360361

361362
template <typename NameT>
362-
bool kernelUsesAssert(const NameT &KernelName) const {
363-
return m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end();
363+
bool kernelUsesAssert(const NameT &KernelName,
364+
KernelNameBasedCacheT *KernelNameBasedCachePtr) const {
365+
if (!KernelNameBasedCachePtr)
366+
return m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end();
367+
368+
std::optional<bool> &UsesAssert = KernelNameBasedCachePtr->UsesAssert;
369+
if (!UsesAssert.has_value())
370+
UsesAssert =
371+
m_KernelUsesAssert.find(KernelName) != m_KernelUsesAssert.end();
372+
return UsesAssert.value();
364373
}
365374

366375
SanitizerType kernelUsesSanitizer() const { return m_SanitizerFoundInImage; }

sycl/source/detail/queue_impl.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,8 @@ class queue_impl : public std::enable_shared_from_this<queue_impl> {
872872
KernelUsesAssert =
873873
(!Handler.MKernel || Handler.MKernel->hasSYCLMetadata()) &&
874874
ProgramManager::getInstance().kernelUsesAssert(
875-
Handler.MKernelName.data());
875+
Handler.MKernelName.data(),
876+
Handler.impl->MKernelNameBasedCachePtr);
876877

877878
auto &PostProcess = *PostProcessorFunc;
878879
PostProcess(IsKernel, KernelUsesAssert, Event);

sycl/source/detail/scheduler/commands.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3276,7 +3276,8 @@ ur_result_t ExecCGCommand::enqueueImpQueue() {
32763276
// Kernel only uses assert if it's non interop one
32773277
bool KernelUsesAssert =
32783278
(!SyclKernel || SyclKernel->hasSYCLMetadata()) &&
3279-
ProgramManager::getInstance().kernelUsesAssert(KernelName);
3279+
ProgramManager::getInstance().kernelUsesAssert(
3280+
KernelName, ExecKernel->MKernelNameBasedCachePtr);
32803281
if (KernelUsesAssert) {
32813282
EventImpl = MEvent.get();
32823283
}

sycl/source/handler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ event handler::finalize() {
550550
bool KernelUsesAssert =
551551
!(MKernel && MKernel->isInterop()) &&
552552
detail::ProgramManager::getInstance().kernelUsesAssert(
553-
MKernelName.data());
553+
MKernelName.data(), impl->MKernelNameBasedCachePtr);
554554
DiscardEvent = !KernelUsesAssert;
555555
}
556556

0 commit comments

Comments
 (0)