[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