Skip to content

Commit 4ec687d

Browse files
author
Jaime Arteaga
committed
[SYCL][UR][L0] Add UR_L0 environment variables
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 ea1d240 commit 4ec687d

File tree

4 files changed

+369
-287
lines changed

4 files changed

+369
-287
lines changed

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

Lines changed: 0 additions & 202 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");

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

Lines changed: 0 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -22,91 +22,6 @@
2222

2323
#include "ur_level_zero_common.hpp"
2424

25-
// Returns the ze_structure_type_t to use in .stype of a structured descriptor.
26-
// Intentionally not defined; will give an error if no proper specialization
27-
template <class T> ze_structure_type_t getZeStructureType();
28-
template <class T> zes_structure_type_t getZesStructureType();
29-
30-
// The helpers to properly default initialize Level-Zero descriptor and
31-
// properties structures.
32-
template <class T> struct ZeStruct : public T {
33-
ZeStruct() : T{} { // zero initializes base struct
34-
this->stype = getZeStructureType<T>();
35-
this->pNext = nullptr;
36-
}
37-
};
38-
39-
template <class T> struct ZesStruct : public T {
40-
ZesStruct() : T{} { // zero initializes base struct
41-
this->stype = getZesStructureType<T>();
42-
this->pNext = nullptr;
43-
}
44-
};
45-
46-
// Controls Level Zero calls serialization to w/a Level Zero driver being not MT
47-
// ready. Recognized values (can be used as a bit mask):
48-
enum {
49-
ZeSerializeNone =
50-
0, // no locking or blocking (except when SYCL RT requested blocking)
51-
ZeSerializeLock = 1, // locking around each ZE_CALL
52-
ZeSerializeBlock =
53-
2, // blocking ZE calls, where supported (usually in enqueue commands)
54-
};
55-
static const uint32_t ZeSerialize = [] {
56-
const char *SerializeMode = std::getenv("ZE_SERIALIZE");
57-
const uint32_t SerializeModeValue =
58-
SerializeMode ? std::atoi(SerializeMode) : 0;
59-
return SerializeModeValue;
60-
}();
61-
62-
// This class encapsulates actions taken along with a call to Level Zero API.
63-
class ZeCall {
64-
private:
65-
// The global mutex that is used for total serialization of Level Zero calls.
66-
static std::mutex GlobalLock;
67-
68-
public:
69-
ZeCall() {
70-
if ((ZeSerialize & ZeSerializeLock) != 0) {
71-
GlobalLock.lock();
72-
}
73-
}
74-
~ZeCall() {
75-
if ((ZeSerialize & ZeSerializeLock) != 0) {
76-
GlobalLock.unlock();
77-
}
78-
}
79-
80-
// The non-static version just calls static one.
81-
ze_result_t doCall(ze_result_t ZeResult, const char *ZeName,
82-
const char *ZeArgs, bool TraceError = true);
83-
};
84-
85-
// Controls Level Zero calls tracing.
86-
enum DebugLevel {
87-
ZE_DEBUG_NONE = 0x0,
88-
ZE_DEBUG_BASIC = 0x1,
89-
ZE_DEBUG_VALIDATION = 0x2,
90-
ZE_DEBUG_CALL_COUNT = 0x4,
91-
ZE_DEBUG_ALL = -1
92-
};
93-
94-
const int ZeDebug = [] {
95-
const char *DebugMode = std::getenv("ZE_DEBUG");
96-
return DebugMode ? std::atoi(DebugMode) : ZE_DEBUG_NONE;
97-
}();
98-
99-
// Prints to stderr if ZE_DEBUG allows it
100-
void zePrint(const char *Format, ...);
101-
102-
// This function will ensure compatibility with both Linux and Windows for
103-
// setting environment variables.
104-
bool setEnvVar(const char *name, const char *value);
105-
106-
// Perform traced call to L0 without checking for errors
107-
#define ZE_CALL_NOCHECK(ZeName, ZeArgs) \
108-
ZeCall().doCall(ZeName ZeArgs, #ZeName, #ZeArgs, false)
109-
11025
struct _ur_platform_handle_t;
11126
// using ur_platform_handle_t = _ur_platform_handle_t *;
11227
struct _ur_device_handle_t;

0 commit comments

Comments
 (0)