Skip to content

Commit 93e117f

Browse files
Metrics Refactor Metric Group
Refactor Metric Group Implementation to move OA specific implementation to OA specific classes. This is so that stall sampling specific Metric Group implementation could be done seamlessly. Related-To: LOCI-2753 Signed-off-by: Joshua Santosh Ranjan <[email protected]>
1 parent 10e4e62 commit 93e117f

10 files changed

+109
-75
lines changed

level_zero/api/tools/zet_metric.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2021 Intel Corporation
2+
* Copyright (C) 2020-2022 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -30,7 +30,7 @@ zetMetricGet(
3030
zet_metric_group_handle_t hMetricGroup,
3131
uint32_t *pCount,
3232
zet_metric_handle_t *phMetrics) {
33-
return L0::MetricGroup::fromHandle(hMetricGroup)->getMetric(pCount, phMetrics);
33+
return L0::MetricGroup::fromHandle(hMetricGroup)->metricGet(pCount, phMetrics);
3434
}
3535

3636
ZE_DLLEXPORT ze_result_t ZE_APICALL

level_zero/tools/source/metrics/metric.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,9 @@ ze_result_t MetricDeviceContext::activateMetricGroupsDeferred(uint32_t count, ze
236236
for (auto index = 0u; index < count; index++) {
237237

238238
zet_metric_group_handle_t hMetricGroup = MetricGroup::fromHandle(phMetricGroups[index])->getMetricGroupForSubDevice(subDeviceIndex);
239-
auto domain = MetricGroup::getProperties(hMetricGroup).domain;
239+
zet_metric_group_properties_t properties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES};
240+
MetricGroup::fromHandle(hMetricGroup)->getProperties(&properties);
241+
auto domain = properties.domain;
240242
// Domain already associated with the same handle.
241243
if (domains[domain].first == hMetricGroup) {
242244
continue;
@@ -370,8 +372,7 @@ ze_result_t metricGroupGet(zet_device_handle_t hDevice, uint32_t *pCount, zet_me
370372
ze_result_t metricStreamerOpen(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
371373
zet_metric_streamer_desc_t *pDesc, ze_event_handle_t hNotificationEvent,
372374
zet_metric_streamer_handle_t *phMetricStreamer) {
373-
374-
return MetricStreamer::open(hContext, hDevice, hMetricGroup, *pDesc, hNotificationEvent, phMetricStreamer);
375+
return MetricGroup::fromHandle(hMetricGroup)->streamerOpen(hContext, hDevice, pDesc, hNotificationEvent, phMetricStreamer);
375376
}
376377

377378
template <>

level_zero/tools/source/metrics/metric.h

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -81,37 +81,32 @@ struct MetricGroup : _zet_metric_group_handle_t {
8181
virtual ~MetricGroup() = default;
8282

8383
virtual ze_result_t getProperties(zet_metric_group_properties_t *pProperties) = 0;
84-
virtual ze_result_t getMetric(uint32_t *pCount, zet_metric_handle_t *phMetrics) = 0;
84+
virtual ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) = 0;
8585
virtual ze_result_t calculateMetricValues(const zet_metric_group_calculation_type_t type, size_t rawDataSize,
8686
const uint8_t *pRawData, uint32_t *pMetricValueCount,
8787
zet_typed_value_t *pMetricValues) = 0;
8888
virtual ze_result_t calculateMetricValuesExp(const zet_metric_group_calculation_type_t type, size_t rawDataSize,
8989
const uint8_t *pRawData, uint32_t *pSetCount,
9090
uint32_t *pTotalMetricValueCount, uint32_t *pMetricCounts,
9191
zet_typed_value_t *pMetricValues) = 0;
92-
93-
static MetricGroup *create(zet_metric_group_properties_t &properties,
94-
MetricsDiscovery::IMetricSet_1_5 &metricSet,
95-
MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup,
96-
const std::vector<Metric *> &metrics,
97-
MetricSource &metricSource);
9892
static MetricGroup *fromHandle(zet_metric_group_handle_t handle) {
9993
return static_cast<MetricGroup *>(handle);
10094
}
101-
static zet_metric_group_properties_t getProperties(const zet_metric_group_handle_t handle);
102-
10395
zet_metric_group_handle_t toHandle() { return this; }
104-
105-
virtual uint32_t getRawReportSize() = 0;
106-
10796
virtual bool activate() = 0;
10897
virtual bool deactivate() = 0;
10998
virtual zet_metric_group_handle_t getMetricGroupForSubDevice(const uint32_t subDeviceIndex) = 0;
110-
111-
virtual ze_result_t openIoStream(uint32_t &timerPeriodNs, uint32_t &oaBufferSize) = 0;
112-
virtual ze_result_t waitForReports(const uint32_t timeoutMs) = 0;
113-
virtual ze_result_t readIoStream(uint32_t &reportCount, uint8_t &reportData) = 0;
114-
virtual ze_result_t closeIoStream() = 0;
99+
virtual ze_result_t streamerOpen(
100+
zet_context_handle_t hContext,
101+
zet_device_handle_t hDevice,
102+
zet_metric_streamer_desc_t *desc,
103+
ze_event_handle_t hNotificationEvent,
104+
zet_metric_streamer_handle_t *phMetricStreamer) = 0;
105+
virtual ze_result_t metricQueryPoolCreate(
106+
zet_context_handle_t hContext,
107+
zet_device_handle_t hDevice,
108+
const zet_metric_query_pool_desc_t *desc,
109+
zet_metric_query_pool_handle_t *phMetricQueryPool) = 0;
115110
};
116111

117112
struct MetricGroupCalculateHeader {
@@ -126,19 +121,12 @@ struct MetricGroupCalculateHeader {
126121

127122
struct MetricStreamer : _zet_metric_streamer_handle_t {
128123
virtual ~MetricStreamer() = default;
129-
130124
virtual ze_result_t readData(uint32_t maxReportCount, size_t *pRawDataSize,
131125
uint8_t *pRawData) = 0;
132126
virtual ze_result_t close() = 0;
133-
static ze_result_t openForDevice(Device *pDevice, zet_metric_group_handle_t hMetricGroup,
134-
zet_metric_streamer_desc_t &desc,
135-
zet_metric_streamer_handle_t *phMetricStreamer);
136-
static ze_result_t open(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
137-
zet_metric_streamer_desc_t &desc, ze_event_handle_t hNotificationEvent, zet_metric_streamer_handle_t *phMetricStreamer);
138127
static MetricStreamer *fromHandle(zet_metric_streamer_handle_t handle) {
139128
return static_cast<MetricStreamer *>(handle);
140129
}
141-
142130
virtual Event::State getNotificationState() = 0;
143131
inline zet_metric_streamer_handle_t toHandle() { return this; }
144132
};

level_zero/tools/source/metrics/metric_enumeration_imp.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ MetricEnumeration::cacheMetricGroup(MetricsDiscovery::IMetricSet_1_5 &metricSet,
313313
std::vector<Metric *> metrics;
314314
createMetrics(metricSet, metrics);
315315

316-
auto pMetricGroup = MetricGroup::create(properties, metricSet, concurrentGroup, metrics, metricSource);
316+
auto pMetricGroup = OaMetricGroupImp::create(properties, metricSet, concurrentGroup, metrics, metricSource);
317317
DEBUG_BREAK_IF(pMetricGroup == nullptr);
318318

319319
metricGroups.push_back(pMetricGroup);
@@ -485,14 +485,14 @@ OaMetricGroupImp ::~OaMetricGroupImp() {
485485

486486
ze_result_t OaMetricGroupImp::getProperties(zet_metric_group_properties_t *pProperties) {
487487
if (metricGroups.size() > 0) {
488-
*pProperties = MetricGroup::getProperties(metricGroups[0]);
488+
*pProperties = OaMetricGroupImp::getProperties(metricGroups[0]);
489489
} else {
490490
copyProperties(properties, *pProperties);
491491
}
492492
return ZE_RESULT_SUCCESS;
493493
}
494494

495-
zet_metric_group_properties_t MetricGroup::getProperties(const zet_metric_group_handle_t handle) {
495+
zet_metric_group_properties_t OaMetricGroupImp::getProperties(const zet_metric_group_handle_t handle) {
496496
auto metricGroup = MetricGroup::fromHandle(handle);
497497
UNRECOVERABLE_IF(!metricGroup);
498498

@@ -502,11 +502,11 @@ zet_metric_group_properties_t MetricGroup::getProperties(const zet_metric_group_
502502
return properties;
503503
}
504504

505-
ze_result_t OaMetricGroupImp::getMetric(uint32_t *pCount, zet_metric_handle_t *phMetrics) {
505+
ze_result_t OaMetricGroupImp::metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) {
506506

507507
if (metricGroups.size() > 0) {
508508
auto metricGroupSubDevice = MetricGroup::fromHandle(metricGroups[0]);
509-
return metricGroupSubDevice->getMetric(pCount, phMetrics);
509+
return metricGroupSubDevice->metricGet(pCount, phMetrics);
510510
}
511511

512512
if (*pCount == 0) {
@@ -916,11 +916,11 @@ void OaMetricImp::copyProperties(const zet_metric_properties_t &source,
916916
source.resultUnits, sizeof(destination.resultUnits));
917917
}
918918

919-
MetricGroup *MetricGroup::create(zet_metric_group_properties_t &properties,
920-
MetricsDiscovery::IMetricSet_1_5 &metricSet,
921-
MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup,
922-
const std::vector<Metric *> &metrics,
923-
MetricSource &metricSource) {
919+
MetricGroup *OaMetricGroupImp::create(zet_metric_group_properties_t &properties,
920+
MetricsDiscovery::IMetricSet_1_5 &metricSet,
921+
MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup,
922+
const std::vector<Metric *> &metrics,
923+
MetricSource &metricSource) {
924924
auto pMetricGroup = new OaMetricGroupImp();
925925
UNRECOVERABLE_IF(pMetricGroup == nullptr);
926926
pMetricGroup->initialize(properties, metricSet, concurrentGroup, metrics, static_cast<OaMetricSourceImp &>(metricSource));

level_zero/tools/source/metrics/metric_enumeration_imp.h

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ struct OaMetricGroupImp : MetricGroup {
7777
~OaMetricGroupImp() override;
7878

7979
ze_result_t getProperties(zet_metric_group_properties_t *pProperties) override;
80-
ze_result_t getMetric(uint32_t *pCount, zet_metric_handle_t *phMetrics) override;
80+
ze_result_t metricGet(uint32_t *pCount, zet_metric_handle_t *phMetrics) override;
8181
ze_result_t calculateMetricValues(const zet_metric_group_calculation_type_t type, size_t rawDataSize, const uint8_t *pRawData,
8282
uint32_t *pMetricValueCount,
8383
zet_typed_value_t *pCalculatedData) override;
@@ -91,8 +91,6 @@ struct OaMetricGroupImp : MetricGroup {
9191
const std::vector<Metric *> &groupMetrics,
9292
OaMetricSourceImp &metricSource);
9393

94-
uint32_t getRawReportSize() override;
95-
9694
bool activate() override;
9795
bool deactivate() override;
9896

@@ -103,12 +101,31 @@ struct OaMetricGroupImp : MetricGroup {
103101
zet_metric_group_handle_t getMetricGroupForSubDevice(const uint32_t subDeviceIndex) override;
104102

105103
// Time based measurements.
106-
ze_result_t openIoStream(uint32_t &timerPeriodNs, uint32_t &oaBufferSize) override;
107-
ze_result_t waitForReports(const uint32_t timeoutMs) override;
108-
ze_result_t readIoStream(uint32_t &reportCount, uint8_t &reportData) override;
109-
ze_result_t closeIoStream() override;
104+
ze_result_t openIoStream(uint32_t &timerPeriodNs, uint32_t &oaBufferSize);
105+
ze_result_t waitForReports(const uint32_t timeoutMs);
106+
ze_result_t readIoStream(uint32_t &reportCount, uint8_t &reportData);
107+
ze_result_t closeIoStream();
110108

111109
std::vector<zet_metric_group_handle_t> &getMetricGroups();
110+
ze_result_t streamerOpen(
111+
zet_context_handle_t hContext,
112+
zet_device_handle_t hDevice,
113+
zet_metric_streamer_desc_t *desc,
114+
ze_event_handle_t hNotificationEvent,
115+
zet_metric_streamer_handle_t *phMetricStreamer) override;
116+
117+
ze_result_t metricQueryPoolCreate(
118+
zet_context_handle_t hContext,
119+
zet_device_handle_t hDevice,
120+
const zet_metric_query_pool_desc_t *desc,
121+
zet_metric_query_pool_handle_t *phMetricQueryPool) override;
122+
static MetricGroup *create(zet_metric_group_properties_t &properties,
123+
MetricsDiscovery::IMetricSet_1_5 &metricSet,
124+
MetricsDiscovery::IConcurrentGroup_1_5 &concurrentGroup,
125+
const std::vector<Metric *> &metrics,
126+
MetricSource &metricSource);
127+
static zet_metric_group_properties_t getProperties(const zet_metric_group_handle_t handle);
128+
uint32_t getRawReportSize();
112129

113130
protected:
114131
void copyProperties(const zet_metric_group_properties_t &source,
@@ -134,6 +151,10 @@ struct OaMetricGroupImp : MetricGroup {
134151
std::vector<zet_metric_group_handle_t> metricGroups;
135152

136153
OaMetricSourceImp *metricSource;
154+
155+
private:
156+
ze_result_t openForDevice(Device *pDevice, zet_metric_streamer_desc_t &desc,
157+
zet_metric_streamer_handle_t *phMetricStreamer);
137158
};
138159

139160
struct OaMetricImp : Metric {

level_zero/tools/source/metrics/metric_query_imp.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ ConfigurationHandle_1_0 MetricsLibrary::addConfiguration(zet_metric_group_handle
395395

396396
// Create metrics library configuration.
397397
auto metricGroup = MetricGroup::fromHandle(handle);
398-
auto properties = MetricGroup::getProperties(handle);
398+
auto properties = OaMetricGroupImp::getProperties(handle);
399399
auto configuration = createConfiguration(metricGroup, properties);
400400

401401
// Cache configuration if valid.
@@ -421,9 +421,17 @@ void MetricsLibrary::deleteAllConfigurations() {
421421
configurations.clear();
422422
}
423423

424-
ze_result_t metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
425-
const zet_metric_query_pool_desc_t *pDesc, zet_metric_query_pool_handle_t *phMetricQueryPool) {
424+
ze_result_t OaMetricGroupImp::metricQueryPoolCreate(
425+
zet_context_handle_t hContext,
426+
zet_device_handle_t hDevice,
427+
const zet_metric_query_pool_desc_t *desc,
428+
zet_metric_query_pool_handle_t *phMetricQueryPool) {
429+
430+
return OaMetricQueryPoolImp::metricQueryPoolCreate(hContext, hDevice, toHandle(), desc, phMetricQueryPool);
431+
}
426432

433+
ze_result_t OaMetricQueryPoolImp::metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
434+
const zet_metric_query_pool_desc_t *pDesc, zet_metric_query_pool_handle_t *phMetricQueryPool) {
427435
auto device = Device::fromHandle(hDevice);
428436
auto &metricSource = device->getMetricDeviceContext().getMetricSource<OaMetricSourceImp>();
429437

@@ -440,6 +448,7 @@ ze_result_t metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_hand
440448
if (metricSource.isImplicitScalingCapable()) {
441449

442450
auto emptyMetricGroups = std::vector<zet_metric_group_handle_t>();
451+
443452
auto &metricGroups = hMetricGroup
444453
? static_cast<OaMetricGroupImp *>(MetricGroup::fromHandle(hMetricGroup))->getMetricGroups()
445454
: emptyMetricGroups;
@@ -498,6 +507,17 @@ ze_result_t metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_hand
498507
return ZE_RESULT_SUCCESS;
499508
}
500509

510+
ze_result_t metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
511+
const zet_metric_query_pool_desc_t *pDesc, zet_metric_query_pool_handle_t *phMetricQueryPool) {
512+
513+
if (pDesc->type == ZET_METRIC_QUERY_POOL_TYPE_EXECUTION) {
514+
return OaMetricQueryPoolImp::metricQueryPoolCreate(hContext, hDevice, hMetricGroup, pDesc, phMetricQueryPool);
515+
} else {
516+
UNRECOVERABLE_IF(hMetricGroup == nullptr);
517+
return MetricGroup::fromHandle(hMetricGroup)->metricQueryPoolCreate(hContext, hDevice, pDesc, phMetricQueryPool);
518+
}
519+
}
520+
501521
OaMetricQueryPoolImp::OaMetricQueryPoolImp(OaMetricSourceImp &metricSourceInput,
502522
zet_metric_group_handle_t hEventMetricGroupInput,
503523
const zet_metric_query_pool_desc_t &poolDescription)
@@ -584,7 +604,7 @@ bool OaMetricQueryPoolImp::allocateGpuMemory() {
584604

585605
bool OaMetricQueryPoolImp::createMetricQueryPool() {
586606
// Validate metric group query - only event based is supported.
587-
auto metricGroupProperites = MetricGroup::getProperties(hMetricGroup);
607+
auto metricGroupProperites = OaMetricGroupImp::getProperties(hMetricGroup);
588608
const bool validMetricGroup = metricGroupProperites.samplingType == ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED;
589609

590610
if (!validMetricGroup) {

level_zero/tools/source/metrics/metric_query_imp.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ struct OaMetricQueryPoolImp : MetricQueryPool {
151151

152152
std::vector<zet_metric_query_pool_handle_t> &getMetricQueryPools();
153153

154+
static ze_result_t metricQueryPoolCreate(zet_context_handle_t hContext, zet_device_handle_t hDevice, zet_metric_group_handle_t hMetricGroup,
155+
const zet_metric_query_pool_desc_t *pDesc, zet_metric_query_pool_handle_t *phMetricQueryPool);
156+
154157
protected:
155158
bool createMetricQueryPool();
156159
bool createSkipExecutionQueryPool();

0 commit comments

Comments
 (0)