Skip to content

Commit 82ad3d6

Browse files
Metrics Refactor MetricQuery and Metric Query Pool
This patch is to refactor MetricQuery and MetricQueryPool so that Stall sampling metric could be integrated seamlessly Related-To: LOCI-2904 Signed-off-by: Joshua Santosh Ranjan <[email protected]>
1 parent f1eda29 commit 82ad3d6

File tree

7 files changed

+40
-39
lines changed

7 files changed

+40
-39
lines changed

level_zero/api/tools/zet_metric.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ zetMetricQueryCreate(
115115
zet_metric_query_pool_handle_t hMetricQueryPool,
116116
uint32_t index,
117117
zet_metric_query_handle_t *phMetricQuery) {
118-
return L0::MetricQueryPool::fromHandle(hMetricQueryPool)->createMetricQuery(index, phMetricQuery);
118+
return L0::MetricQueryPool::fromHandle(hMetricQueryPool)->metricQueryCreate(index, phMetricQuery);
119119
}
120120

121121
ZE_DLLEXPORT ze_result_t ZE_APICALL

level_zero/core/source/cmdlist/cmdlist_imp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ ze_result_t CommandListImp::appendMetricMemoryBarrier() {
4242

4343
ze_result_t CommandListImp::appendMetricStreamerMarker(zet_metric_streamer_handle_t hMetricStreamer,
4444
uint32_t value) {
45-
return MetricQuery::appendStreamerMarker(*this, hMetricStreamer, value);
45+
return MetricStreamer::appendStreamerMarker(*this, hMetricStreamer, value);
4646
}
4747

4848
ze_result_t CommandListImp::appendMetricQueryBegin(zet_metric_query_handle_t hMetricQuery) {

level_zero/tools/source/metrics/metric.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ struct MetricStreamer : _zet_metric_streamer_handle_t {
127127
static MetricStreamer *fromHandle(zet_metric_streamer_handle_t handle) {
128128
return static_cast<MetricStreamer *>(handle);
129129
}
130+
static ze_result_t appendStreamerMarker(CommandList &commandList,
131+
zet_metric_streamer_handle_t hMetricStreamer, uint32_t value);
130132
virtual Event::State getNotificationState() = 0;
131133
inline zet_metric_streamer_handle_t toHandle() { return this; }
132134
};
@@ -135,7 +137,7 @@ struct MetricQueryPool : _zet_metric_query_pool_handle_t {
135137
virtual ~MetricQueryPool() = default;
136138

137139
virtual ze_result_t destroy() = 0;
138-
virtual ze_result_t createMetricQuery(uint32_t index,
140+
virtual ze_result_t metricQueryCreate(uint32_t index,
139141
zet_metric_query_handle_t *phMetricQuery) = 0;
140142

141143
static MetricQueryPool *fromHandle(zet_metric_query_pool_handle_t handle);
@@ -149,15 +151,12 @@ struct MetricQuery : _zet_metric_query_handle_t {
149151
virtual ze_result_t appendBegin(CommandList &commandList) = 0;
150152
virtual ze_result_t appendEnd(CommandList &commandList, ze_event_handle_t hSignalEvent,
151153
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) = 0;
152-
static ze_result_t appendStreamerMarker(CommandList &commandList,
153-
zet_metric_streamer_handle_t hMetricStreamer, uint32_t value);
154154
virtual ze_result_t getData(size_t *pRawDataSize, uint8_t *pRawData) = 0;
155155

156156
virtual ze_result_t reset() = 0;
157157
virtual ze_result_t destroy() = 0;
158158

159159
static MetricQuery *fromHandle(zet_metric_query_handle_t handle);
160-
161160
zet_metric_query_handle_t toHandle();
162161
};
163162

level_zero/tools/source/metrics/metric_query_imp.cpp

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ MetricQueryPool *MetricQueryPool::fromHandle(zet_metric_query_pool_handle_t hand
637637

638638
zet_metric_query_pool_handle_t MetricQueryPool::toHandle() { return this; }
639639

640-
ze_result_t OaMetricQueryPoolImp::createMetricQuery(uint32_t index,
640+
ze_result_t OaMetricQueryPoolImp::metricQueryCreate(uint32_t index,
641641
zet_metric_query_handle_t *phMetricQuery) {
642642

643643
if (index >= description.count) {
@@ -914,36 +914,6 @@ ze_result_t OaMetricQueryImp::writeSkipExecutionQuery(CommandList &commandList,
914914
return result ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNKNOWN;
915915
}
916916

917-
ze_result_t MetricQuery::appendStreamerMarker(CommandList &commandList,
918-
zet_metric_streamer_handle_t hMetricStreamer,
919-
uint32_t value) {
920-
921-
DeviceImp *pDeviceImp = static_cast<DeviceImp *>(commandList.device);
922-
923-
if (pDeviceImp->metricContext->isImplicitScalingCapable()) {
924-
// Use one of the sub-device contexts to append to command list.
925-
pDeviceImp = static_cast<DeviceImp *>(pDeviceImp->subDevices[0]);
926-
pDeviceImp->metricContext->getMetricSource<OaMetricSourceImp>().getMetricsLibrary().enableWorkloadPartition();
927-
}
928-
929-
OaMetricSourceImp &metricSource = pDeviceImp->metricContext->getMetricSource<OaMetricSourceImp>();
930-
auto &metricsLibrary = metricSource.getMetricsLibrary();
931-
932-
const uint32_t streamerMarkerHighBitsShift = 25;
933-
934-
// Obtain gpu commands.
935-
CommandBufferData_1_0 commandBuffer = {};
936-
commandBuffer.CommandsType = ObjectType::MarkerStreamUser;
937-
commandBuffer.MarkerStreamUser.Value = value;
938-
commandBuffer.MarkerStreamUser.Reserved = (value >> streamerMarkerHighBitsShift);
939-
commandBuffer.Type = metricSource.isComputeUsed()
940-
? GpuCommandBufferType::Compute
941-
: GpuCommandBufferType::Render;
942-
943-
return metricsLibrary.getGpuCommands(commandList, commandBuffer) ? ZE_RESULT_SUCCESS
944-
: ZE_RESULT_ERROR_UNKNOWN;
945-
}
946-
947917
MetricQuery *MetricQuery::fromHandle(zet_metric_query_handle_t handle) {
948918
return static_cast<MetricQuery *>(handle);
949919
}

level_zero/tools/source/metrics/metric_query_imp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ struct OaMetricQueryPoolImp : MetricQueryPool {
145145
bool create();
146146
ze_result_t destroy() override;
147147

148-
ze_result_t createMetricQuery(uint32_t index, zet_metric_query_handle_t *phMetricQuery) override;
148+
ze_result_t metricQueryCreate(uint32_t index, zet_metric_query_handle_t *phMetricQuery) override;
149149

150150
bool allocateGpuMemory();
151151

level_zero/tools/source/metrics/metric_streamer_imp.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include "level_zero/tools/source/metrics/metric_query_imp.h"
1515
#include "level_zero/tools/source/metrics/metric_source_oa.h"
1616

17+
using namespace MetricsLibraryApi;
18+
1719
namespace L0 {
1820

1921
ze_result_t OaMetricStreamerImp::readData(uint32_t maxReportCount, size_t *pRawDataSize,
@@ -336,4 +338,34 @@ ze_result_t OaMetricGroupImp::streamerOpen(
336338
return result;
337339
}
338340

341+
ze_result_t MetricStreamer::appendStreamerMarker(CommandList &commandList,
342+
zet_metric_streamer_handle_t hMetricStreamer,
343+
uint32_t value) {
344+
345+
DeviceImp *pDeviceImp = static_cast<DeviceImp *>(commandList.device);
346+
347+
if (pDeviceImp->metricContext->isImplicitScalingCapable()) {
348+
// Use one of the sub-device contexts to append to command list.
349+
pDeviceImp = static_cast<DeviceImp *>(pDeviceImp->subDevices[0]);
350+
pDeviceImp->metricContext->getMetricSource<OaMetricSourceImp>().getMetricsLibrary().enableWorkloadPartition();
351+
}
352+
353+
OaMetricSourceImp &metricSource = pDeviceImp->metricContext->getMetricSource<OaMetricSourceImp>();
354+
auto &metricsLibrary = metricSource.getMetricsLibrary();
355+
356+
const uint32_t streamerMarkerHighBitsShift = 25;
357+
358+
// Obtain gpu commands.
359+
CommandBufferData_1_0 commandBuffer = {};
360+
commandBuffer.CommandsType = ObjectType::MarkerStreamUser;
361+
commandBuffer.MarkerStreamUser.Value = value;
362+
commandBuffer.MarkerStreamUser.Reserved = (value >> streamerMarkerHighBitsShift);
363+
commandBuffer.Type = metricSource.isComputeUsed()
364+
? GpuCommandBufferType::Compute
365+
: GpuCommandBufferType::Render;
366+
367+
return metricsLibrary.getGpuCommands(commandList, commandBuffer) ? ZE_RESULT_SUCCESS
368+
: ZE_RESULT_ERROR_UNKNOWN;
369+
}
370+
339371
} // namespace L0

level_zero/tools/test/unit_tests/sources/metrics/mock_metric.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ struct Mock<MetricQueryPool> : public MetricQueryPool {
130130
Mock();
131131
~Mock() override;
132132

133-
MOCK_METHOD(ze_result_t, createMetricQuery, (uint32_t, zet_metric_query_handle_t *), (override));
133+
MOCK_METHOD(ze_result_t, metricQueryCreate, (uint32_t, zet_metric_query_handle_t *), (override));
134134
MOCK_METHOD(ze_result_t, destroy, (), (override));
135135
};
136136

0 commit comments

Comments
 (0)