From 33e7b28b0daf48c167c76b9e8bf966fa8e7846ca Mon Sep 17 00:00:00 2001 From: Sergei Vinogradov Date: Wed, 3 Sep 2025 20:29:07 +0200 Subject: [PATCH 1/2] Fix data race in the ProgramManager::getOrCreateDeviceKernelInfo --- sycl/source/detail/program_manager/program_manager.cpp | 2 ++ sycl/source/detail/program_manager/program_manager.hpp | 3 +++ 2 files changed, 5 insertions(+) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index f1a84b92b622e..b0d2a0e5af6c6 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -1822,6 +1822,7 @@ ProgramManager::kernelImplicitLocalArgPos(KernelNameStrRefT KernelName) const { DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo( const CompileTimeKernelInfoTy &Info) { + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); auto Result = m_DeviceKernelInfoMap.try_emplace(KernelNameStrT{Info.Name.data()}, Info); Result.first->second.setCompileTimeInfoIfNeeded(Info); @@ -1830,6 +1831,7 @@ DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo( DeviceKernelInfo & ProgramManager::getOrCreateDeviceKernelInfo(KernelNameStrRefT KernelName) { + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); auto Result = m_DeviceKernelInfoMap.try_emplace( KernelName, CompileTimeKernelInfoTy{std::string_view(KernelName)}); return Result.first->second; diff --git a/sycl/source/detail/program_manager/program_manager.hpp b/sycl/source/detail/program_manager/program_manager.hpp index 63a1a61b55c6c..fd1a686bf14b0 100644 --- a/sycl/source/detail/program_manager/program_manager.hpp +++ b/sycl/source/detail/program_manager/program_manager.hpp @@ -540,6 +540,9 @@ class ProgramManager { // by caching the pointers when possible. std::unordered_map m_DeviceKernelInfoMap; + // Protects m_DeviceKernelInfoMap. + std::mutex m_DeviceKernelInfoMapMutex; + // Sanitizer type used in device image SanitizerType m_SanitizerFoundInImage; From 81b65c5f688732cf60ba95bc63c69e2153afdf1b Mon Sep 17 00:00:00 2001 From: Sergei Vinogradov Date: Wed, 3 Sep 2025 21:31:36 +0200 Subject: [PATCH 2/2] Fix review comment --- sycl/source/detail/program_manager/program_manager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index b0d2a0e5af6c6..d1dbac8460959 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -2139,6 +2139,9 @@ void ProgramManager::removeImages(sycl_device_binaries DeviceBinary) { // Acquire lock to read and modify maps for kernel bundles std::lock_guard KernelIDsGuard(m_KernelIDsMutex); + // Acquire lock to erase DeviceKernelInfoMap + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); + for (int I = 0; I < DeviceBinary->NumDeviceBinaries; I++) { sycl_device_binary RawImg = &(DeviceBinary->DeviceBinaries[I]);