Skip to content

Commit e947a4e

Browse files
committed
Adjust implementation of functions to new ur_program structure
1 parent 47b7390 commit e947a4e

File tree

3 files changed

+384
-307
lines changed

3 files changed

+384
-307
lines changed

source/adapters/level_zero/kernel.cpp

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -493,18 +493,11 @@ ur_result_t urEnqueueDeviceGlobalVariableWrite(
493493
///< this particular kernel execution instance.
494494
) {
495495
std::scoped_lock<ur_shared_mutex> lock(Queue->Mutex);
496-
497-
ze_module_handle_t ZeModule{};
498-
auto It = Program->ZeModuleMap.find(Queue->Device->ZeDevice);
499-
if (It != Program->ZeModuleMap.end()) {
500-
ZeModule = It->second;
501-
} else {
502-
ZeModule = Program->ZeModule;
503-
}
504-
505496
// Find global variable pointer
506497
size_t GlobalVarSize = 0;
507498
void *GlobalVarPtr = nullptr;
499+
ze_module_handle_t ZeModule =
500+
Program->getZeModuleHandle(Queue->Device->ZeDevice);
508501
ZE2UR_CALL(zeModuleGetGlobalPointer,
509502
(ZeModule, Name, &GlobalVarSize, &GlobalVarPtr));
510503
if (GlobalVarSize < Offset + Count) {
@@ -555,15 +548,8 @@ ur_result_t urEnqueueDeviceGlobalVariableRead(
555548
///< this particular kernel execution instance.
556549
) {
557550
std::scoped_lock<ur_shared_mutex> lock(Queue->Mutex);
558-
559-
ze_module_handle_t ZeModule{};
560-
auto It = Program->ZeModuleMap.find(Queue->Device->ZeDevice);
561-
if (It != Program->ZeModuleMap.end()) {
562-
ZeModule = It->second;
563-
} else {
564-
ZeModule = Program->ZeModule;
565-
}
566-
551+
ze_module_handle_t ZeModule =
552+
Program->getZeModuleHandle(Queue->Device->ZeDevice);
567553
// Find global variable pointer
568554
size_t GlobalVarSize = 0;
569555
void *GlobalVarPtr = nullptr;
@@ -601,10 +587,6 @@ ur_result_t urKernelCreate(
601587
*RetKernel ///< [out] pointer to handle of kernel object created.
602588
) {
603589
std::shared_lock<ur_shared_mutex> Guard(Program->Mutex);
604-
if (Program->State != ur_program_handle_t_::state::Exe) {
605-
return UR_RESULT_ERROR_INVALID_PROGRAM_EXECUTABLE;
606-
}
607-
608590
try {
609591
ur_kernel_handle_t_ *UrKernel = new ur_kernel_handle_t_(true, Program);
610592
*RetKernel = reinterpret_cast<ur_kernel_handle_t>(UrKernel);
@@ -614,8 +596,13 @@ ur_result_t urKernelCreate(
614596
return UR_RESULT_ERROR_UNKNOWN;
615597
}
616598

617-
for (auto It : Program->ZeModuleMap) {
618-
auto ZeModule = It.second;
599+
for (auto &Dev : Program->AssociatedDevices) {
600+
auto ZeDevice = Dev->ZeDevice;
601+
// Program may be associated with all devices from the context but built only for subset of devices.
602+
if (Program->getState(ZeDevice) != ur_program_handle_t_::state::Exe)
603+
continue;
604+
605+
auto ZeModule = Program->getZeModuleHandle(ZeDevice);
619606
ZeStruct<ze_kernel_desc_t> ZeKernelDesc;
620607
ZeKernelDesc.flags = 0;
621608
ZeKernelDesc.pKernelName = KernelName;
@@ -630,8 +617,6 @@ ur_result_t urKernelCreate(
630617
return ze2urResult(ZeResult);
631618
}
632619

633-
auto ZeDevice = It.first;
634-
635620
// Store the kernel in the ZeKernelMap so the correct
636621
// kernel can be retrieved later for a specific device
637622
// where a queue is being submitted.
@@ -648,7 +633,10 @@ ur_result_t urKernelCreate(
648633
for (auto ZeSubDevice : ZeSubDevices) {
649634
(*RetKernel)->ZeKernelMap[ZeSubDevice] = ZeKernel;
650635
}
651-
}
636+
}
637+
// There is no any successfully built executable for program.
638+
if ((*RetKernel)->ZeKernelMap.empty())
639+
return UR_RESULT_ERROR_INVALID_PROGRAM_EXECUTABLE;
652640

653641
(*RetKernel)->ZeKernel = (*RetKernel)->ZeKernelMap.begin()->second;
654642

0 commit comments

Comments
 (0)