Skip to content

Commit edfb17a

Browse files
committed
Adjust implementation of functions to new ur_program structure
1 parent 94f8f63 commit edfb17a

File tree

3 files changed

+362
-305
lines changed

3 files changed

+362
-305
lines changed

source/adapters/level_zero/kernel.cpp

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -495,18 +495,11 @@ ur_result_t urEnqueueDeviceGlobalVariableWrite(
495495
///< this particular kernel execution instance.
496496
) {
497497
std::scoped_lock<ur_shared_mutex> lock(Queue->Mutex);
498-
499-
ze_module_handle_t ZeModule{};
500-
auto It = Program->ZeModuleMap.find(Queue->Device->ZeDevice);
501-
if (It != Program->ZeModuleMap.end()) {
502-
ZeModule = It->second;
503-
} else {
504-
ZeModule = Program->ZeModule;
505-
}
506-
507498
// Find global variable pointer
508499
size_t GlobalVarSize = 0;
509500
void *GlobalVarPtr = nullptr;
501+
ze_module_handle_t ZeModule =
502+
Program->getZeModuleHandle(Queue->Device->ZeDevice);
510503
ZE2UR_CALL(zeModuleGetGlobalPointer,
511504
(ZeModule, Name, &GlobalVarSize, &GlobalVarPtr));
512505
if (GlobalVarSize < Offset + Count) {
@@ -557,15 +550,8 @@ ur_result_t urEnqueueDeviceGlobalVariableRead(
557550
///< this particular kernel execution instance.
558551
) {
559552
std::scoped_lock<ur_shared_mutex> lock(Queue->Mutex);
560-
561-
ze_module_handle_t ZeModule{};
562-
auto It = Program->ZeModuleMap.find(Queue->Device->ZeDevice);
563-
if (It != Program->ZeModuleMap.end()) {
564-
ZeModule = It->second;
565-
} else {
566-
ZeModule = Program->ZeModule;
567-
}
568-
553+
ze_module_handle_t ZeModule =
554+
Program->getZeModuleHandle(Queue->Device->ZeDevice);
569555
// Find global variable pointer
570556
size_t GlobalVarSize = 0;
571557
void *GlobalVarPtr = nullptr;
@@ -603,10 +589,6 @@ ur_result_t urKernelCreate(
603589
*RetKernel ///< [out] pointer to handle of kernel object created.
604590
) {
605591
std::shared_lock<ur_shared_mutex> Guard(Program->Mutex);
606-
if (Program->State != ur_program_handle_t_::state::Exe) {
607-
return UR_RESULT_ERROR_INVALID_PROGRAM_EXECUTABLE;
608-
}
609-
610592
try {
611593
ur_kernel_handle_t_ *UrKernel = new ur_kernel_handle_t_(true, Program);
612594
*RetKernel = reinterpret_cast<ur_kernel_handle_t>(UrKernel);
@@ -616,8 +598,13 @@ ur_result_t urKernelCreate(
616598
return UR_RESULT_ERROR_UNKNOWN;
617599
}
618600

619-
for (auto It : Program->ZeModuleMap) {
620-
auto ZeModule = It.second;
601+
for (auto &Dev : Program->AssociatedDevices) {
602+
auto ZeDevice = Dev->ZeDevice;
603+
// Program may be associated with all devices from the context but built only for subset of devices.
604+
if (Program->getState(ZeDevice) != ur_program_handle_t_::state::Exe)
605+
continue;
606+
607+
auto ZeModule = Program->getZeModuleHandle(ZeDevice);
621608
ZeStruct<ze_kernel_desc_t> ZeKernelDesc;
622609
ZeKernelDesc.flags = 0;
623610
ZeKernelDesc.pKernelName = KernelName;
@@ -632,8 +619,6 @@ ur_result_t urKernelCreate(
632619
return ze2urResult(ZeResult);
633620
}
634621

635-
auto ZeDevice = It.first;
636-
637622
// Store the kernel in the ZeKernelMap so the correct
638623
// kernel can be retrieved later for a specific device
639624
// where a queue is being submitted.
@@ -650,7 +635,10 @@ ur_result_t urKernelCreate(
650635
for (auto ZeSubDevice : ZeSubDevices) {
651636
(*RetKernel)->ZeKernelMap[ZeSubDevice] = ZeKernel;
652637
}
653-
}
638+
}
639+
// There is no any successfully built executable for program.
640+
if ((*RetKernel)->ZeKernelMap.empty())
641+
return UR_RESULT_ERROR_INVALID_PROGRAM_EXECUTABLE;
654642

655643
(*RetKernel)->ZeKernel = (*RetKernel)->ZeKernelMap.begin()->second;
656644

0 commit comments

Comments
 (0)