Skip to content

Commit

Permalink
Merge pull request #2651 from igchor/fix_queue_variant
Browse files Browse the repository at this point in the history
[L0 v2] fix queue destruction
  • Loading branch information
pbalcer authored Jan 31, 2025
2 parents e2df8ac + 7f031d3 commit 37f568d
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 22 deletions.
14 changes: 14 additions & 0 deletions scripts/templates/queue_api.cpp.mako
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ ur_queue_t_::~ur_queue_t_() {}
## FUNCTION ###################################################################
namespace ${x}::level_zero {
%for obj in th.get_queue_related_functions(specs, n, tags):
%if not 'Release' in obj['name'] and not 'Retain' in obj['name']:
${x}_result_t
${th.make_func_name(n, tags, obj)}(
%for line in th.make_param_lines(n, tags, obj, format=["name", "type", "delim"]):
Expand All @@ -42,5 +43,18 @@ try {
} catch(...) {
return exceptionToResult(std::current_exception());
}
%else:
${x}_result_t
${th.make_func_name(n, tags, obj)}(
%for line in th.make_param_lines(n, tags, obj, format=["name", "type", "delim"]):
${line}
%endfor
)
try {
return ${obj['params'][0]['name']}->${th.transform_queue_related_function_name(n, tags, obj, format=["name"])};
} catch(...) {
return exceptionToResult(std::current_exception());
}
%endif
%endfor
}
2 changes: 2 additions & 0 deletions scripts/templates/queue_api.hpp.mako
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ struct ur_queue_t_ {
virtual void deferEventFree(ur_event_handle_t hEvent) = 0;

%for obj in th.get_queue_related_functions(specs, n, tags):
%if not 'Release' in obj['name'] and not 'Retain' in obj['name']:
virtual ${x}_result_t ${th.transform_queue_related_function_name(n, tags, obj, format=["type"])} = 0;
%endif
%endfor

virtual ur_result_t
Expand Down
4 changes: 2 additions & 2 deletions source/adapters/level_zero/v2/queue_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ ur_result_t urQueueGetInfo(ur_queue_handle_t hQueue, ur_queue_info_t propName,
return exceptionToResult(std::current_exception());
}
ur_result_t urQueueRetain(ur_queue_handle_t hQueue) try {
return hQueue->get().queueRetain();
return hQueue->queueRetain();
} catch (...) {
return exceptionToResult(std::current_exception());
}
ur_result_t urQueueRelease(ur_queue_handle_t hQueue) try {
return hQueue->get().queueRelease();
return hQueue->queueRelease();
} catch (...) {
return exceptionToResult(std::current_exception());
}
Expand Down
2 changes: 0 additions & 2 deletions source/adapters/level_zero/v2/queue_api.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ struct ur_queue_t_ {

virtual ur_result_t queueGetInfo(ur_queue_info_t, size_t, void *,
size_t *) = 0;
virtual ur_result_t queueRetain() = 0;
virtual ur_result_t queueRelease() = 0;
virtual ur_result_t queueGetNativeHandle(ur_queue_native_desc_t *,
ur_native_handle_t *) = 0;
virtual ur_result_t queueFinish() = 0;
Expand Down
20 changes: 20 additions & 0 deletions source/adapters/level_zero/v2/queue_handle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,24 @@ struct ur_queue_handle_t_ {
ur_queue_t_ &get() {
return std::visit([&](auto &q) -> ur_queue_t_ & { return q; }, queue_data);
}

ur_result_t queueRetain() {
return std::visit(
[](auto &q) {
q.RefCount.increment();
return UR_RESULT_SUCCESS;
},
queue_data);
}

ur_result_t queueRelease() {
return std::visit(
[queueHandle = this](auto &q) {
if (!q.RefCount.decrementAndTest())
return UR_RESULT_SUCCESS;
delete queueHandle;
return UR_RESULT_SUCCESS;
},
queue_data);
}
};
23 changes: 8 additions & 15 deletions source/adapters/level_zero/v2/queue_immediate_in_order.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,21 +133,6 @@ ur_queue_immediate_in_order_t::queueGetInfo(ur_queue_info_t propName,
return UR_RESULT_SUCCESS;
}

ur_result_t ur_queue_immediate_in_order_t::queueRetain() {
RefCount.increment();
return UR_RESULT_SUCCESS;
}

ur_result_t ur_queue_immediate_in_order_t::queueRelease() {
if (!RefCount.decrementAndTest())
return UR_RESULT_SUCCESS;

UR_CALL(queueFinish());

delete this;
return UR_RESULT_SUCCESS;
}

void ur_queue_immediate_in_order_t::deferEventFree(ur_event_handle_t hEvent) {
std::unique_lock<ur_shared_mutex> lock(this->Mutex);
deferredEvents.push_back(hEvent);
Expand Down Expand Up @@ -197,6 +182,14 @@ ur_result_t ur_queue_immediate_in_order_t::queueFlush() {
return UR_RESULT_SUCCESS;
}

ur_queue_immediate_in_order_t::~ur_queue_immediate_in_order_t() {
try {
UR_CALL_THROWS(queueFinish());
} catch (...) {
logger::error("Failed to finish queue on destruction");
}
}

ur_result_t ur_queue_immediate_in_order_t::enqueueKernelLaunch(
ur_kernel_handle_t hKernel, uint32_t workDim,
const size_t *pGlobalWorkOffset, const size_t *pGlobalWorkSize,
Expand Down
4 changes: 1 addition & 3 deletions source/adapters/level_zero/v2/queue_immediate_in_order.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,10 @@ struct ur_queue_immediate_in_order_t : _ur_object, public ur_queue_t_ {
ur_native_handle_t, ur_queue_flags_t,
bool ownZeQueue);

~ur_queue_immediate_in_order_t() {}
~ur_queue_immediate_in_order_t();

ur_result_t queueGetInfo(ur_queue_info_t propName, size_t propSize,
void *pPropValue, size_t *pPropSizeRet) override;
ur_result_t queueRetain() override;
ur_result_t queueRelease() override;
ur_result_t queueGetNativeHandle(ur_queue_native_desc_t *pDesc,
ur_native_handle_t *phNativeQueue) override;
ur_result_t queueFinish() override;
Expand Down

0 comments on commit 37f568d

Please sign in to comment.