@@ -1084,25 +1084,32 @@ ProgramManager::getBuiltURProgram(const BinImgWithDeps &ImgWithDeps,
10841084
10851085FastKernelCacheValPtr ProgramManager::getOrCreateKernel (
10861086 context_impl &ContextImpl, device_impl &DeviceImpl,
1087- KernelNameStrRefT KernelName, DeviceKernelInfo &DeviceKernelInfo,
1088- const NDRDescT &NDRDesc) {
1087+ DeviceKernelInfo &DeviceKernelInfo, const NDRDescT &NDRDesc) {
10891088 if constexpr (DbgProgMgr > 0 ) {
10901089 std::cerr << " >>> ProgramManager::getOrCreateKernel(" << &ContextImpl
1091- << " , " << &DeviceImpl << " , " << KernelName << " )\n " ;
1090+ << " , " << &DeviceImpl << " , "
1091+ << static_cast <std::string_view>(DeviceKernelInfo.Name ) << " )\n " ;
10921092 }
10931093
10941094 KernelProgramCache &Cache = ContextImpl.getKernelProgramCache ();
10951095 ur_device_handle_t UrDevice = DeviceImpl.getHandleRef ();
10961096 if (SYCLConfig<SYCL_CACHE_IN_MEM>::get ()) {
1097- if (auto KernelCacheValPtr = Cache.tryToGetKernelFast (
1098- KernelName, UrDevice, DeviceKernelInfo.getKernelSubcache ())) {
1097+ if (auto KernelCacheValPtr =
1098+ Cache.tryToGetKernelFast (DeviceKernelInfo.Name , UrDevice,
1099+ DeviceKernelInfo.getKernelSubcache ())) {
10991100 return KernelCacheValPtr;
11001101 }
11011102 }
11021103
1103- Managed<ur_program_handle_t > Program =
1104- getBuiltURProgram ( ContextImpl, DeviceImpl, KernelName , NDRDesc);
1104+ Managed<ur_program_handle_t > Program = getBuiltURProgram (
1105+ ContextImpl, DeviceImpl, DeviceKernelInfo. Name , NDRDesc);
11051106
1107+ #ifdef __INTEL_PREVIEW_BREAKING_CHANGES
1108+ // Simplify this once `DeviceKernelInfo.Name`'s type is known.
1109+ // Using `decltype(auto)` instead of just `auto` to get reference when
1110+ // possible.
1111+ #endif
1112+ decltype (auto ) KernelName = KernelNameStrRefT{DeviceKernelInfo.Name };
11061113 auto BuildF = [this , &Program, &KernelName, &ContextImpl] {
11071114 adapter_impl &Adapter = ContextImpl.getAdapter ();
11081115 Managed<ur_kernel_handle_t > Kernel{Adapter};
@@ -1125,7 +1132,8 @@ FastKernelCacheValPtr ProgramManager::getOrCreateKernel(
11251132 return std::make_pair (std::move (Kernel), ArgMask);
11261133 };
11271134
1128- auto GetCachedBuildF = [&Cache, &KernelName, &Program]() {
1135+ auto GetCachedBuildF = [&Cache, &KernelName = DeviceKernelInfo.Name ,
1136+ &Program]() {
11291137 return Cache.getOrInsertKernel (Program, KernelName);
11301138 };
11311139
@@ -1147,7 +1155,7 @@ FastKernelCacheValPtr ProgramManager::getOrCreateKernel(
11471155 auto ret_val = std::make_shared<FastKernelCacheVal>(
11481156 KernelArgMaskPair.first .retain (), &(BuildResult->MBuildResultMutex ),
11491157 KernelArgMaskPair.second , std::move (Program), ContextImpl.getAdapter ());
1150- Cache.saveKernel (KernelName , UrDevice, ret_val,
1158+ Cache.saveKernel (DeviceKernelInfo. Name , UrDevice, ret_val,
11511159 DeviceKernelInfo.getKernelSubcache ());
11521160 return ret_val;
11531161}
@@ -1823,10 +1831,11 @@ ProgramManager::kernelImplicitLocalArgPos(KernelNameStrRefT KernelName) const {
18231831DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo (
18241832 const CompileTimeKernelInfoTy &Info) {
18251833 std::lock_guard<std::mutex> Guard (m_DeviceKernelInfoMapMutex);
1826- auto Result =
1834+ auto [Iter, Inserted] =
18271835 m_DeviceKernelInfoMap.try_emplace (KernelNameStrT{Info.Name .data ()}, Info);
1828- Result.first ->second .setCompileTimeInfoIfNeeded (Info);
1829- return Result.first ->second ;
1836+ if (!Inserted)
1837+ Iter->second .setCompileTimeInfoIfNeeded (Info);
1838+ return Iter->second ;
18301839}
18311840
18321841DeviceKernelInfo &
0 commit comments