Skip to content
Merged
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions sycl/plugins/level_zero/pi_level_zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1991,8 +1991,7 @@ pi_result piQueueRetain(pi_queue Queue) {
pi_result piQueueRelease(pi_queue Queue) {
PI_ASSERT(Queue, PI_INVALID_QUEUE);

// Lock automatically releases when this goes out of scope.
std::lock_guard<std::mutex> lock(Queue->PiQueueMutex);
Queue->PiQueueMutex.lock();

if (--(Queue->RefCount) == 0) {
// It is possible to get to here and still have an open command list
Expand All @@ -2011,6 +2010,10 @@ pi_result piQueueRelease(pi_queue Queue) {

zePrint("piQueueRelease NumTimesClosedFull %d, NumTimesClosedEarly %d\n",
Queue->NumTimesClosedFull, Queue->NumTimesClosedEarly);
Queue->PiQueueMutex.unlock();
delete Queue;
} else {
Queue->PiQueueMutex.unlock();
}
return PI_SUCCESS;
}
Expand Down Expand Up @@ -3404,7 +3407,7 @@ piEnqueueKernelLaunch(pi_queue Queue, pi_kernel Kernel, pi_uint32 WorkDim,
// Save the kernel in the event, so that when the event is signalled
// the code can do a piKernelRelease on this kernel.
(*Event)->CommandData = (void *)Kernel;

Queue->RefCount++;
// Use piKernelRetain to increment the reference count and indicate
// that the Kernel is in use. Once the event has been signalled, the
// code in cleanupAfterEvent will do a piReleaseKernel to update
Expand Down Expand Up @@ -3677,7 +3680,7 @@ pi_result piEventRelease(pi_event Event) {

auto Context = Event->Context;
ZE_CALL(Context->decrementAliveEventsInPool(Event->ZeEventPool));

piQueueRelease(Event->Queue);
delete Event;
}
return PI_SUCCESS;
Expand Down Expand Up @@ -3876,6 +3879,7 @@ pi_result piEnqueueEventsWaitWithBarrier(pi_queue Queue,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

// TODO: use unique_ptr with custom deleter in the whole Level Zero plugin for
Expand Down Expand Up @@ -3941,7 +3945,7 @@ enqueueMemCopyHelper(pi_command_type CommandType, pi_queue Queue, void *Dst,
pi_bool BlockingWrite, size_t Size, const void *Src,
pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList, pi_event *Event) {

assert(Queue);
// Get a new command list to be used on this call
ze_command_list_handle_t ZeCommandList = nullptr;
ze_fence_handle_t ZeFence = nullptr;
Expand All @@ -3960,6 +3964,7 @@ enqueueMemCopyHelper(pi_command_type CommandType, pi_queue Queue, void *Dst,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

ze_event_handle_t *ZeEventWaitList =
Expand Down Expand Up @@ -4001,7 +4006,7 @@ static pi_result enqueueMemCopyRectHelper(
size_t DstSlicePitch, pi_bool Blocking, pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList, pi_event *Event) {

PI_ASSERT(Region && SrcOrigin && DstOrigin, PI_INVALID_VALUE);
PI_ASSERT(Region && SrcOrigin && DstOrigin && Queue, PI_INVALID_VALUE);

// Get a new command list to be used on this call
ze_command_list_handle_t ZeCommandList = nullptr;
Expand All @@ -4021,6 +4026,7 @@ static pi_result enqueueMemCopyRectHelper(
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

ze_event_handle_t *ZeEventWaitList =
Expand Down Expand Up @@ -4184,7 +4190,7 @@ enqueueMemFillHelper(pi_command_type CommandType, pi_queue Queue, void *Ptr,
const void *Pattern, size_t PatternSize, size_t Size,
pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList, pi_event *Event) {

assert(Queue);
// Get a new command list to be used on this call
ze_command_list_handle_t ZeCommandList = nullptr;
ze_fence_handle_t ZeFence = nullptr;
Expand All @@ -4203,6 +4209,7 @@ enqueueMemFillHelper(pi_command_type CommandType, pi_queue Queue, void *Ptr,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

ze_event_handle_t *ZeEventWaitList =
Expand Down Expand Up @@ -4288,6 +4295,7 @@ pi_result piEnqueueMemBufferMap(pi_queue Queue, pi_mem Buffer,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
piQueueRetain(Queue);
}

// TODO: Level Zero is missing the memory "mapping" capabilities, so we are
Expand Down Expand Up @@ -4386,6 +4394,7 @@ pi_result piEnqueueMemUnmap(pi_queue Queue, pi_mem MemObj, void *MappedPtr,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
piQueueRetain(Queue);
}

_pi_mem::Mapping MapInfo = {};
Expand Down Expand Up @@ -4517,7 +4526,7 @@ enqueueMemImageCommandHelper(pi_command_type CommandType, pi_queue Queue,
size_t RowPitch, size_t SlicePitch,
pi_uint32 NumEventsInWaitList,
const pi_event *EventWaitList, pi_event *Event) {

assert(Queue);
// Get a new command list to be used on this call
ze_command_list_handle_t ZeCommandList = nullptr;
ze_fence_handle_t ZeFence = nullptr;
Expand All @@ -4536,6 +4545,7 @@ enqueueMemImageCommandHelper(pi_command_type CommandType, pi_queue Queue,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
piQueueRetain(Queue);
}

ze_event_handle_t *ZeEventWaitList =
Expand Down Expand Up @@ -5143,6 +5153,7 @@ pi_result piextUSMEnqueuePrefetch(pi_queue Queue, const void *Ptr, size_t Size,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

ze_event_handle_t *ZeEventWaitList =
Expand Down Expand Up @@ -5203,6 +5214,7 @@ pi_result piextUSMEnqueueMemAdvise(pi_queue Queue, const void *Ptr,
(*Event)->ZeCommandList = ZeCommandList;

ZeEvent = (*Event)->ZeEvent;
Queue->RefCount++;
}

ZE_CALL(zeCommandListAppendMemAdvise(ZeCommandList, Queue->Device->ZeDevice,
Expand Down