Skip to content

Commit e3b09e2

Browse files
committed
[L0 v2] implement missing urEventGetInfo support
1 parent fdeef32 commit e3b09e2

File tree

9 files changed

+91
-51
lines changed

9 files changed

+91
-51
lines changed

source/adapters/level_zero/v2/event.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ ur_event_handle_t_::ur_event_handle_t_(
2525
zeTimerResolution(getDevice()->ZeDeviceProperties->timerResolution),
2626
timestampMaxValue(getDevice()->getTimestampMask()) {}
2727

28-
void ur_event_handle_t_::resetQueue(ur_queue_handle_t hQueue) {
28+
void ur_event_handle_t_::resetQueueAndCommand(ur_queue_handle_t hQueue,
29+
ur_command_t commandType) {
2930
this->hQueue = hQueue;
31+
this->commandType = commandType;
3032
}
3133

3234
void ur_event_handle_t_::reset() {
@@ -39,6 +41,7 @@ void ur_event_handle_t_::reset() {
3941

4042
ze_event_handle_t ur_event_handle_t_::getZeEvent() const {
4143
assert(hQueue);
44+
assert(commandType != UR_COMMAND_FORCE_UINT32);
4245
return zeEvent.get();
4346
}
4447

@@ -145,6 +148,10 @@ ur_event_handle_t_::getEventEndTimestampAndHandle() {
145148
return {&recordEventEndTimestamp, zeEvent.get()};
146149
}
147150

151+
ur_queue_handle_t ur_event_handle_t_::getQueue() const { return hQueue; }
152+
153+
ur_command_t ur_event_handle_t_::getCommandType() const { return commandType; }
154+
148155
namespace ur::level_zero {
149156
ur_result_t urEventRetain(ur_event_handle_t hEvent) { return hEvent->retain(); }
150157

@@ -179,6 +186,19 @@ ur_result_t urEventGetInfo(ur_event_handle_t hEvent, ur_event_info_t propName,
179186
case UR_EVENT_INFO_REFERENCE_COUNT: {
180187
return returnValue(hEvent->RefCount.load());
181188
}
189+
case UR_EVENT_INFO_COMMAND_QUEUE: {
190+
return returnValue(ur_queue_handle_t{hEvent->getQueue()});
191+
}
192+
case UR_EVENT_INFO_CONTEXT: {
193+
ur_context_handle_t hContext;
194+
UR_CALL(::ur::level_zero::urQueueGetInfo(
195+
hEvent->getQueue(), UR_QUEUE_INFO_CONTEXT, sizeof(hContext),
196+
reinterpret_cast<void *>(&hContext), nullptr));
197+
return returnValue(hContext);
198+
}
199+
case UR_EVENT_INFO_COMMAND_TYPE: {
200+
return returnValue(hEvent->getCommandType());
201+
}
182202
default:
183203
logger::error(
184204
"Unsupported ParamName in urEventGetInfo: ParamName=ParamName={}(0x{})",

source/adapters/level_zero/v2/event.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ struct ur_event_handle_t_ : _ur_object {
2727
ur_event_handle_t_(v2::raii::cache_borrowed_event eventAllocation,
2828
v2::event_pool *pool);
2929

30-
// Set the queue that this event is associated with
31-
void resetQueue(ur_queue_handle_t hQueue);
30+
// Set the queue and command that this event is associated with
31+
void resetQueueAndCommand(ur_queue_handle_t hQueue, ur_command_t commandType);
3232

3333
void reset();
3434
ze_event_handle_t getZeEvent() const;
@@ -50,6 +50,12 @@ struct ur_event_handle_t_ : _ur_object {
5050
// Device associated with this event
5151
ur_device_handle_t getDevice() const;
5252

53+
// Queue associated with this event
54+
ur_queue_handle_t getQueue() const;
55+
56+
// Get the type of the command that this event is associated with
57+
ur_command_t getCommandType() const;
58+
5359
void recordStartTimestamp();
5460

5561
// Get pointer to the end timestamp, and ze event handle.
@@ -61,6 +67,7 @@ struct ur_event_handle_t_ : _ur_object {
6167

6268
private:
6369
ur_queue_handle_t hQueue = nullptr;
70+
ur_command_t commandType = UR_COMMAND_FORCE_UINT32;
6471
v2::raii::cache_borrowed_event zeEvent;
6572
v2::event_pool *pool;
6673

source/adapters/level_zero/v2/event_pool.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ namespace v2 {
1515

1616
static constexpr size_t EVENTS_BURST = 64;
1717

18-
ur_event_handle_t_ *event_pool::allocate(ur_queue_handle_t hQueue) {
18+
ur_event_handle_t_ *event_pool::allocate(ur_queue_handle_t hQueue,
19+
ur_command_t commandType) {
1920
TRACK_SCOPE_LATENCY("event_pool::allocate");
2021

2122
std::unique_lock<std::mutex> lock(*mutex);
@@ -32,7 +33,7 @@ ur_event_handle_t_ *event_pool::allocate(ur_queue_handle_t hQueue) {
3233
auto event = freelist.back();
3334
freelist.pop_back();
3435

35-
event->resetQueue(hQueue);
36+
event->resetQueueAndCommand(hQueue, commandType);
3637

3738
return event;
3839
}

source/adapters/level_zero/v2/event_pool.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ class event_pool {
4141
DeviceId Id() { return provider->device()->Id.value(); };
4242

4343
// Allocate an event from the pool. Thread safe.
44-
ur_event_handle_t_ *allocate(ur_queue_handle_t hQueue);
44+
ur_event_handle_t_ *allocate(ur_queue_handle_t hQueue,
45+
ur_command_t commandType);
4546

4647
// Free an event back to the pool. Thread safe.
4748
void free(ur_event_handle_t_ *event);

source/adapters/level_zero/v2/queue_immediate_in_order.cpp

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,10 @@ ur_queue_immediate_in_order_t::ur_queue_immediate_in_order_t(
102102
ownZeQueue) {}
103103

104104
ur_event_handle_t
105-
ur_queue_immediate_in_order_t::getSignalEvent(ur_event_handle_t *hUserEvent) {
105+
ur_queue_immediate_in_order_t::getSignalEvent(ur_event_handle_t *hUserEvent,
106+
ur_command_t commandType) {
106107
if (hUserEvent) {
107-
*hUserEvent = eventPool->allocate(this);
108+
*hUserEvent = eventPool->allocate(this, commandType);
108109
return *hUserEvent;
109110
} else {
110111
return nullptr;
@@ -217,7 +218,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueKernelLaunch(
217218
zeThreadGroupDimensions, WG, workDim,
218219
pGlobalWorkSize, pLocalWorkSize));
219220

220-
auto signalEvent = getSignalEvent(phEvent);
221+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_KERNEL_LAUNCH);
221222

222223
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
223224

@@ -262,7 +263,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueEventsWait(
262263
return UR_RESULT_SUCCESS;
263264
}
264265

265-
auto signalEvent = getSignalEvent(phEvent);
266+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_EVENTS_WAIT);
266267
auto [pWaitEvents, numWaitEvents] =
267268
getWaitListView(phEventWaitList, numEventsInWaitList);
268269

@@ -292,8 +293,9 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueEventsWaitWithBarrier(
292293
ur_result_t ur_queue_immediate_in_order_t::enqueueGenericCopyUnlocked(
293294
ur_mem_handle_t src, ur_mem_handle_t dst, bool blocking, size_t srcOffset,
294295
size_t dstOffset, size_t size, uint32_t numEventsInWaitList,
295-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
296-
auto signalEvent = getSignalEvent(phEvent);
296+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
297+
ur_command_t commandType) {
298+
auto signalEvent = getSignalEvent(phEvent, commandType);
297299

298300
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
299301

@@ -349,9 +351,9 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferRead(
349351
std::scoped_lock<ur_shared_mutex, ur_shared_mutex> lock(this->Mutex,
350352
hBuffer->getMutex());
351353

352-
return enqueueGenericCopyUnlocked(hBuffer, &dstHandle, blockingRead, offset,
353-
0, size, numEventsInWaitList,
354-
phEventWaitList, phEvent);
354+
return enqueueGenericCopyUnlocked(
355+
hBuffer, &dstHandle, blockingRead, offset, 0, size, numEventsInWaitList,
356+
phEventWaitList, phEvent, UR_COMMAND_MEM_BUFFER_READ);
355357
}
356358

357359
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWrite(
@@ -367,21 +369,22 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWrite(
367369
std::scoped_lock<ur_shared_mutex, ur_shared_mutex> lock(this->Mutex,
368370
hBuffer->getMutex());
369371

370-
return enqueueGenericCopyUnlocked(&srcHandle, hBuffer, blockingWrite, 0,
371-
offset, size, numEventsInWaitList,
372-
phEventWaitList, phEvent);
372+
return enqueueGenericCopyUnlocked(
373+
&srcHandle, hBuffer, blockingWrite, 0, offset, size, numEventsInWaitList,
374+
phEventWaitList, phEvent, UR_COMMAND_MEM_BUFFER_WRITE);
373375
}
374376

375377
ur_result_t ur_queue_immediate_in_order_t::enqueueRegionCopyUnlocked(
376378
ur_mem_handle_t src, ur_mem_handle_t dst, bool blocking,
377379
ur_rect_offset_t srcOrigin, ur_rect_offset_t dstOrigin,
378380
ur_rect_region_t region, size_t srcRowPitch, size_t srcSlicePitch,
379381
size_t dstRowPitch, size_t dstSlicePitch, uint32_t numEventsInWaitList,
380-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
382+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
383+
ur_command_t commandType) {
381384
auto zeParams = ur2zeRegionParams(srcOrigin, dstOrigin, region, srcRowPitch,
382385
dstRowPitch, srcSlicePitch, dstSlicePitch);
383386

384-
auto signalEvent = getSignalEvent(phEvent);
387+
auto signalEvent = getSignalEvent(phEvent, commandType);
385388

386389
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
387390

@@ -442,7 +445,8 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferReadRect(
442445
return enqueueRegionCopyUnlocked(
443446
hBuffer, &dstHandle, blockingRead, bufferOrigin, hostOrigin, region,
444447
bufferRowPitch, bufferSlicePitch, hostRowPitch, hostSlicePitch,
445-
numEventsInWaitList, phEventWaitList, phEvent);
448+
numEventsInWaitList, phEventWaitList, phEvent,
449+
UR_COMMAND_MEM_BUFFER_READ_RECT);
446450
}
447451

448452
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWriteRect(
@@ -462,7 +466,8 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferWriteRect(
462466
return enqueueRegionCopyUnlocked(
463467
&srcHandle, hBuffer, blockingWrite, hostOrigin, bufferOrigin, region,
464468
hostRowPitch, hostSlicePitch, bufferRowPitch, bufferSlicePitch,
465-
numEventsInWaitList, phEventWaitList, phEvent);
469+
numEventsInWaitList, phEventWaitList, phEvent,
470+
UR_COMMAND_MEM_BUFFER_WRITE_RECT);
466471
}
467472

468473
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopy(
@@ -481,7 +486,8 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopy(
481486

482487
return enqueueGenericCopyUnlocked(hBufferSrc, hBufferDst, false, srcOffset,
483488
dstOffset, size, numEventsInWaitList,
484-
phEventWaitList, phEvent);
489+
phEventWaitList, phEvent,
490+
UR_COMMAND_MEM_BUFFER_COPY);
485491
}
486492

487493
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopyRect(
@@ -499,7 +505,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferCopyRect(
499505
return enqueueRegionCopyUnlocked(
500506
hBufferSrc, hBufferDst, false, srcOrigin, dstOrigin, region, srcRowPitch,
501507
srcSlicePitch, dstRowPitch, dstSlicePitch, numEventsInWaitList,
502-
phEventWaitList, phEvent);
508+
phEventWaitList, phEvent, UR_COMMAND_MEM_BUFFER_COPY_RECT);
503509
}
504510

505511
ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferFill(
@@ -515,7 +521,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferFill(
515521

516522
return enqueueGenericFillUnlocked(hBuffer, offset, patternSize, pPattern,
517523
size, numEventsInWaitList, phEventWaitList,
518-
phEvent);
524+
phEvent, UR_COMMAND_MEM_BUFFER_FILL);
519525
}
520526

521527
ur_result_t ur_queue_immediate_in_order_t::enqueueMemImageRead(
@@ -580,7 +586,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemBufferMap(
580586
std::scoped_lock<ur_shared_mutex, ur_shared_mutex> lock(this->Mutex,
581587
hBuffer->getMutex());
582588

583-
auto signalEvent = getSignalEvent(phEvent);
589+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_MEM_BUFFER_MAP);
584590

585591
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
586592

@@ -619,7 +625,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemUnmap(
619625

620626
std::scoped_lock<ur_shared_mutex> lock(this->Mutex);
621627

622-
auto signalEvent = getSignalEvent(phEvent);
628+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_MEM_UNMAP);
623629

624630
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
625631

@@ -648,9 +654,10 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueMemUnmap(
648654
ur_result_t ur_queue_immediate_in_order_t::enqueueGenericFillUnlocked(
649655
ur_mem_handle_t dst, size_t offset, size_t patternSize,
650656
const void *pPattern, size_t size, uint32_t numEventsInWaitList,
651-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
657+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
658+
ur_command_t commandType) {
652659

653-
auto signalEvent = getSignalEvent(phEvent);
660+
auto signalEvent = getSignalEvent(phEvent, commandType);
654661

655662
auto waitList = getWaitListView(phEventWaitList, numEventsInWaitList);
656663

@@ -694,7 +701,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueUSMFill(
694701
ur_usm_handle_t_ dstHandle(hContext, size, pMem);
695702
return enqueueGenericFillUnlocked(&dstHandle, 0, patternSize, pPattern, size,
696703
numEventsInWaitList, phEventWaitList,
697-
phEvent);
704+
phEvent, UR_COMMAND_USM_FILL);
698705
}
699706

700707
ur_result_t ur_queue_immediate_in_order_t::enqueueUSMMemcpy(
@@ -706,7 +713,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueUSMMemcpy(
706713

707714
std::scoped_lock<ur_shared_mutex> lock(this->Mutex);
708715

709-
auto signalEvent = getSignalEvent(phEvent);
716+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_USM_MEMCPY);
710717

711718
auto [pWaitEvents, numWaitEvents] =
712719
getWaitListView(phEventWaitList, numEventsInWaitList);
@@ -734,7 +741,7 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueUSMPrefetch(
734741

735742
std::scoped_lock<ur_shared_mutex> lock(this->Mutex);
736743

737-
auto signalEvent = getSignalEvent(phEvent);
744+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_USM_PREFETCH);
738745

739746
auto [pWaitEvents, numWaitEvents] =
740747
getWaitListView(phEventWaitList, numEventsInWaitList);
@@ -767,7 +774,7 @@ ur_queue_immediate_in_order_t::enqueueUSMAdvise(const void *pMem, size_t size,
767774

768775
auto zeAdvice = ur_cast<ze_memory_advice_t>(advice);
769776

770-
auto signalEvent = getSignalEvent(phEvent);
777+
auto signalEvent = getSignalEvent(phEvent, UR_COMMAND_USM_ADVISE);
771778

772779
auto [pWaitEvents, numWaitEvents] = getWaitListView(nullptr, 0);
773780

@@ -983,7 +990,8 @@ ur_result_t ur_queue_immediate_in_order_t::enqueueTimestampRecordingExp(
983990

984991
std::scoped_lock<ur_shared_mutex> lock(this->Mutex);
985992

986-
auto signalEvent = getSignalEvent(phEvent);
993+
auto signalEvent =
994+
getSignalEvent(phEvent, UR_COMMAND_TIMESTAMP_RECORDING_EXP);
987995

988996
if (!signalEvent) {
989997
return UR_RESULT_ERROR_INVALID_NULL_HANDLE;

source/adapters/level_zero/v2/queue_immediate_in_order.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ struct ur_queue_immediate_in_order_t : _ur_object, public ur_queue_handle_t_ {
5252
getWaitListView(const ur_event_handle_t *phWaitEvents,
5353
uint32_t numWaitEvents);
5454

55-
ur_event_handle_t getSignalEvent(ur_event_handle_t *hUserEvent);
55+
ur_event_handle_t getSignalEvent(ur_event_handle_t *hUserEvent,
56+
ur_command_t commandType);
5657

5758
void deferEventFree(ur_event_handle_t hEvent) override;
5859

@@ -61,17 +62,20 @@ struct ur_queue_immediate_in_order_t : _ur_object, public ur_queue_handle_t_ {
6162
ur_rect_offset_t srcOrigin, ur_rect_offset_t dstOrigin,
6263
ur_rect_region_t region, size_t srcRowPitch, size_t srcSlicePitch,
6364
size_t dstRowPitch, size_t dstSlicePitch, uint32_t numEventsInWaitList,
64-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent);
65+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
66+
ur_command_t commandType);
6567

6668
ur_result_t enqueueGenericCopyUnlocked(
6769
ur_mem_handle_t src, ur_mem_handle_t dst, bool blocking, size_t srcOffset,
6870
size_t dstOffset, size_t size, uint32_t numEventsInWaitList,
69-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent);
71+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
72+
ur_command_t commandType);
7073

7174
ur_result_t enqueueGenericFillUnlocked(
7275
ur_mem_handle_t hBuffer, size_t offset, size_t patternSize,
7376
const void *pPattern, size_t size, uint32_t numEventsInWaitList,
74-
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent);
77+
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent,
78+
ur_command_t commandType);
7579

7680
public:
7781
ur_queue_immediate_in_order_t(ur_context_handle_t, ur_device_handle_t,

test/adapters/level_zero/v2/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ add_unittest(level_zero_event_pool
4444
${PROJECT_SOURCE_DIR}/source/adapters/level_zero/v2/event_provider_normal.cpp
4545
${PROJECT_SOURCE_DIR}/source/adapters/level_zero/v2/event_provider_counter.cpp
4646
${PROJECT_SOURCE_DIR}/source/adapters/level_zero/v2/event.cpp
47+
${PROJECT_SOURCE_DIR}/source/adapters/level_zero/v2/queue_api.cpp
4748
)
4849

4950
add_adapter_test(level_zero_memory_residency

0 commit comments

Comments
 (0)