[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