[llvm] [OFFLOAD][L0] Use counter-based events for inorder queues (PR #202301)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 11 03:15:14 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-offload
Author: Alex Duran (adurang)
<details>
<summary>Changes</summary>
Inorder queues can use counter-based events which have better performance and provide early-reused semantics.
---
Full diff: https://github.com/llvm/llvm-project/pull/202301.diff
3 Files Affected:
- (modified) offload/plugins-nextgen/level_zero/include/L0Event.h (+11-3)
- (modified) offload/plugins-nextgen/level_zero/src/L0Context.cpp (+13-1)
- (modified) offload/plugins-nextgen/level_zero/src/L0Event.cpp (+3-2)
``````````diff
diff --git a/offload/plugins-nextgen/level_zero/include/L0Event.h b/offload/plugins-nextgen/level_zero/include/L0Event.h
index 82361e4c74200..2ea729c821963 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Event.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Event.h
@@ -33,9 +33,10 @@ class L0EventTy {
ze_event_handle_t getZeEvent() const { return ZeEvent; }
L0QueueTy *getQueue() const { return Queue; }
- Error reset() {
+ Error reset(bool SkipEventReset) {
Queue = nullptr;
- CALL_ZE_RET_ERROR(zeEventHostReset, ZeEvent);
+ if (!SkipEventReset)
+ CALL_ZE_RET_ERROR(zeEventHostReset, ZeEvent);
return Plugin::success();
}
@@ -71,6 +72,9 @@ class EventPoolTy {
/// Additional event pool flags common to this pool.
uint32_t Flags = 0;
+ /// Whether counter-based events are being used (don't need reset).
+ bool UseCounterBasedEvents = false;
+
/// Protection.
std::unique_ptr<std::mutex> Mtx;
@@ -89,9 +93,13 @@ class EventPoolTy {
public:
/// Initialize context, flags, and mutex.
- Error init(ze_context_handle_t ContextIn, uint32_t FlagsIn) {
+ Error init(ze_context_handle_t ContextIn, bool UseCounterBased,
+ uint32_t FlagsIn) {
Context = ContextIn;
Flags = FlagsIn;
+ UseCounterBasedEvents = UseCounterBased;
+ if (UseCounterBasedEvents)
+ Flags |= ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP;
Mtx.reset(new std::mutex);
return Plugin::success();
}
diff --git a/offload/plugins-nextgen/level_zero/src/L0Context.cpp b/offload/plugins-nextgen/level_zero/src/L0Context.cpp
index b9c2c97ce31fd..4fe0aa34ecbaf 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Context.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Context.cpp
@@ -28,7 +28,19 @@ Error L0ContextTy::init() {
ze_context_desc_t Desc{ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0};
CALL_ZE_RET_ERROR(zeContextCreate, zeDriver, &Desc, &zeContext);
- if (auto Err = EventPool.init(zeContext, 0)) {
+
+ const auto &Options = Plugin.getOptions();
+ bool UseCounterBasedEvents = Options.CommandMode == CommandModeTy::InOrder ||
+ Options.CommandMode == CommandModeTy::Sync;
+ if (UseCounterBasedEvents)
+ ODBG(OLDT_Init) << "Using counter-based events for "
+ << (Options.CommandMode == CommandModeTy::InOrder
+ ? "InOrder"
+ : "Sync")
+ << " command mode";
+
+ if (auto Err = EventPool.init(zeContext, UseCounterBasedEvents,
+ /* Flags */ 0)) {
cleanupOnError();
return Err;
}
diff --git a/offload/plugins-nextgen/level_zero/src/L0Event.cpp b/offload/plugins-nextgen/level_zero/src/L0Event.cpp
index cb70df71da74d..010c5ba1e0921 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Event.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Event.cpp
@@ -62,7 +62,8 @@ Expected<ze_event_handle_t> EventPoolTy::getEventLocked() {
/// Return an event to the pool.
Error EventPoolTy::releaseEvent(ze_event_handle_t Event) {
std::lock_guard<std::mutex> Lock(*Mtx);
- CALL_ZE_RET_ERROR(zeEventHostReset, Event);
+ if (!UseCounterBasedEvents)
+ CALL_ZE_RET_ERROR(zeEventHostReset, Event);
Events.push_back(Event);
return Plugin::success();
}
@@ -80,7 +81,7 @@ Expected<L0EventTy *> EventPoolTy::getEventObject() {
}
auto *Ret = EventObjects.back();
- if (auto Err = Ret->reset())
+ if (auto Err = Ret->reset(/* SkipEventReset */ UseCounterBasedEvents))
return std::move(Err);
EventObjects.pop_back();
``````````
</details>
https://github.com/llvm/llvm-project/pull/202301
More information about the llvm-commits
mailing list