Skip to content

Commit 3b3d9a5

Browse files
committed
Merge remote-tracking branch 'igchor/v2_counter_based_provider' into cb_events2
2 parents 38bd413 + ad8010b commit 3b3d9a5

File tree

6 files changed

+54
-25
lines changed

6 files changed

+54
-25
lines changed

unified-runtime/source/adapters/level_zero/v2/context.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,14 @@ ur_context_handle_t_::ur_context_handle_t_(ze_context_handle_t hContext,
8080
phDevices[0]->Platform->ZeMutableCmdListExt.Supported}),
8181
eventPoolCacheImmediate(
8282
this, phDevices[0]->Platform->getNumDevices(),
83-
[context = this](DeviceId /* deviceId*/, v2::event_flags_t flags)
84-
-> std::unique_ptr<v2::event_provider> {
83+
[context = this, platform = phDevices[0]->Platform](
84+
DeviceId deviceId,
85+
v2::event_flags_t flags) -> std::unique_ptr<v2::event_provider> {
86+
auto device = platform->getDeviceById(deviceId);
87+
8588
// TODO: just use per-context id?
86-
return std::make_unique<v2::provider_normal>(
87-
context, v2::QUEUE_IMMEDIATE, flags);
89+
return std::make_unique<v2::provider_counter>(
90+
platform, context, v2::QUEUE_IMMEDIATE, device, flags);
8891
}),
8992
eventPoolCacheRegular(this, phDevices[0]->Platform->getNumDevices(),
9093
[context = this, platform = phDevices[0]->Platform](

unified-runtime/source/adapters/level_zero/v2/event_provider.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ enum event_flag_t {
2828
};
2929
static constexpr size_t EVENT_FLAGS_USED_BITS = 2;
3030

31+
enum queue_type {
32+
QUEUE_REGULAR,
33+
QUEUE_IMMEDIATE,
34+
};
35+
3136
class event_provider;
3237

3338
namespace raii {

unified-runtime/source/adapters/level_zero/v2/event_provider_counter.cpp

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,14 @@ namespace v2 {
2222

2323
provider_counter::provider_counter(ur_platform_handle_t platform,
2424
ur_context_handle_t context,
25-
ur_device_handle_t device) {
25+
queue_type queueType,
26+
ur_device_handle_t device,
27+
event_flags_t flags)
28+
: queueType(queueType), flags(flags) {
29+
assert(flags & EVENT_FLAGS_COUNTER);
30+
2631
ZE2UR_CALL_THROWS(zeDriverGetExtensionFunctionAddress,
27-
(platform->ZeDriver, "zexCounterBasedEventCreate",
32+
(platform->ZeDriver, "zexCounterBasedEventCreate2",
2833
(void **)&this->eventCreateFunc));
2934
ZE2UR_CALL_THROWS(zelLoaderTranslateHandle,
3035
(ZEL_HANDLE_CONTEXT, context->getZeHandle(),
@@ -34,17 +39,35 @@ provider_counter::provider_counter(ur_platform_handle_t platform,
3439
(ZEL_HANDLE_DEVICE, device->ZeDevice, (void **)&translatedDevice));
3540
}
3641

42+
static zex_counter_based_event_exp_flags_t createZeFlags(queue_type queueType,
43+
event_flags_t flags) {
44+
zex_counter_based_event_exp_flags_t zeFlags =
45+
ZEX_COUNTER_BASED_EVENT_FLAG_HOST_VISIBLE;
46+
if (flags & EVENT_FLAGS_PROFILING_ENABLED) {
47+
zeFlags |= ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP;
48+
}
49+
50+
if (queueType == QUEUE_IMMEDIATE) {
51+
zeFlags |= ZEX_COUNTER_BASED_EVENT_FLAG_IMMEDIATE;
52+
} else {
53+
zeFlags |= ZEX_COUNTER_BASED_EVENT_FLAG_NON_IMMEDIATE;
54+
}
55+
56+
return zeFlags;
57+
}
58+
3759
raii::cache_borrowed_event provider_counter::allocate() {
3860
if (freelist.empty()) {
39-
ZeStruct<ze_event_desc_t> desc;
40-
desc.index = 0;
41-
desc.signal = ZE_EVENT_SCOPE_FLAG_HOST;
42-
desc.wait = 0;
61+
zex_counter_based_event_desc_t desc = {};
62+
desc.stype = ZEX_STRUCTURE_COUNTER_BASED_EVENT_DESC;
63+
desc.flags = createZeFlags(queueType, flags);
64+
desc.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
65+
4366
ze_event_handle_t handle;
4467

4568
// TODO: allocate host and device buffers to use here
46-
ZE2UR_CALL_THROWS(eventCreateFunc, (translatedContext, translatedDevice,
47-
nullptr, nullptr, 0, &desc, &handle));
69+
ZE2UR_CALL_THROWS(eventCreateFunc,
70+
(translatedContext, translatedDevice, &desc, &handle));
4871

4972
freelist.emplace_back(handle);
5073
}
@@ -57,8 +80,6 @@ raii::cache_borrowed_event provider_counter::allocate() {
5780
[this](ze_event_handle_t handle) { freelist.push_back(handle); });
5881
}
5982

60-
event_flags_t provider_counter::eventFlags() const {
61-
return EVENT_FLAGS_COUNTER;
62-
}
83+
event_flags_t provider_counter::eventFlags() const { return flags; }
6384

6485
} // namespace v2

unified-runtime/source/adapters/level_zero/v2/event_provider_counter.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,27 @@
2525

2626
#include "../device.hpp"
2727

28+
#include <level_zero/driver_experimental/zex_event.h>
29+
#include <level_zero/ze_intel_gpu.h>
30+
2831
namespace v2 {
2932

3033
typedef ze_result_t (*zexCounterBasedEventCreate)(
3134
ze_context_handle_t hContext, ze_device_handle_t hDevice,
32-
uint64_t *deviceAddress, uint64_t *hostAddress, uint64_t completionValue,
33-
const ze_event_desc_t *desc, ze_event_handle_t *phEvent);
35+
const zex_counter_based_event_desc_t *desc, ze_event_handle_t *phEvent);
3436

3537
class provider_counter : public event_provider {
3638
public:
3739
provider_counter(ur_platform_handle_t platform, ur_context_handle_t,
38-
ur_device_handle_t);
40+
queue_type, ur_device_handle_t, event_flags_t);
3941

4042
raii::cache_borrowed_event allocate() override;
4143
event_flags_t eventFlags() const override;
4244

4345
private:
46+
queue_type queueType;
47+
event_flags_t flags;
48+
4449
ze_context_handle_t translatedContext;
4550
ze_device_handle_t translatedDevice;
4651

unified-runtime/source/adapters/level_zero/v2/event_provider_normal.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
#include "event_provider.hpp"
1818
#include "event_provider_normal.hpp"
1919

20-
#include "../common/latency_tracker.hpp"
21-
2220
#include "../common.hpp"
21+
#include "../common/latency_tracker.hpp"
2322

2423
namespace v2 {
2524
static constexpr int EVENTS_BURST = 64;

unified-runtime/source/adapters/level_zero/v2/event_provider_normal.hpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,13 @@
2121

2222
#include "common.hpp"
2323
#include "event.hpp"
24+
#include "event_provider.hpp"
2425

2526
#include "../device.hpp"
2627
#include "../ur_interface_loader.hpp"
2728

2829
namespace v2 {
2930

30-
enum queue_type {
31-
QUEUE_REGULAR,
32-
QUEUE_IMMEDIATE,
33-
};
34-
3531
class provider_pool {
3632
public:
3733
provider_pool(ur_context_handle_t, queue_type, event_flags_t flags);

0 commit comments

Comments
 (0)