Skip to content

Commit 0cb4d00

Browse files
authored
[UR][L0v2] Add support for ZE_COMMAND_LIST_FLAG_COPY_OFFLOAD_HINT (#21387)
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 893910f commit 0cb4d00

File tree

7 files changed

+48
-20
lines changed

7 files changed

+48
-20
lines changed

unified-runtime/cmake/FetchLevelZero.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ if(NOT LEVEL_ZERO_LIB_NAME AND NOT LEVEL_ZERO_LIBRARY)
5555
set(UR_LEVEL_ZERO_LOADER_REPO "https://github.com/oneapi-src/level-zero.git")
5656
# Remember to update the pkg_check_modules minimum version above when updating the
5757
# clone tag
58-
set(UR_LEVEL_ZERO_LOADER_TAG v1.26.0)
58+
set(UR_LEVEL_ZERO_LOADER_TAG v1.28.0)
5959

6060
# Disable due to a bug https://github.com/oneapi-src/level-zero/issues/104
6161
set(CMAKE_INCLUDE_CURRENT_DIR OFF)
@@ -130,7 +130,7 @@ if(L0_COMPUTE_RUNTIME_HEADERS)
130130
set(COMPUTE_RUNTIME_REPO_PATH "${L0_COMPUTE_RUNTIME_HEADERS}")
131131
else()
132132
set(UR_COMPUTE_RUNTIME_REPO "https://github.com/intel/compute-runtime.git")
133-
set(UR_COMPUTE_RUNTIME_TAG 25.35.35096.9)
133+
set(UR_COMPUTE_RUNTIME_TAG 26.05.37020.3)
134134

135135
include(FetchContent)
136136
# Sparse fetch only the dir with level zero headers for experimental features to avoid pulling in the entire compute-runtime.

unified-runtime/source/adapters/level_zero/platform.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,13 @@ ur_result_t ur_platform_handle_t_::initialize() {
586586
ZeHostTaskExt.Supported =
587587
ZeHostTaskExt.zeCommandListAppendHostFunction != nullptr;
588588

589-
ZeCopyOffloadFlagSupported = this->isDriverVersionNewerOrSimilar(1, 14, 0);
589+
// ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT flag is support since L0 v1.14.0
590+
ZeCopyOffloadQueueFlagSupported =
591+
this->isDriverVersionNewerOrSimilar(1, 14, 0);
592+
593+
// ZE_COMMAND_LIST_FLAG_COPY_OFFLOAD_HINT flag is support since L0 v1.15.0
594+
ZeCopyOffloadListFlagSupported =
595+
this->isDriverVersionNewerOrSimilar(1, 15, 0);
590596

591597
return UR_RESULT_SUCCESS;
592598
}

unified-runtime/source/adapters/level_zero/platform.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ struct ur_platform_handle_t_ : ur::handle_base<ur::level_zero::ddi_getter>,
6969
bool zeDriverImmediateCommandListAppendFound{false};
7070
bool ZeDriverEuCountExtensionFound{false};
7171
bool ZeCopyOffloadExtensionSupported{false};
72-
bool ZeCopyOffloadFlagSupported{false};
72+
bool ZeCopyOffloadQueueFlagSupported{false};
73+
bool ZeCopyOffloadListFlagSupported{false};
7374
bool ZeBindlessImagesExtensionSupported{false};
7475
bool ZeLUIDSupported{false};
7576

unified-runtime/source/adapters/level_zero/v2/command_list_cache.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ command_list_cache_t::command_list_cache_t(
8282
supportedExtensions.ZeCopyOffloadExtensionSupported},
8383
ZeMutableCmdListExtentionSupported{
8484
supportedExtensions.ZeMutableCmdListExtentionSupported},
85-
ZeCopyOffloadFlagSupported{
86-
supportedExtensions.ZeCopyOffloadFlagSupported} {}
85+
ZeCopyOffloadQueueFlagSupported{
86+
supportedExtensions.ZeCopyOffloadQueueFlagSupported},
87+
ZeCopyOffloadListFlagSupported{
88+
supportedExtensions.ZeCopyOffloadListFlagSupported} {}
8789

8890
static bool ForceDisableCopyOffload = [] {
8991
return getenv_tobool("UR_L0_V2_FORCE_DISABLE_COPY_OFFLOAD");
@@ -123,8 +125,8 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
123125
QueueDesc.index = ImmCmdDesc->Index.value();
124126
}
125127

126-
// ZeCopyOffloadFlagSupported is set during platform initialization
127-
if (requestedCopyOffload && ZeCopyOffloadFlagSupported) {
128+
// ZeCopyOffloadQueueFlagSupported is set during platform initialization
129+
if (requestedCopyOffload && ZeCopyOffloadQueueFlagSupported) {
128130
QueueDesc.flags |= ZE_COMMAND_QUEUE_FLAG_COPY_OFFLOAD_HINT;
129131
QueueDesc.pNext = nullptr;
130132
} else {
@@ -153,11 +155,25 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
153155
CmdListDesc.flags =
154156
RegCmdDesc.IsInOrder ? ZE_COMMAND_LIST_FLAG_IN_ORDER : 0;
155157
CmdListDesc.commandQueueGroupOrdinal = RegCmdDesc.Ordinal;
156-
CmdListDesc.pNext = &offloadDesc;
158+
159+
// Pointer to the last element in the pNext chain,
160+
// used to append extensions.
161+
const void **ppNext;
162+
163+
// ZeCopyOffloadListFlagSupported is set during platform initialization
164+
if (requestedCopyOffload && ZeCopyOffloadListFlagSupported) {
165+
CmdListDesc.flags |= ZE_COMMAND_LIST_FLAG_COPY_OFFLOAD_HINT;
166+
CmdListDesc.pNext = nullptr;
167+
ppNext = &CmdListDesc.pNext;
168+
} else {
169+
CmdListDesc.pNext = &offloadDesc;
170+
ppNext = &offloadDesc.pNext;
171+
}
172+
157173
ZeStruct<ze_mutable_command_list_exp_desc_t> ZeMutableCommandListDesc;
158174
if (IsMutable) {
159175
ZeMutableCommandListDesc.flags = 0;
160-
offloadDesc.pNext = &ZeMutableCommandListDesc;
176+
*ppNext = &ZeMutableCommandListDesc;
161177
}
162178

163179
UR_LOG(DEBUG,

unified-runtime/source/adapters/level_zero/v2/command_list_cache.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,16 @@ using command_list_unique_handle =
2929
struct supported_extensions_descriptor_t {
3030
supported_extensions_descriptor_t(bool ZeCopyOffloadExtensionSupported,
3131
bool ZeMutableCmdListExtentionSupported,
32-
bool ZeCopyOffloadFlagSupported)
32+
bool ZeCopyOffloadQueueFlagSupported,
33+
bool ZeCopyOffloadListFlagSupported)
3334
: ZeCopyOffloadExtensionSupported(ZeCopyOffloadExtensionSupported),
3435
ZeMutableCmdListExtentionSupported(ZeMutableCmdListExtentionSupported),
35-
ZeCopyOffloadFlagSupported(ZeCopyOffloadFlagSupported) {}
36+
ZeCopyOffloadQueueFlagSupported(ZeCopyOffloadQueueFlagSupported),
37+
ZeCopyOffloadListFlagSupported(ZeCopyOffloadListFlagSupported) {}
3638
bool ZeCopyOffloadExtensionSupported;
3739
bool ZeMutableCmdListExtentionSupported;
38-
bool ZeCopyOffloadFlagSupported;
40+
bool ZeCopyOffloadQueueFlagSupported;
41+
bool ZeCopyOffloadListFlagSupported;
3942
};
4043

4144
struct command_list_desc_t {
@@ -100,7 +103,8 @@ struct command_list_cache_t {
100103
ze_context_handle_t ZeContext;
101104
bool ZeCopyOffloadExtensionSupported;
102105
bool ZeMutableCmdListExtentionSupported;
103-
bool ZeCopyOffloadFlagSupported;
106+
bool ZeCopyOffloadQueueFlagSupported;
107+
bool ZeCopyOffloadListFlagSupported;
104108
std::unordered_map<command_list_descriptor_t,
105109
std::stack<raii::ze_command_list_handle_t>,
106110
command_list_descriptor_hash_t>

unified-runtime/source/adapters/level_zero/v2/context.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,11 @@ ur_context_handle_t_::ur_context_handle_t_(ze_context_handle_t hContext,
7575
bool ownZeContext)
7676
: hContext(hContext, ownZeContext),
7777
hDevices(uniqueDevices(numDevices, phDevices)),
78-
commandListCache(hContext,
79-
{phDevices[0]->Platform->ZeCopyOffloadExtensionSupported,
80-
phDevices[0]->Platform->ZeMutableCmdListExt.Supported,
81-
phDevices[0]->Platform->ZeCopyOffloadFlagSupported}),
78+
commandListCache(
79+
hContext, {phDevices[0]->Platform->ZeCopyOffloadExtensionSupported,
80+
phDevices[0]->Platform->ZeMutableCmdListExt.Supported,
81+
phDevices[0]->Platform->ZeCopyOffloadQueueFlagSupported,
82+
phDevices[0]->Platform->ZeCopyOffloadListFlagSupported}),
8283
eventPoolCacheImmediate(
8384
this, phDevices[0]->Platform->getNumDevices(),
8485
[context = this, platform = phDevices[0]->Platform](

unified-runtime/test/adapters/level_zero/v2/command_list_cache_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct CommandListCacheTest : public uur::urContextTest {
3535
UUR_INSTANTIATE_DEVICE_TEST_SUITE(CommandListCacheTest);
3636

3737
TEST_P(CommandListCacheTest, CanStoreAndRetriveImmediateAndRegularCmdLists) {
38-
v2::supported_extensions_descriptor_t supportedExtensions(false, false,
38+
v2::supported_extensions_descriptor_t supportedExtensions(false, false, false,
3939
false);
4040
v2::command_list_cache_t cache(context->getZeHandle(), supportedExtensions);
4141

@@ -92,7 +92,7 @@ TEST_P(CommandListCacheTest, CanStoreAndRetriveImmediateAndRegularCmdLists) {
9292
}
9393

9494
TEST_P(CommandListCacheTest, ImmediateCommandListsHaveProperAttributes) {
95-
v2::supported_extensions_descriptor_t supportedExtensions(false, false,
95+
v2::supported_extensions_descriptor_t supportedExtensions(false, false, false,
9696
false);
9797
v2::command_list_cache_t cache(context->getZeHandle(), supportedExtensions);
9898

0 commit comments

Comments
 (0)