[llvm] [OFFLOAD][L0] Move dataFence logic to L0Queue (PR #201046)
Alex Duran via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 2 07:51:34 PDT 2026
https://github.com/adurang updated https://github.com/llvm/llvm-project/pull/201046
>From 1f52ea1f9d04e852b892918f6139b5438943c61b Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Tue, 2 Jun 2026 00:32:22 -0700
Subject: [PATCH 1/3] [OFFLOAD][L0] Move dataFence logic to L0Queue
---
.../level_zero/include/L0CmdListManager.h | 9 +++++++++
.../plugins-nextgen/level_zero/include/L0Queue.h | 8 ++++++--
offload/plugins-nextgen/level_zero/src/L0Device.cpp | 13 +------------
offload/plugins-nextgen/level_zero/src/L0Queue.cpp | 4 ++++
4 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h b/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
index 32236787a1865..d3a4c235156ec 100644
--- a/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
+++ b/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
@@ -126,6 +126,15 @@ class L0CmdListManagerTy {
NumWaitEvents, WaitEvents);
return Plugin::success();
}
+
+ Error appendBarrier(ze_event_handle_t SignalEvent = nullptr,
+ uint32_t NumWaitEvents = 0,
+ ze_event_handle_t *WaitEvents = nullptr) {
+ std::lock_guard<std::mutex> Lock(Mtx);
+ CALL_ZE_RET_ERROR(zeCommandListAppendBarrier, CmdList, SignalEvent,
+ NumWaitEvents, WaitEvents);
+ return Plugin::success();
+ }
};
} // namespace llvm::omp::target::plugin
diff --git a/offload/plugins-nextgen/level_zero/include/L0Queue.h b/offload/plugins-nextgen/level_zero/include/L0Queue.h
index 3534c90421af3..4f888b997e120 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Queue.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Queue.h
@@ -46,8 +46,6 @@ class L0QueueTy {
/// Clear data.
void reset() { resetImpl(); }
- ze_command_list_handle_t getCmdList() const { return CmdList->getCmdList(); }
-
Error init();
Error deinit();
Error synchronize() { return synchronizeImpl(); }
@@ -83,6 +81,8 @@ class L0QueueTy {
return launchKernelImpl(Kernel, KEnv);
}
+ Error dataFence() { return dataFenceImpl(); }
+
virtual Error initImpl() { return Plugin::success(); }
virtual Error deinitImpl() { return Plugin::success(); }
virtual void resetImpl() {}
@@ -104,6 +104,7 @@ class L0QueueTy {
size_t PatternSize, size_t Size) {
return CmdList->appendMemoryFill(Ptr, Pattern, PatternSize, Size);
}
+ virtual Error dataFenceImpl() = 0;
};
class L0AsyncQueueTy : public L0QueueTy {
@@ -150,6 +151,7 @@ class L0AsyncQueueTy : public L0QueueTy {
L0LaunchEnvTy &KEnv) override;
Error memoryFillImpl(void *Ptr, const void *Pattern, size_t PatternSize,
size_t Size) override;
+ Error dataFenceImpl() override;
};
class L0AsyncOrderedQueueTy : public L0AsyncQueueTy {
@@ -165,6 +167,7 @@ class L0AsyncOrderedQueueTy : public L0AsyncQueueTy {
Error synchronizeImpl() override;
std::tuple<size_t, ze_event_handle_t *> getMemCopyEvents() override;
std::tuple<size_t, ze_event_handle_t *> getLaunchKernelEvents() override;
+ Error dataFenceImpl() override { return Plugin::success(); }
};
class L0InorderQueueTy : public L0QueueTy {
@@ -182,6 +185,7 @@ class L0InorderQueueTy : public L0QueueTy {
Error memoryCopyImpl(void *Dst, const void *Src, size_t Size) override;
Error launchKernelImpl(ze_kernel_handle_t Kernel,
L0LaunchEnvTy &KEnv) override;
+ Error dataFenceImpl() override { return Plugin::success(); }
};
class L0SyncQueueTy : public L0InorderQueueTy {
diff --git a/offload/plugins-nextgen/level_zero/src/L0Device.cpp b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
index ac8795b1624d5..1afed11b965f0 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Device.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
@@ -729,23 +729,12 @@ L0DeviceTy::createImmCmdList(uint32_t Ordinal, uint32_t Index, bool InOrder) {
return CmdList;
}
-// TODO: logic from this function should be moved to L0QueueTy
Error L0DeviceTy::dataFence(__tgt_async_info *Async) {
- const bool Ordered =
- (getPlugin().getOptions().CommandMode == CommandModeTy::AsyncOrdered);
-
- // Nothing to do if everything is ordered.
- if (Ordered)
- return Plugin::success();
-
auto QueueOrErr = getOrCreateQueue(Async);
if (!QueueOrErr)
return QueueOrErr.takeError();
L0QueueTy *Queue = *QueueOrErr;
- ze_command_list_handle_t CmdList = Queue->getCmdList();
- CALL_ZE_RET_ERROR(zeCommandListAppendBarrier, CmdList, nullptr, 0, nullptr);
-
- return Plugin::success();
+ return Queue->dataFence();
}
Expected<bool> L0DeviceTy::isAccessiblePtrImpl(const void *Ptr, size_t Size) {
diff --git a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
index d91b3cf630c96..5f255c02516fe 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
@@ -221,6 +221,10 @@ Error L0AsyncQueueTy::dataSubmitImpl(void *TgtPtr, const void *HstPtr,
return memoryCopy(TgtPtr, SrcPtr, Size);
}
+Error L0AsyncQueueTy::dataFenceImpl() {
+ return CmdList->appendBarrier();
+}
+
Error L0AsyncQueueTy::launchKernelImpl(ze_kernel_handle_t Kernel,
L0LaunchEnvTy &KEnv) {
auto EventOrError = Device.getEvent();
>From 01c3b3992daeb6369b98bde4b49ca4220f17bc31 Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Tue, 2 Jun 2026 00:38:28 -0700
Subject: [PATCH 2/3] fix format nit
---
offload/plugins-nextgen/level_zero/src/L0Queue.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
index 5f255c02516fe..26b56f50f95cf 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
@@ -221,9 +221,7 @@ Error L0AsyncQueueTy::dataSubmitImpl(void *TgtPtr, const void *HstPtr,
return memoryCopy(TgtPtr, SrcPtr, Size);
}
-Error L0AsyncQueueTy::dataFenceImpl() {
- return CmdList->appendBarrier();
-}
+Error L0AsyncQueueTy::dataFenceImpl() { return CmdList->appendBarrier(); }
Error L0AsyncQueueTy::launchKernelImpl(ze_kernel_handle_t Kernel,
L0LaunchEnvTy &KEnv) {
>From 1eea894c556557fb1e1a6a031ca24cccd40a117f Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Tue, 2 Jun 2026 07:51:14 -0700
Subject: [PATCH 3/3] remove default args
---
.../plugins-nextgen/level_zero/include/L0CmdListManager.h | 5 ++---
offload/plugins-nextgen/level_zero/src/L0Queue.cpp | 4 +++-
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h b/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
index d3a4c235156ec..ec4906a1636e9 100644
--- a/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
+++ b/offload/plugins-nextgen/level_zero/include/L0CmdListManager.h
@@ -127,9 +127,8 @@ class L0CmdListManagerTy {
return Plugin::success();
}
- Error appendBarrier(ze_event_handle_t SignalEvent = nullptr,
- uint32_t NumWaitEvents = 0,
- ze_event_handle_t *WaitEvents = nullptr) {
+ Error appendBarrier(ze_event_handle_t SignalEvent, uint32_t NumWaitEvents,
+ ze_event_handle_t *WaitEvents) {
std::lock_guard<std::mutex> Lock(Mtx);
CALL_ZE_RET_ERROR(zeCommandListAppendBarrier, CmdList, SignalEvent,
NumWaitEvents, WaitEvents);
diff --git a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
index 26b56f50f95cf..4b926e1aada69 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Queue.cpp
@@ -221,7 +221,9 @@ Error L0AsyncQueueTy::dataSubmitImpl(void *TgtPtr, const void *HstPtr,
return memoryCopy(TgtPtr, SrcPtr, Size);
}
-Error L0AsyncQueueTy::dataFenceImpl() { return CmdList->appendBarrier(); }
+Error L0AsyncQueueTy::dataFenceImpl() {
+ return CmdList->appendBarrier(nullptr, 0, nullptr);
+}
Error L0AsyncQueueTy::launchKernelImpl(ze_kernel_handle_t Kernel,
L0LaunchEnvTy &KEnv) {
More information about the llvm-commits
mailing list