Skip to content

Commit ce78e15

Browse files
authored
Merge pull request #1032 from lplewa/l0-log
Refactor Level Zero Adapter to use new logger
2 parents 717791b + 5dccce5 commit ce78e15

18 files changed

+322
-240
lines changed

source/adapters/level_zero/adapter.cpp

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ ur_adapter_handle_t_ *GlobalAdapter = new ur_adapter_handle_t_();
1919
ur_adapter_handle_t_ *GlobalAdapter;
2020
#endif
2121

22+
class ur_legacy_sink : public logger::Sink {
23+
public:
24+
ur_legacy_sink(std::string logger_name = "", bool skip_prefix = true)
25+
: Sink(std::move(logger_name), skip_prefix) {
26+
this->ostream = &std::cerr;
27+
}
28+
29+
virtual void print([[maybe_unused]] logger::Level level,
30+
const std::string &msg) override {
31+
fprintf(stderr, "%s", msg.c_str());
32+
}
33+
34+
~ur_legacy_sink() = default;
35+
};
36+
2237
ur_result_t initPlatforms(PlatformVec &platforms) noexcept try {
2338
uint32_t ZeDriverCount = 0;
2439
ZE2UR_CALL(zeDriverGet, (&ZeDriverCount, nullptr));
@@ -44,7 +59,18 @@ ur_result_t initPlatforms(PlatformVec &platforms) noexcept try {
4459

4560
ur_result_t adapterStateInit() { return UR_RESULT_SUCCESS; }
4661

47-
ur_adapter_handle_t_::ur_adapter_handle_t_() {
62+
ur_adapter_handle_t_::ur_adapter_handle_t_()
63+
: logger(logger::get_logger("level_zero")) {
64+
65+
if (UrL0Debug & UR_L0_DEBUG_BASIC) {
66+
logger.setLegacySink(std::make_unique<ur_legacy_sink>());
67+
};
68+
69+
if (UrL0Debug & UR_L0_DEBUG_VALIDATION) {
70+
setEnvVar("ZE_ENABLE_VALIDATION_LAYER", "1");
71+
setEnvVar("ZE_ENABLE_PARAMETER_VALIDATION", "1");
72+
}
73+
4874
PlatformCache.Compute = [](Result<PlatformVec> &result) {
4975
static std::once_flag ZeCallCountInitialized;
5076
try {
@@ -68,7 +94,7 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() {
6894
}
6995

7096
if (getenv("SYCL_ENABLE_PCI") != nullptr) {
71-
urPrint(
97+
logger::warning(
7298
"WARNING: SYCL_ENABLE_PCI is deprecated and no longer needed.\n");
7399
}
74100

@@ -91,8 +117,9 @@ ur_adapter_handle_t_::ur_adapter_handle_t_() {
91117
return;
92118
}
93119
if (*GlobalAdapter->ZeResult != ZE_RESULT_SUCCESS) {
94-
urPrint("zeInit: Level Zero initialization failure\n");
120+
logger::error("zeInit: Level Zero initialization failure\n");
95121
result = ze2urResult(*GlobalAdapter->ZeResult);
122+
96123
return;
97124
}
98125

@@ -157,10 +184,10 @@ ur_result_t adapterStateTeardown() {
157184
// zeMemAllocShared = 0 \---> zeMemFree = 1
158185
//
159186
// clang-format on
160-
161-
fprintf(stderr, "Check balance of create/destroy calls\n");
162-
fprintf(stderr,
163-
"----------------------------------------------------------\n");
187+
// TODO: use logger to print this messages
188+
std::cerr << "Check balance of create/destroy calls\n";
189+
std::cerr << "----------------------------------------------------------\n";
190+
std::stringstream ss;
164191
for (const auto &Row : CreateDestroySet) {
165192
int diff = 0;
166193
for (auto I = Row.begin(); I != Row.end();) {
@@ -171,23 +198,30 @@ ur_result_t adapterStateTeardown() {
171198
bool Last = (++I == Row.end());
172199

173200
if (Last) {
174-
fprintf(stderr, " \\--->");
201+
ss << " \\--->";
175202
diff -= ZeCount;
176203
} else {
177204
diff += ZeCount;
178205
if (!First) {
179-
fprintf(stderr, " | \n");
206+
ss << " | ";
207+
std::cerr << ss.str() << "\n";
208+
ss.str("");
209+
ss.clear();
180210
}
181211
}
182-
183-
fprintf(stderr, "%30s = %-5d", ZeName, ZeCount);
212+
ss << std::setw(30) << std::right << ZeName;
213+
ss << " = ";
214+
ss << std::setw(5) << std::left << ZeCount;
184215
}
185216

186217
if (diff) {
187218
LeakFound = true;
188-
fprintf(stderr, " ---> LEAK = %d", diff);
219+
ss << " ---> LEAK = " << diff;
189220
}
190-
fprintf(stderr, "\n");
221+
222+
std::cerr << ss.str() << '\n';
223+
ss.str("");
224+
ss.clear();
191225
}
192226

193227
ZeCallCount->clear();

source/adapters/level_zero/adapter.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//
99
//===----------------------------------------------------------------------===//
1010

11+
#include "logger/ur_logger.hpp"
1112
#include <atomic>
1213
#include <mutex>
1314
#include <optional>
@@ -16,13 +17,16 @@
1617

1718
using PlatformVec = std::vector<std::unique_ptr<ur_platform_handle_t_>>;
1819

20+
class ur_legacy_sink;
21+
1922
struct ur_adapter_handle_t_ {
2023
ur_adapter_handle_t_();
2124
std::atomic<uint32_t> RefCount = 0;
2225
std::mutex Mutex;
2326

2427
std::optional<ze_result_t> ZeResult;
2528
ZeCache<Result<PlatformVec>> PlatformCache;
29+
logger::Logger &logger;
2630
};
2731

2832
extern ur_adapter_handle_t_ *GlobalAdapter;

source/adapters/level_zero/command_buffer.cpp

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//
99
//===----------------------------------------------------------------------===//
1010
#include "command_buffer.hpp"
11+
#include "logger/ur_logger.hpp"
1112
#include "ur_level_zero.hpp"
1213

1314
/* L0 Command-buffer Extension Doc see:
@@ -140,16 +141,16 @@ ur_result_t calculateKernelWorkDimensions(
140141
while (GlobalWorkSize3D[I] % GroupSize[I]) {
141142
--GroupSize[I];
142143
}
143-
if (GlobalWorkSize3D[I] / GroupSize[I] > UINT32_MAX) {
144-
urPrint("calculateKernelWorkDimensions: can't find a WG size "
145-
"suitable for global work size > UINT32_MAX\n");
144+
if (GlobalWorkSize[I] / GroupSize[I] > UINT32_MAX) {
145+
logger::debug("calculateKernelWorkDimensions: can't find a WG size "
146+
"suitable for global work size > UINT32_MAX");
146147
return UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE;
147148
}
148149
WG[I] = GroupSize[I];
149150
}
150-
urPrint("calculateKernelWorkDimensions: using computed WG size = {%d, "
151-
"%d, %d}\n",
152-
WG[0], WG[1], WG[2]);
151+
logger::debug("calculateKernelWorkDimensions: using computed WG "
152+
"size = {{{}, {}, {}}}",
153+
WG[0], WG[1], WG[2]);
153154
}
154155
}
155156

@@ -177,30 +178,27 @@ ur_result_t calculateKernelWorkDimensions(
177178
break;
178179

179180
default:
180-
urPrint("calculateKernelWorkDimensions: unsupported work_dim\n");
181+
logger::error("calculateKernelWorkDimensions: unsupported work_dim");
181182
return UR_RESULT_ERROR_INVALID_VALUE;
182183
}
183184

184185
// Error handling for non-uniform group size case
185186
if (GlobalWorkSize3D[0] !=
186187
size_t(ZeThreadGroupDimensions.groupCountX) * WG[0]) {
187-
urPrint("calculateKernelWorkDimensions: invalid work_dim. The range "
188-
"is not a "
189-
"multiple of the group size in the 1st dimension\n");
188+
logger::error("calculateKernelWorkDimensions: invalid work_dim. The range "
189+
"is not a multiple of the group size in the 1st dimension");
190190
return UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE;
191191
}
192192
if (GlobalWorkSize3D[1] !=
193193
size_t(ZeThreadGroupDimensions.groupCountY) * WG[1]) {
194-
urPrint("calculateKernelWorkDimensions: invalid work_dim. The range "
195-
"is not a "
196-
"multiple of the group size in the 2nd dimension\n");
194+
logger::error("calculateKernelWorkDimensions: invalid work_dim. The range "
195+
"is not a multiple of the group size in the 2nd dimension");
197196
return UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE;
198197
}
199198
if (GlobalWorkSize3D[2] !=
200199
size_t(ZeThreadGroupDimensions.groupCountZ) * WG[2]) {
201-
urPrint("calculateKernelWorkDimensions: invalid work_dim. The range "
202-
"is not a "
203-
"multiple of the group size in the 3rd dimension\n");
200+
logger::error("calculateKernelWorkDimensions: invalid work_dim. The range "
201+
"is not a multiple of the group size in the 3rd dimension");
204202
return UR_RESULT_ERROR_INVALID_WORK_GROUP_SIZE;
205203
}
206204

@@ -268,9 +266,9 @@ static ur_result_t enqueueCommandBufferMemCopyHelper(
268266
(CommandBuffer->ZeCommandList, Dst, Src, Size,
269267
LaunchEvent->ZeEvent, ZeEventList.size(), ZeEventList.data()));
270268

271-
urPrint("calling zeCommandListAppendMemoryCopy() with"
272-
" ZeEvent %#" PRIxPTR "\n",
273-
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
269+
logger::debug("calling zeCommandListAppendMemoryCopy() with"
270+
" ZeEvent {}",
271+
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
274272

275273
return UR_RESULT_SUCCESS;
276274
}
@@ -335,9 +333,9 @@ static ur_result_t enqueueCommandBufferMemCopyRectHelper(
335333
DstSlicePitch, Src, &ZeSrcRegion, SrcPitch, SrcSlicePitch,
336334
LaunchEvent->ZeEvent, ZeEventList.size(), ZeEventList.data()));
337335

338-
urPrint("calling zeCommandListAppendMemoryCopyRegion() with"
339-
" ZeEvent %#" PRIxPTR "\n",
340-
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
336+
logger::debug("calling zeCommandListAppendMemoryCopyRegion() with"
337+
" ZeEvent {}",
338+
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
341339

342340
return UR_RESULT_SUCCESS;
343341
}
@@ -378,9 +376,9 @@ static ur_result_t enqueueCommandBufferFillHelper(
378376
(CommandBuffer->ZeCommandList, Ptr, Pattern, PatternSize, Size,
379377
LaunchEvent->ZeEvent, ZeEventList.size(), ZeEventList.data()));
380378

381-
urPrint("calling zeCommandListAppendMemoryFill() with"
382-
" ZeEvent %#lx\n",
383-
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
379+
logger::debug("calling zeCommandListAppendMemoryFill() with"
380+
" ZeEvent {}",
381+
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
384382

385383
return UR_RESULT_SUCCESS;
386384
}
@@ -519,7 +517,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
519517
if (GlobalWorkOffset != NULL) {
520518
if (!CommandBuffer->Context->getPlatform()
521519
->ZeDriverGlobalOffsetExtensionFound) {
522-
urPrint("No global offset extension found on this driver\n");
520+
logger::debug("No global offset extension found on this driver");
523521
return UR_RESULT_ERROR_INVALID_VALUE;
524522
}
525523

@@ -606,9 +604,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
606604
&ZeThreadGroupDimensions, LaunchEvent->ZeEvent,
607605
ZeEventList.size(), ZeEventList.data()));
608606

609-
urPrint("calling zeCommandListAppendLaunchKernel() with"
610-
" ZeEvent %#" PRIxPTR "\n",
611-
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
607+
logger::debug("calling zeCommandListAppendLaunchKernel() with"
608+
" ZeEvent {}",
609+
ur_cast<std::uintptr_t>(LaunchEvent->ZeEvent));
612610

613611
return UR_RESULT_SUCCESS;
614612
}
@@ -1068,7 +1066,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferUpdateKernelLaunchExp(
10681066
if (NewGlobalWorkOffset && Dim > 0) {
10691067
if (!CommandBuffer->Context->getPlatform()
10701068
->ZeDriverGlobalOffsetExtensionFound) {
1071-
urPrint("No global offset extension found on this driver\n");
1069+
logger::error("No global offset extension found on this driver");
10721070
return UR_RESULT_ERROR_INVALID_VALUE;
10731071
}
10741072
auto MutableGroupOffestDesc =
@@ -1277,8 +1275,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferUpdateKernelLaunchExp(
12771275
// Zero.
12781276
continue;
12791277
} else {
1280-
urPrint("urCommandBufferUpdateKernelLaunchExp: unsupported name of "
1281-
"execution attribute.\n");
1278+
logger::error("urCommandBufferUpdateKernelLaunchExp: unsupported name of "
1279+
"execution attribute.");
12821280
return UR_RESULT_ERROR_INVALID_VALUE;
12831281
}
12841282
}

source/adapters/level_zero/common.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//===----------------------------------------------------------------------===//
1010

1111
#include "common.hpp"
12+
#include "logger/ur_logger.hpp"
1213
#include "usm.hpp"
1314

1415
ur_result_t ze2urResult(ze_result_t ZeResult) {
@@ -65,15 +66,6 @@ ur_result_t ze2urResult(ze_result_t ZeResult) {
6566
}
6667
}
6768

68-
void urPrint(const char *Format, ...) {
69-
if (UrL0Debug & UR_L0_DEBUG_BASIC) {
70-
va_list Args;
71-
va_start(Args, Format);
72-
vfprintf(stderr, Format, Args);
73-
va_end(Args);
74-
}
75-
}
76-
7769
usm::DisjointPoolAllConfigs DisjointPoolConfigInstance =
7870
InitializeDisjointPoolConfig();
7971

@@ -86,8 +78,8 @@ bool setEnvVar(const char *name, const char *value) {
8678
int Res = setenv(name, value, 1);
8779
#endif
8880
if (Res != 0) {
89-
urPrint("UR L0 Adapter was unable to set the environment variable: %s\n",
90-
name);
81+
logger::debug(
82+
"UR L0 Adapter was unable to set the environment variable: {}", name);
9183
return false;
9284
}
9385
return true;
@@ -149,7 +141,7 @@ inline void zeParseError(ze_result_t ZeError, const char *&ErrorString) {
149141

150142
ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName,
151143
const char *ZeArgs, bool TraceError) {
152-
urPrint("ZE ---> %s%s\n", ZeName, ZeArgs);
144+
logger::debug("ZE ---> {}{}", ZeName, ZeArgs);
153145

154146
if (UrL0LeaksDebug) {
155147
++(*ZeCallCount)[ZeName];
@@ -158,7 +150,7 @@ ze_result_t ZeCall::doCall(ze_result_t ZeResult, const char *ZeName,
158150
if (ZeResult && TraceError) {
159151
const char *ErrorString = "Unknown";
160152
zeParseError(ZeResult, ErrorString);
161-
urPrint("Error (%s) in %s\n", ErrorString, ZeName);
153+
logger::error("Error ({}) in {}", ErrorString, ZeName);
162154
}
163155
return ZeResult;
164156
}

source/adapters/level_zero/common.hpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,10 @@ static auto getUrResultString = [](ur_result_t Result) {
174174
#define UR_CALL(Call) \
175175
{ \
176176
if (PrintTrace) \
177-
fprintf(stderr, "UR ---> %s\n", #Call); \
177+
logger::always("UR ---> {}", #Call); \
178178
ur_result_t Result = (Call); \
179179
if (PrintTrace) \
180-
fprintf(stderr, "UR <--- %s(%s)\n", #Call, getUrResultString(Result)); \
180+
logger::always("UR <--- {}({})", #Call, getUrResultString(Result)); \
181181
if (Result != UR_RESULT_SUCCESS) \
182182
return Result; \
183183
}
@@ -268,9 +268,6 @@ class ZeCall {
268268
// setting environment variables.
269269
bool setEnvVar(const char *name, const char *value);
270270

271-
// Prints to stderr if UR_L0_DEBUG allows it
272-
void urPrint(const char *Format, ...);
273-
274271
// Helper for one-liner validation
275272
#define UR_ASSERT(condition, error) \
276273
if (!(condition)) \
@@ -301,9 +298,6 @@ template <class T> struct ZesStruct : public T {
301298
// setting environment variables.
302299
bool setEnvVar(const char *name, const char *value);
303300

304-
// Prints to stderr if UR_L0_DEBUG allows it
305-
void urPrint(const char *Format, ...);
306-
307301
// Helper for one-liner validation
308302
#define UR_ASSERT(condition, error) \
309303
if (!(condition)) \

0 commit comments

Comments
 (0)