Skip to content

Commit a3c6a4d

Browse files
committed
[L0 v2] use single command list for all operations
1 parent 8c0cc4c commit a3c6a4d

File tree

6 files changed

+193
-232
lines changed

6 files changed

+193
-232
lines changed

source/adapters/level_zero/v2/command_list_cache.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@
1313

1414
#include "../device.hpp"
1515

16+
typedef struct _zex_intel_queue_copy_operations_offload_hint_exp_desc_t {
17+
ze_structure_type_t stype;
18+
const void *pNext;
19+
ze_bool_t copyOffloadEnabled;
20+
} zex_intel_queue_copy_operations_offload_hint_exp_desc_t;
21+
22+
#define ZEX_INTEL_STRUCTURE_TYPE_QUEUE_COPY_OPERATIONS_OFFLOAD_HINT_EXP_PROPERTIES \
23+
(ze_structure_type_t)0x0003001B
24+
25+
template <>
26+
ze_structure_type_t
27+
getZeStructureType<zex_intel_queue_copy_operations_offload_hint_exp_desc_t>() {
28+
return ZEX_INTEL_STRUCTURE_TYPE_QUEUE_COPY_OPERATIONS_OFFLOAD_HINT_EXP_PROPERTIES;
29+
}
30+
1631
bool v2::immediate_command_list_descriptor_t::operator==(
1732
const immediate_command_list_descriptor_t &rhs) const {
1833
return ZeDevice == rhs.ZeDevice && IsInOrder == rhs.IsInOrder &&
@@ -45,6 +60,10 @@ command_list_cache_t::command_list_cache_t(ze_context_handle_t ZeContext)
4560

4661
raii::ze_command_list_handle_t
4762
command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
63+
ZeStruct<zex_intel_queue_copy_operations_offload_hint_exp_desc_t> offloadDesc;
64+
offloadDesc.copyOffloadEnabled =
65+
std::visit([](auto &&arg) { return arg.CopyOffloadEnabled; }, desc);
66+
4867
if (auto ImmCmdDesc =
4968
std::get_if<immediate_command_list_descriptor_t>(&desc)) {
5069
ze_command_list_handle_t ZeCommandList;
@@ -58,6 +77,7 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
5877
QueueDesc.flags |= ZE_COMMAND_QUEUE_FLAG_EXPLICIT_ONLY;
5978
QueueDesc.index = ImmCmdDesc->Index.value();
6079
}
80+
QueueDesc.pNext = &offloadDesc;
6181
ZE2UR_CALL_THROWS(
6282
zeCommandListCreateImmediate,
6383
(ZeContext, ImmCmdDesc->ZeDevice, &QueueDesc, &ZeCommandList));
@@ -68,6 +88,7 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
6888
CmdListDesc.flags =
6989
RegCmdDesc.IsInOrder ? ZE_COMMAND_LIST_FLAG_IN_ORDER : 0;
7090
CmdListDesc.commandQueueGroupOrdinal = RegCmdDesc.Ordinal;
91+
CmdListDesc.pNext = &offloadDesc;
7192

7293
ze_command_list_handle_t ZeCommandList;
7394
ZE2UR_CALL_THROWS(zeCommandListCreate, (ZeContext, RegCmdDesc.ZeDevice,
@@ -78,13 +99,14 @@ command_list_cache_t::createCommandList(const command_list_descriptor_t &desc) {
7899

79100
raii::command_list_unique_handle command_list_cache_t::getImmediateCommandList(
80101
ze_device_handle_t ZeDevice, bool IsInOrder, uint32_t Ordinal,
81-
ze_command_queue_mode_t Mode, ze_command_queue_priority_t Priority,
82-
std::optional<uint32_t> Index) {
102+
bool CopyOffloadEnable, ze_command_queue_mode_t Mode,
103+
ze_command_queue_priority_t Priority, std::optional<uint32_t> Index) {
83104
TRACK_SCOPE_LATENCY("command_list_cache_t::getImmediateCommandList");
84105

85106
immediate_command_list_descriptor_t Desc;
86107
Desc.ZeDevice = ZeDevice;
87108
Desc.Ordinal = Ordinal;
109+
Desc.CopyOffloadEnabled = CopyOffloadEnable;
88110
Desc.IsInOrder = IsInOrder;
89111
Desc.Mode = Mode;
90112
Desc.Priority = Priority;
@@ -99,13 +121,15 @@ raii::command_list_unique_handle command_list_cache_t::getImmediateCommandList(
99121

100122
raii::command_list_unique_handle
101123
command_list_cache_t::getRegularCommandList(ze_device_handle_t ZeDevice,
102-
bool IsInOrder, uint32_t Ordinal) {
124+
bool IsInOrder, uint32_t Ordinal,
125+
bool CopyOffloadEnable) {
103126
TRACK_SCOPE_LATENCY("command_list_cache_t::getRegularCommandList");
104127

105128
regular_command_list_descriptor_t Desc;
106129
Desc.ZeDevice = ZeDevice;
107130
Desc.IsInOrder = IsInOrder;
108131
Desc.Ordinal = Ordinal;
132+
Desc.CopyOffloadEnabled = CopyOffloadEnable;
109133

110134
auto [CommandList, _] = getCommandList(Desc).release();
111135

source/adapters/level_zero/v2/command_list_cache.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct immediate_command_list_descriptor_t {
3030
ze_device_handle_t ZeDevice;
3131
bool IsInOrder;
3232
uint32_t Ordinal;
33+
bool CopyOffloadEnabled;
3334
ze_command_queue_mode_t Mode;
3435
ze_command_queue_priority_t Priority;
3536
std::optional<uint32_t> Index;
@@ -40,6 +41,7 @@ struct regular_command_list_descriptor_t {
4041
ze_device_handle_t ZeDevice;
4142
bool IsInOrder;
4243
uint32_t Ordinal;
44+
bool CopyOffloadEnabled;
4345
bool operator==(const regular_command_list_descriptor_t &rhs) const;
4446
};
4547

@@ -56,12 +58,13 @@ struct command_list_cache_t {
5658

5759
raii::command_list_unique_handle
5860
getImmediateCommandList(ze_device_handle_t ZeDevice, bool IsInOrder,
59-
uint32_t Ordinal, ze_command_queue_mode_t Mode,
61+
uint32_t Ordinal, bool CopyOffloadEnable,
62+
ze_command_queue_mode_t Mode,
6063
ze_command_queue_priority_t Priority,
6164
std::optional<uint32_t> Index = std::nullopt);
6265
raii::command_list_unique_handle
6366
getRegularCommandList(ze_device_handle_t ZeDevice, bool IsInOrder,
64-
uint32_t Ordinal);
67+
uint32_t Ordinal, bool CopyOffloadEnable);
6568

6669
// For testing purposes
6770
size_t getNumImmediateCommandLists();

source/adapters/level_zero/v2/memory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ static ur_result_t synchronousZeCopy(ur_context_handle_t hContext,
157157
hDevice
158158
->QueueGroup[ur_device_handle_t_::queue_group_info_t::type::Compute]
159159
.ZeOrdinal,
160-
ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS, ZE_COMMAND_QUEUE_PRIORITY_NORMAL,
160+
true, ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS, ZE_COMMAND_QUEUE_PRIORITY_NORMAL,
161161
std::nullopt);
162162

163163
ZE2UR_CALL(zeCommandListAppendMemoryCopy,

0 commit comments

Comments
 (0)