[llvm] [OFFLOAD][L0] Add control for Copy Offload Hint (PR #203203)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 11 02:04:48 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-offload

Author: Alex Duran (adurang)

<details>
<summary>Changes</summary>

In some cases setting ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT reduces performance. Here we introduce LIBOFFLOAD_LEVEL_ZERO_USE_COPY_OFFLOAD_HINT to allow users to control the hint (which continues to be on by default).

---
Full diff: https://github.com/llvm/llvm-project/pull/203203.diff


3 Files Affected:

- (modified) offload/plugins-nextgen/level_zero/include/L0Options.h (+3-2) 
- (modified) offload/plugins-nextgen/level_zero/src/L0Device.cpp (+4-1) 
- (modified) offload/plugins-nextgen/level_zero/src/L0Options.cpp (+2) 


``````````diff
diff --git a/offload/plugins-nextgen/level_zero/include/L0Options.h b/offload/plugins-nextgen/level_zero/include/L0Options.h
index c4df2e4bb16a3..72d0892c732bc 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Options.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Options.h
@@ -63,8 +63,9 @@ class SpecConstantsTy {
 /// L0 Plugin flags.
 struct L0OptionFlagsTy {
   uint64_t UseMemoryPool : 1;
-  uint64_t Reserved : 63;
-  L0OptionFlagsTy() : UseMemoryPool(1), Reserved(0) {}
+  uint64_t UseCopyOffloadHint : 1;
+  uint64_t Reserved : 62;
+  L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(0), Reserved(0) {}
 };
 
 struct L0OptionsTy {
diff --git a/offload/plugins-nextgen/level_zero/src/L0Device.cpp b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
index 3f3922036c8c3..fd664f33b81e9 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Device.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Device.cpp
@@ -714,11 +714,14 @@ Error L0DeviceTy::makeMemoryResident(void *Mem, size_t Size) {
 Expected<ze_command_list_handle_t>
 L0DeviceTy::createImmCmdList(uint32_t Ordinal, uint32_t Index, bool InOrder) {
   ze_command_queue_flags_t Flags = InOrder ? ZE_COMMAND_QUEUE_FLAG_IN_ORDER : 0;
+  if (getPlugin().getOptions().Flags.UseCopyOffloadHint)
+    Flags |= ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT;
+
   ze_command_queue_desc_t Desc{ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC,
                                nullptr,
                                Ordinal,
                                Index,
-                               Flags | ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT,
+                               Flags,
                                ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS,
                                ZE_COMMAND_QUEUE_PRIORITY_NORMAL};
   ze_command_list_handle_t CmdList = nullptr;
diff --git a/offload/plugins-nextgen/level_zero/src/L0Options.cpp b/offload/plugins-nextgen/level_zero/src/L0Options.cpp
index 561c7b5323bb4..259449bbf6476 100644
--- a/offload/plugins-nextgen/level_zero/src/L0Options.cpp
+++ b/offload/plugins-nextgen/level_zero/src/L0Options.cpp
@@ -25,6 +25,8 @@ void L0OptionsTy::processEnvironmentVars() {
       std::string(" ") +
       StringEnvar("LIBOMPTARGET_LEVEL_ZERO_COMPILATION_OPTIONS", "").get();
 
+  Flags.UseCopyOffloadHint = BoolEnvar("LIBOFFLOAD_LEVEL_ZERO_USE_COPY_OFFLOAD_HINT", true);
+
   // Memory pool syntax:
   // LIBOMPTARGET_LEVEL_ZERO_MEMORY_POOL=<Option>
   //  <Option>       := 0 | <PoolInfoList>

``````````

</details>


https://github.com/llvm/llvm-project/pull/203203


More information about the llvm-commits mailing list