[llvm-branch-commits] [llvm] [libsycl] Add liboffload kernel creation (PR #188794)
Yury Plyakhin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Apr 3 13:43:38 PDT 2026
================
@@ -140,6 +161,81 @@ DeviceImageWrapper *ProgramManager::getDeviceImage(std::string_view KernelName,
"No kernel named " + std::string(KernelName) + " was found");
}
+ol_symbol_handle_t ProgramManager::getOrCreateKernel(const char *KernelName,
+ DeviceImpl &Device) {
+ std::unique_lock<std::mutex> ImageGuard(MImageCollectionMutex);
+
+ auto KernelIDIt = MKernelNameToID.find(KernelName);
+ if (KernelIDIt == MKernelNameToID.end())
+ throw exception(make_error_code(errc::runtime),
+ "No kernel named " + std::string(KernelName) +
+ " was found");
+
+ std::lock_guard<std::mutex> KernelGuard(MKernelCollectionsMutex);
+
+ auto Kernel = getKernel(KernelIDIt->second, Device);
+ if (Kernel)
+ return Kernel;
+
+ DeviceImageWrapper *DevImage =
+ getDeviceImage(KernelName, KernelIDIt->second, Device);
+
+ ImageGuard.unlock();
+
+ ol_program_handle_t Program = getOrCreateProgram(Device, DevImage);
+ assert(Program);
+ Kernel = createKernel(Program, KernelIDIt->second, KernelName, Device);
----------------
YuriPlyakhin wrote:
`KernelIDIt` may be invalidated by `addImages`, since MKernelNameToID maybe updated.
Copy kernel id:
`kernel_id KernelID = KernelIDIt->second;`
before the unlock: `ImageGuard.unlock();`
https://github.com/llvm/llvm-project/pull/188794
More information about the llvm-branch-commits
mailing list