Skip to content

Commit 2b19458

Browse files
author
Jaime Arteaga
authored
[SYCL][UR][L0] Add UR_L0 environment variables (#8732)
Define UR_LO_DEBUG and UR_L0_SERIALIZE, and keep their ZE_ counterparts for now. And do some reorganization --------- Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
1 parent 62e7419 commit 2b19458

File tree

7 files changed

+563
-371
lines changed

7 files changed

+563
-371
lines changed

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 66 additions & 66 deletions
Large diffs are not rendered by default.

sycl/plugins/unified_runtime/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ if (NOT DEFINED UNIFIED_RUNTIME_LIBRARY OR NOT DEFINED UNIFIED_RUNTIME_INCLUDE_D
44
include(FetchContent)
55

66
set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git")
7-
set(UNIFIED_RUNTIME_TAG 6fb8e2620f1474428a539ef46d6dd47043c7d59b)
7+
set(UNIFIED_RUNTIME_TAG d6af758779db6eebdc419fd5e249302f566eb5de)
88

99
message(STATUS "Will fetch Unified Runtime from ${UNIFIED_RUNTIME_REPO}")
1010
FetchContent_Declare(unified-runtime

sycl/plugins/unified_runtime/pi2ur.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ static pi_result ur2piResult(ur_result_t urResult) {
2929
{UR_RESULT_ERROR_INVALID_FUNCTION_NAME, PI_ERROR_BUILD_PROGRAM_FAILURE},
3030
{UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE,
3131
PI_ERROR_INVALID_WORK_GROUP_SIZE},
32-
{UR_RESULT_ERROR_MODULE_BUILD_FAILURE, PI_ERROR_BUILD_PROGRAM_FAILURE},
32+
{UR_RESULT_ERROR_PROGRAM_BUILD_FAILURE, PI_ERROR_BUILD_PROGRAM_FAILURE},
3333
{UR_RESULT_ERROR_OUT_OF_DEVICE_MEMORY, PI_ERROR_OUT_OF_RESOURCES},
3434
{UR_RESULT_ERROR_OUT_OF_HOST_MEMORY, PI_ERROR_OUT_OF_HOST_MEMORY}};
3535

sycl/plugins/unified_runtime/ur/adapters/level_zero/ur_level_zero.cpp

Lines changed: 15 additions & 217 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,6 @@ std::mutex ZeCall::GlobalLock;
1818

1919
ZeUSMImportExtension ZeUSMImport;
2020

21-
void zePrint(const char *Format, ...) {
22-
if (ZeDebug & ZE_DEBUG_BASIC) {
23-
va_list Args;
24-
va_start(Args, Format);
25-
vfprintf(stderr, Format, Args);
26-
va_end(Args);
27-
}
28-
}
29-
30-
// This function will ensure compatibility with both Linux and Windows for
31-
// setting environment variables.
32-
bool setEnvVar(const char *name, const char *value) {
33-
#ifdef _WIN32
34-
int Res = _putenv_s(name, value);
35-
#else
36-
int Res = setenv(name, value, 1);
37-
#endif
38-
if (Res != 0) {
39-
zePrint(
40-
"Level Zero plugin was unable to set the environment variable: %s\n",
41-
name);
42-
return false;
43-
}
44-
return true;
45-
}
46-
4721
// Trace a call to Level-Zero RT
4822
#define ZE_CALL(ZeName, ZeArgs) \
4923
{ \
@@ -52,182 +26,6 @@ bool setEnvVar(const char *name, const char *value) {
5226
return ze2urResult(Result); \
5327
}
5428

55-
// This will count the calls to Level-Zero
56-
std::map<const char *, int> *ZeCallCount = nullptr;
57-
58-
inline void zeParseError(ze_result_t ZeError, const char *&ErrorString) {
59-
switch (ZeError) {
60-
#define ZE_ERRCASE(ERR) \
61-
case ERR: \
62-
ErrorString = "" #ERR; \
63-
break;
64-
65-
ZE_ERRCASE(ZE_RESULT_SUCCESS)
66-
ZE_ERRCASE(ZE_RESULT_NOT_READY)
67-
ZE_ERRCASE(ZE_RESULT_ERROR_DEVICE_LOST)
68-
ZE_ERRCASE(ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY)
69-
ZE_ERRCASE(ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY)
70-
ZE_ERRCASE(ZE_RESULT_ERROR_MODULE_BUILD_FAILURE)
71-
ZE_ERRCASE(ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS)
72-
ZE_ERRCASE(ZE_RESULT_ERROR_NOT_AVAILABLE)
73-
ZE_ERRCASE(ZE_RESULT_ERROR_UNINITIALIZED)
74-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_VERSION)
75-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE)
76-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_ARGUMENT)
77-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_NULL_HANDLE)
78-
ZE_ERRCASE(ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE)
79-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_NULL_POINTER)
80-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_SIZE)
81-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_SIZE)
82-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_ALIGNMENT)
83-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_SYNCHRONIZATION_OBJECT)
84-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_ENUMERATION)
85-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_ENUMERATION)
86-
ZE_ERRCASE(ZE_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT)
87-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_NATIVE_BINARY)
88-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_GLOBAL_NAME)
89-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_KERNEL_NAME)
90-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_FUNCTION_NAME)
91-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION)
92-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_GLOBAL_WIDTH_DIMENSION)
93-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_INDEX)
94-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_SIZE)
95-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_KERNEL_ATTRIBUTE_VALUE)
96-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_COMMAND_LIST_TYPE)
97-
ZE_ERRCASE(ZE_RESULT_ERROR_OVERLAPPING_REGIONS)
98-
ZE_ERRCASE(ZE_RESULT_ERROR_INVALID_MODULE_UNLINKED)
99-
ZE_ERRCASE(ZE_RESULT_ERROR_UNKNOWN)
100-
101-
#undef ZE_ERRCASE
102-
default:
103-
assert(false && "Unexpected Error code");
104-
} // switch
105-
}
106-
107-
ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName,
108-
const char *ZeArgs, bool TraceError) {
109-
zePrint("ZE ---> %s%s\n", ZeName, ZeArgs);
110-
111-
if (ZeDebug & ZE_DEBUG_CALL_COUNT) {
112-
++(*ZeCallCount)[ZeName];
113-
}
114-
115-
if (ZeResult && TraceError) {
116-
const char *ErrorString = "Unknown";
117-
zeParseError(ZeResult, ErrorString);
118-
zePrint("Error (%s) in %s\n", ErrorString, ZeName);
119-
}
120-
return ZeResult;
121-
}
122-
123-
// Specializations for various L0 structures
124-
template <> ze_structure_type_t getZeStructureType<ze_event_pool_desc_t>() {
125-
return ZE_STRUCTURE_TYPE_EVENT_POOL_DESC;
126-
}
127-
template <> ze_structure_type_t getZeStructureType<ze_fence_desc_t>() {
128-
return ZE_STRUCTURE_TYPE_FENCE_DESC;
129-
}
130-
template <> ze_structure_type_t getZeStructureType<ze_command_list_desc_t>() {
131-
return ZE_STRUCTURE_TYPE_COMMAND_LIST_DESC;
132-
}
133-
template <> ze_structure_type_t getZeStructureType<ze_context_desc_t>() {
134-
return ZE_STRUCTURE_TYPE_CONTEXT_DESC;
135-
}
136-
template <>
137-
ze_structure_type_t
138-
getZeStructureType<ze_relaxed_allocation_limits_exp_desc_t>() {
139-
return ZE_STRUCTURE_TYPE_RELAXED_ALLOCATION_LIMITS_EXP_DESC;
140-
}
141-
template <> ze_structure_type_t getZeStructureType<ze_host_mem_alloc_desc_t>() {
142-
return ZE_STRUCTURE_TYPE_HOST_MEM_ALLOC_DESC;
143-
}
144-
template <>
145-
ze_structure_type_t getZeStructureType<ze_device_mem_alloc_desc_t>() {
146-
return ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC;
147-
}
148-
template <> ze_structure_type_t getZeStructureType<ze_command_queue_desc_t>() {
149-
return ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC;
150-
}
151-
template <> ze_structure_type_t getZeStructureType<ze_image_desc_t>() {
152-
return ZE_STRUCTURE_TYPE_IMAGE_DESC;
153-
}
154-
template <> ze_structure_type_t getZeStructureType<ze_module_desc_t>() {
155-
return ZE_STRUCTURE_TYPE_MODULE_DESC;
156-
}
157-
template <>
158-
ze_structure_type_t getZeStructureType<ze_module_program_exp_desc_t>() {
159-
return ZE_STRUCTURE_TYPE_MODULE_PROGRAM_EXP_DESC;
160-
}
161-
template <> ze_structure_type_t getZeStructureType<ze_kernel_desc_t>() {
162-
return ZE_STRUCTURE_TYPE_KERNEL_DESC;
163-
}
164-
template <> ze_structure_type_t getZeStructureType<ze_event_desc_t>() {
165-
return ZE_STRUCTURE_TYPE_EVENT_DESC;
166-
}
167-
template <> ze_structure_type_t getZeStructureType<ze_sampler_desc_t>() {
168-
return ZE_STRUCTURE_TYPE_SAMPLER_DESC;
169-
}
170-
template <> ze_structure_type_t getZeStructureType<ze_driver_properties_t>() {
171-
return ZE_STRUCTURE_TYPE_DRIVER_PROPERTIES;
172-
}
173-
template <> ze_structure_type_t getZeStructureType<ze_device_properties_t>() {
174-
return ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES;
175-
}
176-
template <>
177-
ze_structure_type_t getZeStructureType<ze_device_compute_properties_t>() {
178-
return ZE_STRUCTURE_TYPE_DEVICE_COMPUTE_PROPERTIES;
179-
}
180-
template <>
181-
ze_structure_type_t getZeStructureType<ze_command_queue_group_properties_t>() {
182-
return ZE_STRUCTURE_TYPE_COMMAND_QUEUE_GROUP_PROPERTIES;
183-
}
184-
template <>
185-
ze_structure_type_t getZeStructureType<ze_device_image_properties_t>() {
186-
return ZE_STRUCTURE_TYPE_DEVICE_IMAGE_PROPERTIES;
187-
}
188-
template <>
189-
ze_structure_type_t getZeStructureType<ze_device_module_properties_t>() {
190-
return ZE_STRUCTURE_TYPE_DEVICE_MODULE_PROPERTIES;
191-
}
192-
template <>
193-
ze_structure_type_t getZeStructureType<ze_device_cache_properties_t>() {
194-
return ZE_STRUCTURE_TYPE_DEVICE_CACHE_PROPERTIES;
195-
}
196-
template <>
197-
ze_structure_type_t getZeStructureType<ze_device_memory_properties_t>() {
198-
return ZE_STRUCTURE_TYPE_DEVICE_MEMORY_PROPERTIES;
199-
}
200-
template <>
201-
ze_structure_type_t getZeStructureType<ze_device_memory_ext_properties_t>() {
202-
return ZE_STRUCTURE_TYPE_DEVICE_MEMORY_EXT_PROPERTIES;
203-
}
204-
template <>
205-
ze_structure_type_t getZeStructureType<ze_device_memory_access_properties_t>() {
206-
return ZE_STRUCTURE_TYPE_DEVICE_MEMORY_ACCESS_PROPERTIES;
207-
}
208-
template <> ze_structure_type_t getZeStructureType<ze_module_properties_t>() {
209-
return ZE_STRUCTURE_TYPE_MODULE_PROPERTIES;
210-
}
211-
template <> ze_structure_type_t getZeStructureType<ze_kernel_properties_t>() {
212-
return ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES;
213-
}
214-
template <>
215-
ze_structure_type_t getZeStructureType<ze_memory_allocation_properties_t>() {
216-
return ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES;
217-
}
218-
219-
template <> zes_structure_type_t getZesStructureType<zes_pci_properties_t>() {
220-
return ZES_STRUCTURE_TYPE_PCI_PROPERTIES;
221-
}
222-
223-
template <> zes_structure_type_t getZesStructureType<zes_mem_state_t>() {
224-
return ZES_STRUCTURE_TYPE_MEM_STATE;
225-
}
226-
227-
template <> zes_structure_type_t getZesStructureType<zes_mem_properties_t>() {
228-
return ZES_STRUCTURE_TYPE_MEM_PROPERTIES;
229-
}
230-
23129
static const bool ExposeCSliceInAffinityPartitioning = [] {
23230
const char *Flag =
23331
std::getenv("SYCL_PI_LEVEL_ZERO_EXPOSE_CSLICE_IN_AFFINITY_PARTITIONING");
@@ -303,7 +101,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urPlatformGet(
303101
static std::once_flag ZeCallCountInitialized;
304102
try {
305103
std::call_once(ZeCallCountInitialized, []() {
306-
if (ZeDebug & ZE_DEBUG_CALL_COUNT) {
104+
if (UrL0Debug & UR_L0_DEBUG_CALL_COUNT) {
307105
ZeCallCount = new std::map<const char *, int>;
308106
}
309107
});
@@ -315,7 +113,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urPlatformGet(
315113

316114
// Setting these environment variables before running zeInit will enable the
317115
// validation layer in the Level Zero loader.
318-
if (ZeDebug & ZE_DEBUG_VALIDATION) {
116+
if (UrL0Debug & UR_L0_DEBUG_VALIDATION) {
319117
setEnvVar("ZE_ENABLE_VALIDATION_LAYER", "1");
320118
setEnvVar("ZE_ENABLE_PARAMETER_VALIDATION", "1");
321119
}
@@ -343,7 +141,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urPlatformGet(
343141
}
344142

345143
if (ZeResult != ZE_RESULT_SUCCESS) {
346-
zePrint("zeInit: Level Zero initialization failure\n");
144+
urPrint("zeInit: Level Zero initialization failure\n");
347145
return ze2urResult(ZeResult);
348146
}
349147

@@ -450,7 +248,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urPlatformGetInfo(
450248
//
451249
return ReturnValue(Platform->ZeDriverApiVersion.c_str());
452250
default:
453-
zePrint("piPlatformGetInfo: unrecognized ParamName\n");
251+
urPrint("piPlatformGetInfo: unrecognized ParamName\n");
454252
return UR_RESULT_ERROR_INVALID_VALUE;
455253
}
456254

@@ -511,7 +309,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGet(
511309
break;
512310
default:
513311
Matched = false;
514-
zePrint("Unknown device type");
312+
urPrint("Unknown device type");
515313
break;
516314
}
517315
if (Matched)
@@ -561,7 +359,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
561359
case ZE_DEVICE_TYPE_FPGA:
562360
return ReturnValue(UR_DEVICE_TYPE_FPGA);
563361
default:
564-
zePrint("This device type is not supported\n");
362+
urPrint("This device type is not supported\n");
565363
return UR_RESULT_ERROR_INVALID_VALUE;
566364
}
567365
}
@@ -1058,7 +856,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
1058856
return ReturnValue(uint32_t{Device->ZeDeviceProperties->deviceId});
1059857
case UR_DEVICE_INFO_PCI_ADDRESS: {
1060858
if (getenv("ZES_ENABLE_SYSMAN") == nullptr) {
1061-
zePrint("Set SYCL_ENABLE_PCI=1 to obtain PCI data.\n");
859+
urPrint("Set SYCL_ENABLE_PCI=1 to obtain PCI data.\n");
1062860
return UR_RESULT_ERROR_INVALID_VALUE;
1063861
}
1064862
ZesStruct<zes_pci_properties_t> ZeDevicePciProperties;
@@ -1222,8 +1020,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(
12221020

12231021
// TODO: Implement.
12241022
default:
1225-
zePrint("Unsupported ParamName in piGetDeviceInfo\n");
1226-
zePrint("ParamName=%d(0x%x)\n", ParamName, ParamName);
1023+
urPrint("Unsupported ParamName in piGetDeviceInfo\n");
1024+
urPrint("ParamName=%d(0x%x)\n", ParamName, ParamName);
12271025
return UR_RESULT_ERROR_INVALID_VALUE;
12281026
}
12291027

@@ -1263,7 +1061,7 @@ getRangeOfAllowedCopyEngines(const ur_device_handle_t &Device) {
12631061
int UpperCopyEngineIndex = std::stoi(CopyEngineRange.substr(pos + 1));
12641062
if ((LowerCopyEngineIndex > UpperCopyEngineIndex) ||
12651063
(LowerCopyEngineIndex < -1) || (UpperCopyEngineIndex < -1)) {
1266-
zePrint("SYCL_PI_LEVEL_ZERO_USE_COPY_ENGINE: invalid value provided, "
1064+
urPrint("SYCL_PI_LEVEL_ZERO_USE_COPY_ENGINE: invalid value provided, "
12671065
"default set.\n");
12681066
LowerCopyEngineIndex = 0;
12691067
UpperCopyEngineIndex = INT_MAX;
@@ -1340,7 +1138,7 @@ ur_result_t _ur_device_handle_t::initialize(int SubSubDeviceOrdinal,
13401138
if (numQueueGroups == 0) {
13411139
return UR_RESULT_ERROR_UNKNOWN;
13421140
}
1343-
zePrint("NOTE: Number of queue groups = %d\n", numQueueGroups);
1141+
urPrint("NOTE: Number of queue groups = %d\n", numQueueGroups);
13441142
std::vector<ZeStruct<ze_command_queue_group_properties_t>>
13451143
QueueGroupProperties(numQueueGroups);
13461144
ZE_CALL(zeDeviceGetCommandQueueGroupProperties,
@@ -1393,14 +1191,14 @@ ur_result_t _ur_device_handle_t::initialize(int SubSubDeviceOrdinal,
13931191
}
13941192
}
13951193
if (QueueGroup[queue_group_info_t::MainCopy].ZeOrdinal < 0)
1396-
zePrint("NOTE: main blitter/copy engine is not available\n");
1194+
urPrint("NOTE: main blitter/copy engine is not available\n");
13971195
else
1398-
zePrint("NOTE: main blitter/copy engine is available\n");
1196+
urPrint("NOTE: main blitter/copy engine is available\n");
13991197

14001198
if (QueueGroup[queue_group_info_t::LinkCopy].ZeOrdinal < 0)
1401-
zePrint("NOTE: link blitter/copy engines are not available\n");
1199+
urPrint("NOTE: link blitter/copy engines are not available\n");
14021200
else
1403-
zePrint("NOTE: link blitter/copy engines are available\n");
1201+
urPrint("NOTE: link blitter/copy engines are available\n");
14041202
}
14051203
}
14061204

0 commit comments

Comments
 (0)