Skip to content

Commit 6812c82

Browse files
committed
[L0] Track and sync the executing Queue directly during event wait
Signed-off-by: Neil R. Spruit <[email protected]>
1 parent 8ccf75a commit 6812c82

File tree

7 files changed

+26
-13
lines changed

7 files changed

+26
-13
lines changed

source/adapters/level_zero/event.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -693,9 +693,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urEventWait(
693693
logger::debug("ZeEvent = {}", ur_cast<std::uintptr_t>(ZeEvent));
694694
// If this event was an inner batched event, then lock and sync with
695695
// the Queue instead of waiting on the event.
696-
if (HostVisibleEvent->IsInnerBatchedEvent && Event->UrQueue) {
697-
std::scoped_lock<ur_shared_mutex> Lock(Event->UrQueue->Mutex);
698-
UR_CALL(Event->UrQueue->synchronize());
696+
if (HostVisibleEvent->IsInnerBatchedEvent && Event->ZeBatchedQueue) {
697+
ZE2UR_CALL(zeHostSynchronize, (Event->ZeBatchedQueue));
699698
} else {
700699
ZE2UR_CALL(zeHostSynchronize, (ZeEvent));
701700
}

source/adapters/level_zero/event.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ struct ur_event_handle_t_ : _ur_object {
199199
// Indicates inner batched event which was not used as a signal event.
200200
bool IsInnerBatchedEvent = {false};
201201

202+
// Queue where the batched command was executed.
203+
ze_command_queue_handle_t ZeBatchedQueue = {nullptr};
204+
202205
// Indicates within creation of proxy event.
203206
bool IsCreatingHostProxyEvent = {false};
204207

source/adapters/level_zero/image.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urBindlessImagesImageCopyExp(
802802
CommandList, IsInternal,
803803
/*IsMultiDevice*/ false));
804804
UR_CALL(setSignalEvent(hQueue, UseCopyEngine, &ZeEvent, Event,
805-
numEventsInWaitList, phEventWaitList));
805+
numEventsInWaitList, phEventWaitList,
806+
CommandList->second.ZeQueue));
806807
(*Event)->WaitList = TmpWaitList;
807808

808809
const auto &ZeCommandList = CommandList->first;

source/adapters/level_zero/kernel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueKernelLaunch(
212212
UR_CALL(createEventAndAssociateQueue(Queue, Event, UR_COMMAND_KERNEL_LAUNCH,
213213
CommandList, IsInternal, false));
214214
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
215-
NumEventsInWaitList, EventWaitList));
215+
NumEventsInWaitList, EventWaitList,
216+
CommandList->second.ZeQueue));
216217
(*Event)->WaitList = TmpWaitList;
217218

218219
// Save the kernel in the event, so that when the event is signalled

source/adapters/level_zero/memory.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ ur_result_t enqueueMemCopyHelper(ur_command_t CommandType,
7272
UR_CALL(createEventAndAssociateQueue(Queue, Event, CommandType, CommandList,
7373
IsInternal, false));
7474
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
75-
NumEventsInWaitList, EventWaitList));
75+
NumEventsInWaitList, EventWaitList,
76+
CommandList->second.ZeQueue));
7677
(*Event)->WaitList = TmpWaitList;
7778

7879
const auto &ZeCommandList = CommandList->first;
@@ -124,7 +125,8 @@ ur_result_t enqueueMemCopyRectHelper(
124125
UR_CALL(createEventAndAssociateQueue(Queue, Event, CommandType, CommandList,
125126
IsInternal, false));
126127
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
127-
NumEventsInWaitList, EventWaitList));
128+
NumEventsInWaitList, EventWaitList,
129+
CommandList->second.ZeQueue));
128130
(*Event)->WaitList = TmpWaitList;
129131

