Skip to content

Commit ce69da1

Browse files
authored
Merge pull request #2430 from nrspruit/fix_inorder_initList
[UR] Fix correct usage of In Order sync list given counting events
2 parents 61c48cd + 5bebfaf commit ce69da1

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

source/adapters/level_zero/context.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,16 @@ ur_result_t ur_context_handle_t_::initialize() {
319319

320320
ZeCommandQueueDesc.index = 0;
321321
ZeCommandQueueDesc.mode = ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS;
322+
if (Device->useDriverInOrderLists() &&
323+
Device->useDriverCounterBasedEvents()) {
324+
logger::debug(
325+
"L0 Synchronous Immediate Command List needed with In Order property.");
326+
ZeCommandQueueDesc.flags |= ZE_COMMAND_LIST_FLAG_IN_ORDER;
327+
}
322328
ZE2UR_CALL(
323329
zeCommandListCreateImmediate,
324330
(ZeContext, Device->ZeDevice, &ZeCommandQueueDesc, &ZeCommandListInit));
331+
325332
return UR_RESULT_SUCCESS;
326333
}
327334

source/adapters/level_zero/device.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,6 +1528,20 @@ bool ur_device_handle_t_::useDriverInOrderLists() {
15281528
return UseDriverInOrderLists;
15291529
}
15301530

1531+
bool ur_device_handle_t_::useDriverCounterBasedEvents() {
1532+
// Use counter-based events implementation from L0 driver.
1533+
1534+
static const bool DriverCounterBasedEventsEnabled = [] {
1535+
const char *UrRet = std::getenv("UR_L0_USE_DRIVER_COUNTER_BASED_EVENTS");
1536+
if (!UrRet) {
1537+
return true;
1538+
}
1539+
return std::atoi(UrRet) != 0;
1540+
}();
1541+
1542+
return DriverCounterBasedEventsEnabled;
1543+
}
1544+
15311545
ur_result_t ur_device_handle_t_::initialize(int SubSubDeviceOrdinal,
15321546
int SubSubDeviceIndex) {
15331547
// Maintain various device properties cache.

source/adapters/level_zero/device.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ struct ur_device_handle_t_ : _ur_object {
159159
// Whether Adapter uses driver's implementation of in-order lists or not
160160
bool useDriverInOrderLists();
161161

162+
// Whether Adapter uses driver's implementation of counter-based events or not
163+
bool useDriverCounterBasedEvents();
164+
162165
// Returns whether immediate command lists are used on this device.
163166
ImmCmdlistMode ImmCommandListUsed{};
164167

source/adapters/level_zero/queue.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,16 +1186,9 @@ ur_queue_handle_t_::ur_queue_handle_t_(
11861186
ZeCommandListBatchComputeConfig.startSize();
11871187
CopyCommandBatch.QueueBatchSize = ZeCommandListBatchCopyConfig.startSize();
11881188

1189-
static const bool useDriverCounterBasedEvents = [] {
1190-
const char *UrRet = std::getenv("UR_L0_USE_DRIVER_COUNTER_BASED_EVENTS");
1191-
if (!UrRet) {
1192-
return true;
1193-
}
1194-
return std::atoi(UrRet) != 0;
1195-
}();
11961189
this->CounterBasedEventsEnabled =
11971190
UsingImmCmdLists && isInOrderQueue() && Device->useDriverInOrderLists() &&
1198-
useDriverCounterBasedEvents &&
1191+
Device->useDriverCounterBasedEvents() &&
11991192
Device->Platform->ZeDriverEventPoolCountingEventsExtensionFound;
12001193
this->InterruptBasedEventsEnabled =
12011194
isLowPowerEvents() && isInOrderQueue() && Device->useDriverInOrderLists();

0 commit comments

Comments
 (0)