Skip to content

Commit 5c9ad6c

Browse files
authored
Merge pull request #2431 from igchor/ze_trace_tests
[Tests] replace zeCallsMap with zelTracer
2 parents a5fcf7d + b69d274 commit 5c9ad6c

File tree

6 files changed

+91
-54
lines changed

6 files changed

+91
-54
lines changed

source/adapters/level_zero/common.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,7 @@ bool setEnvVar(const char *name, const char *value) {
8686

8787
ZeUSMImportExtension ZeUSMImport;
8888

89-
// This will count the calls to Level-Zero
90-
// TODO: remove the ifdef once
91-
// https://github.com/oneapi-src/unified-runtime/issues/1454 is implemented
92-
#ifndef UR_L0_CALL_COUNT_IN_TESTS
9389
std::map<std::string, int> *ZeCallCount = nullptr;
94-
#endif
9590

9691
inline void zeParseError(ze_result_t ZeError, const char *&ErrorString) {
9792
switch (ZeError) {

test/adapters/level_zero/CMakeLists.txt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,35 +43,27 @@ if(UR_BUILD_ADAPTER_L0)
4343
endif()
4444

4545
if(NOT WIN32 AND NOT UR_STATIC_ADAPTER_L0)
46-
# Make L0 use CallMap from a seprate shared lib so that we can access the map
47-
# from the tests. This only seems to work on linux
48-
add_library(zeCallMap SHARED zeCallMap.cpp)
49-
install_ur_library(zeCallMap)
50-
target_compile_definitions(ur_adapter_level_zero PRIVATE UR_L0_CALL_COUNT_IN_TESTS)
51-
# TODO: stop exporting internals like this for tests...
52-
target_link_libraries(ur_adapter_level_zero PRIVATE zeCallMap)
53-
5446
add_adapter_test(level_zero_ze_calls
5547
FIXTURE DEVICES
5648
SOURCES
5749
event_cache_tests.cpp
5850
ENVIRONMENT
5951
"UR_ADAPTERS_FORCE_LOAD=\"$<TARGET_FILE:ur_adapter_level_zero>\""
60-
"UR_L0_LEAKS_DEBUG=1"
52+
"ZE_ENABLE_TRACING_LAYER=1"
6153
)
6254

63-
target_link_libraries(test-adapter-level_zero_ze_calls PRIVATE zeCallMap)
55+
target_link_libraries(test-adapter-level_zero_ze_calls PRIVATE LevelZeroLoader LevelZeroLoader-Headers)
6456

6557
add_adapter_test(level_zero_multi_queue
6658
FIXTURE DEVICES
6759
SOURCES
6860
multi_device_event_cache_tests.cpp
6961
ENVIRONMENT
7062
"UR_ADAPTERS_FORCE_LOAD=\"$<TARGET_FILE:ur_adapter_level_zero>\""
71-
"UR_L0_LEAKS_DEBUG=1"
63+
"ZE_ENABLE_TRACING_LAYER=1"
7264
)
7365

74-
target_link_libraries(test-adapter-level_zero_multi_queue PRIVATE zeCallMap)
66+
target_link_libraries(test-adapter-level_zero_multi_queue PRIVATE LevelZeroLoader LevelZeroLoader-Headers)
7567
endif()
7668

7769
add_adapter_test(level_zero_ipc

test/adapters/level_zero/event_cache_tests.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,32 @@
1010
#include <map>
1111
#include <string>
1212

13+
#include "ze_tracer_common.hpp"
14+
15+
std::size_t eventCreateCount = 0;
16+
std::size_t eventDestroyCount = 0;
17+
18+
void OnEnterEventCreate(ze_event_create_params_t *, ze_result_t, void *,
19+
void **) {
20+
eventCreateCount++;
21+
}
22+
23+
void OnEnterEventDestroy(ze_event_destroy_params_t *, ze_result_t, void *,
24+
void **) {
25+
eventDestroyCount++;
26+
}
27+
28+
static std::shared_ptr<_zel_tracer_handle_t> tracer = [] {
29+
zel_core_callbacks_t prologue_callbacks{};
30+
prologue_callbacks.Event.pfnCreateCb = OnEnterEventCreate;
31+
prologue_callbacks.Event.pfnDestroyCb = OnEnterEventDestroy;
32+
return enableTracing(prologue_callbacks, {});
33+
}();
34+
1335
template <typename... Args> auto combineFlags(std::tuple<Args...> tuple) {
1436
return std::apply([](auto... args) { return (... |= args); }, tuple);
1537
}
1638

17-
extern std::map<std::string, int> *ZeCallCount;
18-
1939
using FlagsTupleType = std::tuple<ur_queue_flags_t, ur_queue_flags_t,
2040
ur_queue_flags_t, ur_queue_flags_t>;
2141

@@ -43,8 +63,8 @@ struct urEventCacheTest : uur::urContextTestWithParam<FlagsTupleType> {
4363
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_WRITE_ONLY, size,
4464
nullptr, &buffer));
4565

46-
(*ZeCallCount)["zeEventCreate"] = 0;
47-
(*ZeCallCount)["zeEventDestroy"] = 0;
66+
eventCreateCount = 0;
67+
eventDestroyCount = 0;
4868
}
4969

5070
void TearDown() override {
@@ -96,9 +116,9 @@ TEST_P(urEventCacheTest, eventsReuseNoVisibleEvent) {
96116
// TODO: why events are not reused for UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE?
97117
if ((flags & UR_QUEUE_FLAG_DISCARD_EVENTS) &&
98118
!(flags & UR_QUEUE_FLAG_OUT_OF_ORDER_EXEC_MODE_ENABLE)) {
99-
ASSERT_EQ((*ZeCallCount)["zeEventCreate"], 2);
119+
ASSERT_EQ(eventCreateCount, 2);
100120
} else {
101-
ASSERT_GE((*ZeCallCount)["zeEventCreate"], numIters * numEnqueues);
121+
ASSERT_GE(eventCreateCount, numIters * numEnqueues);
102122
}
103123
}
104124

@@ -115,7 +135,7 @@ TEST_P(urEventCacheTest, eventsReuseWithVisibleEvent) {
115135
verifyData();
116136
}
117137

118-
ASSERT_LT((*ZeCallCount)["zeEventCreate"], numIters * numEnqueues);
138+
ASSERT_LT(eventCreateCount, numIters * numEnqueues);
119139
}
120140

121141
TEST_P(urEventCacheTest, eventsReuseWithVisibleEventAndWait) {
@@ -139,9 +159,9 @@ TEST_P(urEventCacheTest, eventsReuseWithVisibleEventAndWait) {
139159
UUR_ASSERT_SUCCESS_OR_EXIT_IF_UNSUPPORTED(urQueueFinish(queue));
140160
}
141161

142-
ASSERT_GE((*ZeCallCount)["zeEventCreate"], waitEveryN);
162+
ASSERT_GE(eventCreateCount, waitEveryN);
143163
// TODO: why there are more events than this?
144-
// ASSERT_LE((*ZeCallCount)["zeEventCreate"], waitEveryN * 2 + 2);
164+
// ASSERT_LE(eventCreateCount, waitEveryN * 2 + 2);
145165
}
146166

147167
template <typename T>

test/adapters/level_zero/multi_device_event_cache_tests.cpp

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,21 @@
1010
#include <map>
1111
#include <string>
1212

13-
extern std::map<std::string, int> *ZeCallCount;
13+
#include "ze_tracer_common.hpp"
14+
15+
size_t zeCommandListAppendWaitOnEventsCount = 0;
16+
17+
void OnAppendWaitOnEventsCb(ze_command_list_append_wait_on_events_params_t *,
18+
ze_result_t, void *, void **) {
19+
zeCommandListAppendWaitOnEventsCount++;
20+
}
21+
22+
static std::shared_ptr<_zel_tracer_handle_t> tracer = [] {
23+
zel_core_callbacks_t prologue_callbacks{};
24+
prologue_callbacks.CommandList.pfnAppendWaitOnEventsCb =
25+
OnAppendWaitOnEventsCb;
26+
return enableTracing(prologue_callbacks, {});
27+
}();
1428

1529
using urMultiQueueMultiDeviceEventCacheTest = uur::urAllDevicesTest;
1630
TEST_F(urMultiQueueMultiDeviceEventCacheTest,
@@ -40,12 +54,12 @@ TEST_F(urMultiQueueMultiDeviceEventCacheTest,
4054
ASSERT_SUCCESS(urDevicePartition(devices[0], &properties, numSubDevices,
4155
sub_devices.data(), nullptr));
4256
uur::raii::Context context1 = nullptr;
43-
ASSERT_SUCCESS(
44-
urContextCreate(1, &sub_devices[0], nullptr, context1.ptr()));
57+
ASSERT_SUCCESS(urContextCreate(sub_devices.size(), &sub_devices[0], nullptr,
58+
context1.ptr()));
4559
ASSERT_NE(nullptr, context1);
4660
uur::raii::Context context2 = nullptr;
47-
ASSERT_SUCCESS(
48-
urContextCreate(1, &sub_devices[1], nullptr, context2.ptr()));
61+
ASSERT_SUCCESS(urContextCreate(sub_devices.size(), &sub_devices[0], nullptr,
62+
context2.ptr()));
4963
ASSERT_NE(nullptr, context2);
5064
ur_queue_handle_t queue1 = nullptr;
5165
ASSERT_SUCCESS(urQueueCreate(context1, sub_devices[0], 0, &queue1));
@@ -54,16 +68,14 @@ TEST_F(urMultiQueueMultiDeviceEventCacheTest,
5468
uur::raii::Event event = nullptr;
5569
uur::raii::Event eventWait = nullptr;
5670
uur::raii::Event eventWaitDummy = nullptr;
57-
(*ZeCallCount)["zeCommandListAppendWaitOnEvents"] = 0;
58-
EXPECT_SUCCESS(
59-
urEventCreateWithNativeHandle(0, context2, nullptr, eventWait.ptr()));
71+
zeCommandListAppendWaitOnEventsCount = 0;
6072
EXPECT_SUCCESS(urEventCreateWithNativeHandle(0, context1, nullptr,
6173
eventWaitDummy.ptr()));
6274
EXPECT_SUCCESS(
6375
urEnqueueEventsWait(queue1, 1, eventWaitDummy.ptr(), eventWait.ptr()));
6476
EXPECT_SUCCESS(
6577
urEnqueueEventsWait(queue2, 1, eventWait.ptr(), event.ptr()));
66-
EXPECT_EQ((*ZeCallCount)["zeCommandListAppendWaitOnEvents"], 2);
78+
EXPECT_EQ(zeCommandListAppendWaitOnEventsCount, 2);
6779
ASSERT_SUCCESS(urEventRelease(eventWaitDummy.get()));
6880
ASSERT_SUCCESS(urEventRelease(eventWait.get()));
6981
ASSERT_SUCCESS(urEventRelease(event.get()));
@@ -77,10 +89,12 @@ TEST_F(urMultiQueueMultiDeviceEventCacheTest,
7789
GTEST_SKIP();
7890
}
7991
uur::raii::Context context1 = nullptr;
80-
ASSERT_SUCCESS(urContextCreate(1, &devices[0], nullptr, context1.ptr()));
92+
ASSERT_SUCCESS(
93+
urContextCreate(devices.size(), &devices[0], nullptr, context1.ptr()));
8194
ASSERT_NE(nullptr, context1);
8295
uur::raii::Context context2 = nullptr;
83-
ASSERT_SUCCESS(urContextCreate(1, &devices[1], nullptr, context2.ptr()));
96+
ASSERT_SUCCESS(
97+
urContextCreate(devices.size(), &devices[0], nullptr, context2.ptr()));
8498
ASSERT_NE(nullptr, context2);
8599
ur_queue_handle_t queue1 = nullptr;
86100
ASSERT_SUCCESS(urQueueCreate(context1, devices[0], 0, &queue1));
@@ -89,16 +103,14 @@ TEST_F(urMultiQueueMultiDeviceEventCacheTest,
89103
uur::raii::Event event = nullptr;
90104
uur::raii::Event eventWait = nullptr;
91105
uur::raii::Event eventWaitDummy = nullptr;
92-
(*ZeCallCount)["zeCommandListAppendWaitOnEvents"] = 0;
93-
EXPECT_SUCCESS(
94-
urEventCreateWithNativeHandle(0, context2, nullptr, eventWait.ptr()));
106+
zeCommandListAppendWaitOnEventsCount = 0;
95107
EXPECT_SUCCESS(urEventCreateWithNativeHandle(0, context1, nullptr,
96108
eventWaitDummy.ptr()));
97109
EXPECT_SUCCESS(
98110
urEnqueueEventsWait(queue1, 1, eventWaitDummy.ptr(), eventWait.ptr()));
99111
EXPECT_SUCCESS(
100112
urEnqueueEventsWait(queue2, 1, eventWait.ptr(), event.ptr()));
101-
EXPECT_EQ((*ZeCallCount)["zeCommandListAppendWaitOnEvents"], 3);
113+
EXPECT_EQ(zeCommandListAppendWaitOnEventsCount, 3);
102114
ASSERT_SUCCESS(urEventRelease(eventWaitDummy.get()));
103115
ASSERT_SUCCESS(urEventRelease(eventWait.get()));
104116
ASSERT_SUCCESS(urEventRelease(event.get()));

test/adapters/level_zero/zeCallMap.cpp

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (C) 2024 Intel Corporation
2+
// Part of the Unified-Runtime Project, under the Apache License v2.0 with LLVM Exceptions.
3+
// See LICENSE.TXT
4+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5+
6+
#include "uur/fixtures.h"
7+
8+
#include <level_zero/layers/zel_tracing_api.h>
9+
#include <loader/ze_loader.h>
10+
11+
#include <memory>
12+
13+
std::shared_ptr<_zel_tracer_handle_t>
14+
enableTracing(zel_core_callbacks_t prologueCallbacks,
15+
zel_core_callbacks_t epilogueCallbacks) {
16+
EXPECT_EQ(zeInit(ZE_INIT_FLAG_GPU_ONLY), ZE_RESULT_SUCCESS);
17+
18+
zel_tracer_desc_t tracer_desc = {ZEL_STRUCTURE_TYPE_TRACER_EXP_DESC,
19+
nullptr, nullptr};
20+
zel_tracer_handle_t tracer = nullptr;
21+
EXPECT_EQ(zelTracerCreate(&tracer_desc, &tracer), ZE_RESULT_SUCCESS);
22+
23+
EXPECT_EQ(zelTracerSetPrologues(tracer, &prologueCallbacks),
24+
ZE_RESULT_SUCCESS);
25+
EXPECT_EQ(zelTracerSetEpilogues(tracer, &epilogueCallbacks),
26+
ZE_RESULT_SUCCESS);
27+
EXPECT_EQ(zelTracerSetEnabled(tracer, true), ZE_RESULT_SUCCESS);
28+
29+
return std::shared_ptr<_zel_tracer_handle_t>(
30+
tracer, [](zel_tracer_handle_t tracer) { zelTracerDestroy(tracer); });
31+
}

0 commit comments

Comments
 (0)