130132
const auto &ZeCommandList = CommandList->first;
@@ -235,7 +237,8 @@ static ur_result_t enqueueMemFillHelper(ur_command_t CommandType,
235237
UR_CALL(createEventAndAssociateQueue(Queue, Event, CommandType, CommandList,
236238
IsInternal, false));
237239
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
238-
NumEventsInWaitList, EventWaitList));
240+
NumEventsInWaitList, EventWaitList,
241+
CommandList->second.ZeQueue));
239242
(*Event)->WaitList = TmpWaitList;
240243

241244
const auto &ZeCommandList = CommandList->first;
@@ -327,7 +330,8 @@ static ur_result_t enqueueMemImageCommandHelper(
327330
UR_CALL(createEventAndAssociateQueue(Queue, Event, CommandType, CommandList,
328331
IsInternal, false));
329332
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
330-
NumEventsInWaitList, EventWaitList));
333+
NumEventsInWaitList, EventWaitList,
334+
CommandList->second.ZeQueue));
331335
(*Event)->WaitList = TmpWaitList;
332336

333337
const auto &ZeCommandList = CommandList->first;
@@ -988,7 +992,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemBufferMap(
988992
UR_CALL(Buffer->getZeHandle(ZeHandleSrc, AccessMode, Queue->Device));
989993

990994
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
991-
NumEventsInWaitList, EventWaitList));
995+
NumEventsInWaitList, EventWaitList,
996+
CommandList->second.ZeQueue));
992997

993998
ZE2UR_CALL(zeCommandListAppendMemoryCopy,
994999
(ZeCommandList, *RetMap, ZeHandleSrc + Offset, Size, ZeEvent,
@@ -1118,7 +1123,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemUnmap(
11181123
Queue->Device));
11191124

11201125
UR_CALL(setSignalEvent(Queue, UseCopyEngine, &ZeEvent, Event,
1121-
NumEventsInWaitList, EventWaitList));
1126+
NumEventsInWaitList, EventWaitList,
1127+
CommandList->second.ZeQueue));
11221128

11231129
ZE2UR_CALL(zeCommandListAppendMemoryCopy,
11241130
(ZeCommandList, ZeHandleDst + MapInfo.Offset, MappedPtr,

source/adapters/level_zero/queue.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1768,14 +1768,16 @@ bool eventCanBeBatched(ur_queue_handle_t Queue, bool UseCopyEngine,
17681768
ur_result_t setSignalEvent(ur_queue_handle_t Queue, bool UseCopyEngine,
17691769
ze_event_handle_t *ZeEvent, ur_event_handle_t *Event,
17701770
uint32_t NumEventsInWaitList,
1771-
const ur_event_handle_t *EventWaitList) {
1771+
const ur_event_handle_t *EventWaitList,
1772+
ze_command_queue_handle_t ZeQueue) {
17721773
if (Queue->Device->isIntegrated() &&
17731774
eventCanBeBatched(Queue, UseCopyEngine, NumEventsInWaitList,
17741775
EventWaitList) &&
17751776
!Queue->isInOrderQueue() && !Queue->UsingImmCmdLists &&
17761777
!UrL0OutOfOrderIntegratedSignalEvent) {
17771778
ZeEvent = nullptr;
17781779
(*Event)->IsInnerBatchedEvent = true;
1780+
(*Event)->ZeBatchedQueue = ZeQueue;
17791781
} else {
17801782
(*ZeEvent) = (*Event)->ZeEvent;
17811783
}

source/adapters/level_zero/queue.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,8 @@ bool eventCanBeBatched(ur_queue_handle_t Queue, bool UseCopyEngine,
704704
ur_result_t setSignalEvent(ur_queue_handle_t Queue, bool UseCopyEngine,
705705
ze_event_handle_t *ZeEvent, ur_event_handle_t *Event,
706706
uint32_t NumEventsInWaitList,
707-
const ur_event_handle_t *EventWaitList);
707+
const ur_event_handle_t *EventWaitList,
708+
ze_command_queue_handle_t ZeQueue);
708709

709710
// Helper function to perform the necessary cleanup of the events from reset cmd
710711
// list.

0 commit comments

Comments
 (0)