[llvm] [OFFLOAD][L0] Add control for Copy Offload Hint (PR #203203)
Alex Duran via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 11 02:07:49 PDT 2026
https://github.com/adurang updated https://github.com/llvm/llvm-project/pull/203203
>From 2f4729bd2f9e26ce4b9791b1f8d987790a274e3f Mon Sep 17 00:00:00 2001
From: "Duran, Alex" <alejandro.duran at intel.com>
Date: Wed, 10 Jun 2026 00:07:28 -0700
Subject: [PATCH 1/2] [OFFLOAD][L0] Add control for Copy Offload Hint
---
offload/plugins-nextgen/level_zero/include/L0Options.h | 5 +++--
offload/plugins-nextgen/level_zero/src/L0Device.cpp | 5 ++++-
offload/plugins-nextgen/level_zero/src/L0Options.cpp | 2 ++
3 files changed, 9 insertions(+), 3 deletions(-)
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>
>From 1a15337e437b0a9ce8e960b18113319eb5a87e28 Mon Sep 17 00:00:00 2001
From: Alex Duran <alejandro.duran at intel.com>
Date: Thu, 11 Jun 2026 11:07:39 +0200
Subject: [PATCH 2/2] Set bit to 1 too in constructor
---
offload/plugins-nextgen/level_zero/include/L0Options.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/offload/plugins-nextgen/level_zero/include/L0Options.h b/offload/plugins-nextgen/level_zero/include/L0Options.h
index 72d0892c732bc..897e23ef4ca04 100644
--- a/offload/plugins-nextgen/level_zero/include/L0Options.h
+++ b/offload/plugins-nextgen/level_zero/include/L0Options.h
@@ -65,7 +65,7 @@ struct L0OptionFlagsTy {
uint64_t UseMemoryPool : 1;
uint64_t UseCopyOffloadHint : 1;
uint64_t Reserved : 62;
- L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(0), Reserved(0) {}
+ L0OptionFlagsTy() : UseMemoryPool(1), UseCopyOffloadHint(1), Reserved(0) {}
};
struct L0OptionsTy {
More information about the llvm-commits
mailing list