Skip to content

Commit a7f526c

Browse files
Metrics Append Streamer Marker Multi-Device Support
Added multi-device support for zetCommandListAppendMetricStreamerMarker Related-To: LOCI-2492 Signed-off-by: Joshua Santosh Ranjan <[email protected]>
1 parent f0070df commit a7f526c

File tree

4 files changed

+132
-5
lines changed

4 files changed

+132
-5
lines changed

level_zero/tools/source/metrics/metric_query_imp.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,13 @@ ze_result_t MetricQuery::appendStreamerMarker(CommandList &commandList,
769769
zet_metric_streamer_handle_t hMetricStreamer,
770770
uint32_t value) {
771771

772-
auto &metricContext = commandList.device->getMetricContext();
772+
DeviceImp *pDeviceImp = static_cast<DeviceImp *>(commandList.device);
773+
774+
if (pDeviceImp->isMultiDeviceCapable()) {
775+
// Use one of the sub-device contexts to append to command list.
776+
pDeviceImp = static_cast<DeviceImp *>(pDeviceImp->subDevices[0]);
777+
}
778+
auto &metricContext = pDeviceImp->getMetricContext();
773779
auto &metricsLibrary = metricContext.getMetricsLibrary();
774780

775781
const uint32_t streamerMarkerHighBitsShift = 25;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,6 @@ void MetricMultiDeviceContextFixture::SetUp() {
251251
mockMetricsLibrarySubDevices[i]->setMockedApi(&mockMetricsLibraryApi);
252252
mockMetricsLibrarySubDevices[i]->handle = new MockOsLibrary();
253253
}
254-
255254
// Metrics Discovery device common settings.
256255
metricsDeviceParams.Version.MajorNumber = MetricEnumeration::requiredMetricsDiscoveryMajorVersion;
257256
metricsDeviceParams.Version.MinorNumber = MetricEnumeration::requiredMetricsDiscoveryMinorVersion;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,13 @@ class MetricMultiDeviceContextFixture : public MultiDeviceFixture {
209209
std::unique_ptr<Mock<MetricEnumeration>> mockMetricEnumeration = nullptr;
210210
std::unique_ptr<Mock<MetricsLibrary>> mockMetricsLibrary = nullptr;
211211

212+
std::vector<std::unique_ptr<Mock<MetricEnumeration>>> mockMetricEnumerationSubDevices;
213+
std::vector<std::unique_ptr<Mock<MetricsLibrary>>> mockMetricsLibrarySubDevices;
214+
212215
// Mocked metrics library/discovery APIs.
213216
MockMetricsLibraryApi mockMetricsLibraryApi = {};
214217
MockMetricsDiscoveryApi mockMetricsDiscoveryApi = {};
215218

216-
std::vector<std::unique_ptr<Mock<MetricEnumeration>>> mockMetricEnumerationSubDevices;
217-
std::vector<std::unique_ptr<Mock<MetricsLibrary>>> mockMetricsLibrarySubDevices;
218-
219219
// Metrics discovery device
220220
Mock<IAdapterGroup_1_9> adapterGroup;
221221
Mock<IAdapter_1_9> adapter;

level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer.cpp

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,5 +1527,127 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerRe
15271527
EXPECT_EQ(zetMetricStreamerClose(streamerHandle), ZE_RESULT_SUCCESS);
15281528
}
15291529

1530+
TEST_F(MetricStreamerMultiDeviceTest, givenMultipleMarkerInsertionsWhenZetCommandListAppendMetricStreamerMarkerIsCalledThenReturnsSuccess) {
1531+
1532+
zet_device_handle_t metricDeviceHandle = devices[0]->toHandle();
1533+
auto &deviceImp = *static_cast<DeviceImp *>(devices[0]);
1534+
const uint32_t subDeviceCount = static_cast<uint32_t>(deviceImp.subDevices.size());
1535+
1536+
ze_event_handle_t eventHandle = {};
1537+
1538+
ze_result_t returnValue;
1539+
std::unique_ptr<L0::CommandList> commandList(CommandList::create(productFamily, devices[0], NEO::EngineGroupType::RenderCompute, 0u, returnValue));
1540+
1541+
zet_metric_streamer_handle_t streamerHandle = {};
1542+
zet_metric_streamer_desc_t streamerDesc = {};
1543+
1544+
streamerDesc.stype = ZET_STRUCTURE_TYPE_METRIC_STREAMER_DESC;
1545+
streamerDesc.notifyEveryNReports = 32768;
1546+
streamerDesc.samplingPeriod = 1000;
1547+
1548+
Mock<MetricGroup> metricGroup;
1549+
zet_metric_group_handle_t metricGroupHandle = metricGroup.toHandle();
1550+
zet_metric_group_properties_t metricGroupProperties = {};
1551+
1552+
metricsDeviceParams.ConcurrentGroupsCount = 1;
1553+
1554+
Mock<IConcurrentGroup_1_5> metricsConcurrentGroup;
1555+
TConcurrentGroupParams_1_0 metricsConcurrentGroupParams = {};
1556+
metricsConcurrentGroupParams.MetricSetsCount = 1;
1557+
metricsConcurrentGroupParams.SymbolName = "OA";
1558+
metricsConcurrentGroupParams.Description = "OA description";
1559+
1560+
Mock<MetricsDiscovery::IMetricSet_1_5> metricsSet;
1561+
MetricsDiscovery::TMetricSetParams_1_4 metricsSetParams = {};
1562+
metricsSetParams.ApiMask = MetricsDiscovery::API_TYPE_IOSTREAM;
1563+
metricsSetParams.MetricsCount = 0;
1564+
metricsSetParams.SymbolName = "Metric set name";
1565+
metricsSetParams.ShortName = "Metric set description";
1566+
metricsSetParams.RawReportSize = 256;
1567+
1568+
TypedValue_1_0 value = {};
1569+
value.Type = ValueType::Uint32;
1570+
value.ValueUInt32 = 64;
1571+
1572+
ContextHandle_1_0 contextHandle = {&value};
1573+
1574+
CommandBufferSize_1_0 commandBufferSize = {};
1575+
commandBufferSize.GpuMemorySize = 100;
1576+
1577+
openMetricsAdapter();
1578+
1579+
EXPECT_CALL(*mockMetricEnumerationSubDevices[0], isInitialized())
1580+
.Times(1)
1581+
.WillOnce(Return(true));
1582+
1583+
EXPECT_CALL(*mockMetricsLibrarySubDevices[0]->g_mockApi, MockCommandBufferGetSize(_, _))
1584+
.Times(10)
1585+
.WillRepeatedly(DoAll(::testing::SetArgPointee<1>(::testing::ByRef(commandBufferSize)), Return(StatusCode::Success)));
1586+
1587+
EXPECT_CALL(*mockMetricsLibrarySubDevices[0]->g_mockApi, MockCommandBufferGet(_))
1588+
.Times(10)
1589+
.WillRepeatedly(Return(StatusCode::Success));
1590+
1591+
EXPECT_CALL(*mockMetricsLibrarySubDevices[0], getContextData(_, _))
1592+
.Times(1)
1593+
.WillOnce(Return(true));
1594+
1595+
EXPECT_CALL(*mockMetricsLibrarySubDevices[0]->g_mockApi, MockContextCreate(_, _, _))
1596+
.Times(1)
1597+
.WillOnce(DoAll(::testing::SetArgPointee<2>(contextHandle), Return(StatusCode::Success)));
1598+
1599+
EXPECT_CALL(*mockMetricsLibrarySubDevices[0]->g_mockApi, MockContextDelete(_))
1600+
.Times(1)
1601+
.WillOnce(Return(StatusCode::Success));
1602+
1603+
EXPECT_CALL(metricsDevice, GetParams())
1604+
.WillRepeatedly(Return(&metricsDeviceParams));
1605+
1606+
EXPECT_CALL(metricsDevice, GetConcurrentGroup(_))
1607+
.Times(subDeviceCount)
1608+
.WillRepeatedly(Return(&metricsConcurrentGroup));
1609+
1610+
EXPECT_CALL(metricsConcurrentGroup, GetParams())
1611+
.Times(subDeviceCount)
1612+
.WillRepeatedly(Return(&metricsConcurrentGroupParams));
1613+
1614+
EXPECT_CALL(metricsConcurrentGroup, GetMetricSet(_))
1615+
.WillRepeatedly(Return(&metricsSet));
1616+
1617+
EXPECT_CALL(metricsSet, GetParams())
1618+
.WillRepeatedly(Return(&metricsSetParams));
1619+
1620+
EXPECT_CALL(metricsSet, SetApiFiltering(_))
1621+
.WillRepeatedly(Return(TCompletionCode::CC_OK));
1622+
1623+
EXPECT_CALL(metricsConcurrentGroup, OpenIoStream(_, _, _, _))
1624+
.Times(subDeviceCount)
1625+
.WillRepeatedly(Return(TCompletionCode::CC_OK));
1626+
1627+
EXPECT_CALL(metricsConcurrentGroup, CloseIoStream())
1628+
.Times(subDeviceCount)
1629+
.WillRepeatedly(Return(TCompletionCode::CC_OK));
1630+
1631+
uint32_t metricGroupCount = 0;
1632+
EXPECT_EQ(zetMetricGroupGet(metricDeviceHandle, &metricGroupCount, nullptr), ZE_RESULT_SUCCESS);
1633+
EXPECT_EQ(metricGroupCount, 1u);
1634+
1635+
EXPECT_EQ(zetMetricGroupGet(metricDeviceHandle, &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
1636+
EXPECT_EQ(metricGroupCount, 1u);
1637+
EXPECT_NE(metricGroupHandle, nullptr);
1638+
1639+
EXPECT_EQ(zetMetricGroupGetProperties(metricGroupHandle, &metricGroupProperties), ZE_RESULT_SUCCESS);
1640+
EXPECT_EQ(zetContextActivateMetricGroups(context->toHandle(), metricDeviceHandle, 1, &metricGroupHandle), ZE_RESULT_SUCCESS);
1641+
EXPECT_EQ(zetMetricStreamerOpen(context->toHandle(), metricDeviceHandle, metricGroupHandle, &streamerDesc, eventHandle, &streamerHandle), ZE_RESULT_SUCCESS);
1642+
EXPECT_NE(streamerHandle, nullptr);
1643+
1644+
std::array<uint32_t, 10> markerValues = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
1645+
for (auto &markerValue : markerValues) {
1646+
EXPECT_EQ(zetCommandListAppendMetricStreamerMarker(commandList->toHandle(), streamerHandle, markerValue), ZE_RESULT_SUCCESS);
1647+
}
1648+
1649+
EXPECT_EQ(zetMetricStreamerClose(streamerHandle), ZE_RESULT_SUCCESS);
1650+
}
1651+
15301652
} // namespace ult
15311653
} // namespace L0

0 commit comments

Comments
 (0)