From c724f35abbe02e7ecc3ba47c15793da9b793b322 Mon Sep 17 00:00:00 2001 From: Robert Krzemien Date: Thu, 13 Jan 2022 10:46:22 +0000 Subject: [PATCH] Fixed offsets in calculation for multidevices. Fixed metric types. Related-To: LOCI-2870 Signed-off-by: Robert Krzemien --- .../source/metrics/metric_enumeration_imp.cpp | 7 +++--- .../tools/source/metrics/metric_query_imp.cpp | 4 ++-- .../source/metrics/metric_streamer_imp.cpp | 4 ++-- .../metrics/test_metric_streamer_2.cpp | 24 +++++++++++++++---- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/level_zero/tools/source/metrics/metric_enumeration_imp.cpp b/level_zero/tools/source/metrics/metric_enumeration_imp.cpp index d45b82148d..35edef9908 100644 --- a/level_zero/tools/source/metrics/metric_enumeration_imp.cpp +++ b/level_zero/tools/source/metrics/metric_enumeration_imp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -379,8 +379,9 @@ ze_result_t MetricEnumeration::createMetrics(MetricsDiscovery::IMetricSet_1_5 &m pSourceInformationParams->InfoUnits); properties.tierNumber = 1; properties.metricType = getMetricType(pSourceInformationParams->InfoType); - // MetricsDiscovery information are always UINT64 - properties.resultType = ZET_VALUE_TYPE_UINT64; + properties.resultType = properties.metricType == ZET_METRIC_TYPE_FLAG + ? ZET_VALUE_TYPE_BOOL8 + : ZET_VALUE_TYPE_UINT64; auto pMetric = Metric::create(properties); UNRECOVERABLE_IF(pMetric == nullptr); diff --git a/level_zero/tools/source/metrics/metric_query_imp.cpp b/level_zero/tools/source/metrics/metric_query_imp.cpp index a9e83e88c9..b95878da7a 100644 --- a/level_zero/tools/source/metrics/metric_query_imp.cpp +++ b/level_zero/tools/source/metrics/metric_query_imp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -728,7 +728,7 @@ ze_result_t MetricQueryImp::getData(size_t *pRawDataSize, uint8_t *pRawData) { return tmpResult; } pRawDataSizesUnpacked[i] = static_cast(getDataSize); - pRawDataOffsetsUnpacked[i] = (i != 0) ? pRawDataOffsetsUnpacked[i - 1] + pRawDataSizesUnpacked[i] : 0; + pRawDataOffsetsUnpacked[i] = (i != 0) ? pRawDataOffsetsUnpacked[i - 1] + pRawDataSizesUnpacked[i - 1] : 0; *pRawDataSize += getDataSize; } } diff --git a/level_zero/tools/source/metrics/metric_streamer_imp.cpp b/level_zero/tools/source/metrics/metric_streamer_imp.cpp index 0dc64f7505..2a6868b83c 100644 --- a/level_zero/tools/source/metrics/metric_streamer_imp.cpp +++ b/level_zero/tools/source/metrics/metric_streamer_imp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2021 Intel Corporation + * Copyright (C) 2020-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -60,7 +60,7 @@ ze_result_t MetricStreamerImp::readData(uint32_t maxReportCount, size_t *pRawDat return result; } pRawDataSizesUnpacked[i] = static_cast(readSize); - pRawDataOffsetsUnpacked[i] = (i != 0) ? pRawDataOffsetsUnpacked[i - 1] + pRawDataSizesUnpacked[i] : 0; + pRawDataOffsetsUnpacked[i] = (i != 0) ? pRawDataOffsetsUnpacked[i - 1] + pRawDataSizesUnpacked[i - 1] : 0; *pRawDataSize += readSize; } } else { diff --git a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer_2.cpp b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer_2.cpp index e960d08278..d0e6f0fbf2 100644 --- a/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer_2.cpp +++ b/level_zero/tools/test/unit_tests/sources/metrics/test_metric_streamer_2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -621,7 +621,8 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerRe EXPECT_CALL(metricsConcurrentGroup, ReadIoStream(_, _, _)) .Times(subDeviceCount) - .WillRepeatedly(Return(TCompletionCode::CC_OK)); + .WillOnce(DoAll(::testing::SetArgPointee<0>(10), Return(TCompletionCode::CC_OK))) + .WillOnce(DoAll(::testing::SetArgPointee<0>(20), Return(TCompletionCode::CC_OK))); EXPECT_CALL(metricsConcurrentGroup, CloseIoStream()) .Times(subDeviceCount) @@ -648,9 +649,24 @@ TEST_F(MetricStreamerMultiDeviceTest, givenValidArgumentsWhenZetMetricStreamerRe std::vector rawData; rawData.resize(rawSize); - size_t rawRequestSize = rawSize; EXPECT_EQ(zetMetricStreamerReadData(streamerHandle, reportCount, &rawSize, rawData.data()), ZE_RESULT_SUCCESS); - EXPECT_EQ(rawSize, rawRequestSize); + EXPECT_EQ(rawSize, (metricsSetParams.RawReportSize * 30) + sizeof(MetricGroupCalculateHeader) + (2 * sizeof(uint32_t) * subDeviceCount)); + + MetricGroupCalculateHeader *rawDataHeader = reinterpret_cast(rawData.data()); + EXPECT_NE(rawDataHeader, nullptr); + for (uint32_t i = 0; i < subDeviceCount; ++i) { + uint32_t rawDataOffset = (reinterpret_cast(rawData.data() + rawDataHeader->rawDataOffsets))[i]; + uint32_t rawDataSize = (reinterpret_cast(rawData.data() + rawDataHeader->rawDataSizes))[i]; + + if (i == 0) { + EXPECT_EQ(rawDataOffset, 0u); + EXPECT_EQ(rawDataSize, metricsSetParams.RawReportSize * 10); + } else if (i == 1) { + EXPECT_EQ(rawDataOffset, metricsSetParams.RawReportSize * 10); + EXPECT_EQ(rawDataSize, metricsSetParams.RawReportSize * 20); + } + } + EXPECT_EQ(zetMetricStreamerClose(streamerHandle), ZE_RESULT_SUCCESS); }