mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-29 17:13:29 +08:00
feature: metrics group calculate properties
Resolves: NEO-13993 Signed-off-by: Matias Cabral <matias.a.cabral@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
1aa418ec15
commit
7cc2db3a32
@@ -48,5 +48,6 @@ const std::vector<std::pair<std::string, uint32_t>> DriverHandleImp::extensionsS
|
||||
|
||||
// Metrics Driver experimental extensions
|
||||
{ZET_INTEL_METRIC_APPEND_MARKER_EXP_NAME, ZET_INTEL_METRIC_APPEND_MARKER_EXP_VERSION_CURRENT},
|
||||
{ZET_INTEL_METRIC_SOURCE_ID_EXP_NAME, ZET_INTEL_METRIC_SOURCE_ID_EXP_VERSION_CURRENT}};
|
||||
{ZET_INTEL_METRIC_SOURCE_ID_EXP_NAME, ZET_INTEL_METRIC_SOURCE_ID_EXP_VERSION_CURRENT},
|
||||
{ZET_INTEL_METRIC_CALCULATE_EXP_NAME, ZET_INTEL_METRIC_CALCULATE_EXP_VERSION_CURRENT}};
|
||||
} // namespace L0
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
#define ZEX_STRUCTURE_COUNTER_BASED_EVENT_EXTERNAL_STORAGE_ALLOC_PROPERTIES (ze_structure_type_t)0x00030027
|
||||
|
||||
// Metric structure types
|
||||
#define ZET_INTEL_STRUCTURE_TYPE_METRIC_SOURCE_ID_EXP (zet_structure_type_t)0x0001000a // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
|
||||
#define ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATE_DESC_EXP (zet_structure_type_t)0x00010009 // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
|
||||
#define ZET_INTEL_STRUCTURE_TYPE_METRIC_SOURCE_ID_EXP (zet_structure_type_t)0x0001000a // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
|
||||
#define ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATE_DESC_EXP (zet_structure_type_t)0x00010009 // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
|
||||
#define ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_CALCULATE_EXP_PROPERTIES (zet_structure_type_t)0x00010008 // NOLINT(clang-analyzer-optin.core.EnumCastOutOfRange), NEO-12901
|
||||
|
||||
#endif
|
||||
|
||||
@@ -203,6 +203,17 @@ typedef enum _zet_intel_metric_calculate_exp_version_t {
|
||||
ZET_INTEL_METRIC_CALCULATE_EXP_VERSION_FORCE_UINT32 = 0x7fffffff
|
||||
} zet_intel_metric_calculate_exp_version_t;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Query an metric group calculate properties
|
||||
/// This structure can be passed in the 'pNext' of zet_metric_group_properties_t
|
||||
typedef struct _zet_intel_metric_group_calculate_properties_exp_t {
|
||||
zet_structure_type_t stype; ///< [in] type of this structure
|
||||
void *pNext; ///< [in][optional] must be null or a pointer to an extension-specific
|
||||
///< structure (i.e. contains stype and pNext).
|
||||
bool isTimeFilterSupported; ///< [out] Flag to indicate if the metric group supports time filtering for
|
||||
///< metrics calculation.
|
||||
} zet_intel_metric_group_calculate_properties_exp_t;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Handle of metric calculate operation
|
||||
typedef struct _zet_intel_metric_calculate_operation_exp_handle_t *zet_intel_metric_calculate_operation_exp_handle_t;
|
||||
|
||||
@@ -85,7 +85,9 @@ class MetricSource {
|
||||
uint32_t getType() const {
|
||||
return type;
|
||||
}
|
||||
virtual ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) = 0;
|
||||
virtual ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) = 0;
|
||||
virtual ze_result_t createMetricGroupsFromMetrics(std::vector<zet_metric_handle_t> &metricList,
|
||||
const char metricGroupNamePrefix[ZET_INTEL_MAX_METRIC_GROUP_NAME_PREFIX_EXP],
|
||||
const char description[ZET_MAX_METRIC_GROUP_DESCRIPTION],
|
||||
|
||||
@@ -208,7 +208,9 @@ ze_result_t IpSamplingMetricSourceImp::getConcurrentMetricGroups(std::vector<zet
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t IpSamplingMetricSourceImp::handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) {
|
||||
ze_result_t IpSamplingMetricSourceImp::handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) {
|
||||
ze_result_t retVal = ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
while (pNext) {
|
||||
auto extendedProperties = reinterpret_cast<zet_base_properties_t *>(pNext);
|
||||
@@ -229,7 +231,12 @@ ze_result_t IpSamplingMetricSourceImp::handleMetricGroupExtendedProperties(zet_m
|
||||
zet_metric_group_type_exp_t *groupType = reinterpret_cast<zet_metric_group_type_exp_t *>(extendedProperties);
|
||||
groupType->type = ZET_METRIC_GROUP_TYPE_EXP_FLAG_OTHER;
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
} else if (extendedProperties->stype == ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_CALCULATE_EXP_PROPERTIES) {
|
||||
auto calcProperties = reinterpret_cast<zet_intel_metric_group_calculate_properties_exp_t *>(extendedProperties);
|
||||
calcProperties->isTimeFilterSupported = false;
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
pNext = extendedProperties->pNext;
|
||||
}
|
||||
|
||||
@@ -258,7 +265,7 @@ ze_result_t IpSamplingMetricGroupImp::getProperties(zet_metric_group_properties_
|
||||
pProperties->pNext = pNext;
|
||||
|
||||
if (pNext) {
|
||||
return metricSource.handleMetricGroupExtendedProperties(toHandle(), pNext);
|
||||
return metricSource.handleMetricGroupExtendedProperties(toHandle(), pProperties, pNext);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
|
||||
@@ -40,7 +40,9 @@ class IpSamplingMetricSourceImp : public MetricSource {
|
||||
MetricIpSamplingOsInterface *getMetricOsInterface() { return metricIPSamplingpOsInterface.get(); }
|
||||
IpSamplingMetricStreamerImp *pActiveStreamer = nullptr;
|
||||
const MetricDeviceContext &getMetricDeviceContext() const { return metricDeviceContext; }
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) override;
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) override;
|
||||
ze_result_t createMetricGroupsFromMetrics(std::vector<zet_metric_handle_t> &metricList,
|
||||
const char metricGroupNamePrefix[ZET_INTEL_MAX_METRIC_GROUP_NAME_PREFIX_EXP],
|
||||
const char description[ZET_MAX_METRIC_GROUP_DESCRIPTION],
|
||||
|
||||
@@ -701,7 +701,7 @@ ze_result_t OaMetricGroupImp::getProperties(zet_metric_group_properties_t *pProp
|
||||
copyProperties(properties, *pProperties);
|
||||
pProperties->pNext = pNext;
|
||||
if (pNext) {
|
||||
status = metricSource.handleMetricGroupExtendedProperties(toHandle(), pNext);
|
||||
status = metricSource.handleMetricGroupExtendedProperties(toHandle(), pProperties, pNext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -203,7 +203,9 @@ ze_result_t OaMetricSourceImp::getConcurrentMetricGroups(std::vector<zet_metric_
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t OaMetricSourceImp::handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) {
|
||||
ze_result_t OaMetricSourceImp::handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) {
|
||||
ze_result_t retVal = ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
while (pNext) {
|
||||
auto extendedProperties = reinterpret_cast<zet_base_properties_t *>(pNext);
|
||||
@@ -234,6 +236,14 @@ ze_result_t OaMetricSourceImp::handleMetricGroupExtendedProperties(zet_metric_gr
|
||||
zet_metric_group_type_exp_t *groupType = reinterpret_cast<zet_metric_group_type_exp_t *>(extendedProperties);
|
||||
groupType->type = ZET_METRIC_GROUP_TYPE_EXP_FLAG_OTHER;
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
} else if (extendedProperties->stype == ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_CALCULATE_EXP_PROPERTIES) {
|
||||
auto calcProperties = reinterpret_cast<zet_intel_metric_group_calculate_properties_exp_t *>(extendedProperties);
|
||||
if (pBaseProperties->samplingType == ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED) {
|
||||
calcProperties->isTimeFilterSupported = true;
|
||||
} else {
|
||||
calcProperties->isTimeFilterSupported = false;
|
||||
}
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
}
|
||||
pNext = extendedProperties->pNext;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,9 @@ class OaMetricSourceImp : public MetricSource {
|
||||
ze_result_t metricProgrammableGet(uint32_t *pCount, zet_metric_programmable_exp_handle_t *phMetricProgrammables) override;
|
||||
ze_result_t getConcurrentMetricGroups(std::vector<zet_metric_group_handle_t> &hMetricGroups,
|
||||
uint32_t *pConcurrentGroupCount, uint32_t *pCountPerConcurrentGroup) override;
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) override;
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) override;
|
||||
bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const;
|
||||
bool isMetricGroupActivatedInHw() const;
|
||||
void setUseCompute(const bool useCompute);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2024 Intel Corporation
|
||||
* Copyright (C) 2024-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -50,7 +50,9 @@ class MockMetricIpSamplingSource : public IpSamplingMetricSourceImp {
|
||||
return createMetricGroupsFromMetricsReturn;
|
||||
}
|
||||
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) override {
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) override {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -20,7 +20,9 @@ class MockMetricSource : public L0::MetricSource {
|
||||
bool isAvailable() override { return isAvailableReturn; }
|
||||
ze_result_t appendMetricMemoryBarrier(L0::CommandList &commandList) override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup, void *pNext) override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t handleMetricGroupExtendedProperties(zet_metric_group_handle_t hMetricGroup,
|
||||
zet_metric_group_properties_t *pBaseProperties,
|
||||
void *pNext) override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t activateMetricGroupsAlreadyDeferred() override { return ZE_RESULT_ERROR_UNKNOWN; }
|
||||
ze_result_t metricProgrammableGet(uint32_t *pCount, zet_metric_programmable_exp_handle_t *phMetricProgrammables) override {
|
||||
|
||||
@@ -1328,6 +1328,39 @@ HWTEST2_F(MetricIpSamplingEnumerationTest, givenValidIPSamplingMetricGroupThenOA
|
||||
&excludedMetricsCount, phExcludedMetrics,
|
||||
&hCalculateOperation));
|
||||
}
|
||||
HWTEST2_F(MetricIpSamplingEnumerationTest, WhenReadingMetricGroupTimeCalculateFilterThenCorrectValueIsReturned, EustallSupportedPlatforms) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
for (auto device : testDevices) {
|
||||
|
||||
ze_device_properties_t deviceProps = {ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES_1_2, nullptr};
|
||||
device->getProperties(&deviceProps);
|
||||
|
||||
uint32_t metricGroupCount = 0;
|
||||
zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr);
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
|
||||
std::vector<zet_metric_group_handle_t> metricGroups;
|
||||
metricGroups.resize(metricGroupCount);
|
||||
|
||||
ASSERT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, metricGroups.data()), ZE_RESULT_SUCCESS);
|
||||
ASSERT_NE(metricGroups[0], nullptr);
|
||||
|
||||
zet_intel_metric_group_calculate_properties_exp_t metricGroupCalcProps{};
|
||||
metricGroupCalcProps.stype = ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_CALCULATE_EXP_PROPERTIES;
|
||||
metricGroupCalcProps.pNext = nullptr;
|
||||
metricGroupCalcProps.isTimeFilterSupported = true;
|
||||
|
||||
zet_metric_group_properties_t properties{};
|
||||
properties.pNext = &metricGroupCalcProps;
|
||||
|
||||
EXPECT_EQ(zetMetricGroupGetProperties(metricGroups[0], &properties), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(strcmp(properties.description, "EU stall sampling"), 0);
|
||||
EXPECT_EQ(strcmp(properties.name, "EuStallSampling"), 0);
|
||||
EXPECT_EQ(metricGroupCalcProps.isTimeFilterSupported, false);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
@@ -551,6 +551,83 @@ TEST_F(MetricEnumerationTest, GivenEnumerationIsSuccessfulWhenReadingMetricsFreq
|
||||
EXPECT_EQ(metricTimestampProperties.timestampValidBits, 32UL);
|
||||
}
|
||||
|
||||
TEST_F(MetricEnumerationTest, whenReadingMetricCroupCalculateParametersThenExpectedValuesAreReturned) {
|
||||
// Metrics Discovery device.
|
||||
metricsDeviceParams.ConcurrentGroupsCount = 1;
|
||||
|
||||
// Metrics Discovery concurrent group.
|
||||
Mock<IConcurrentGroup_1_13> metricsConcurrentGroup;
|
||||
TConcurrentGroupParams_1_13 metricsConcurrentGroupParams = {};
|
||||
metricsConcurrentGroupParams.MetricSetsCount = 1;
|
||||
metricsConcurrentGroupParams.SymbolName = "OA";
|
||||
metricsConcurrentGroupParams.Description = "OA description";
|
||||
metricsConcurrentGroupParams.IoMeasurementInformationCount = 1;
|
||||
|
||||
Mock<MetricsDiscovery::IEquation_1_0> ioReadEquation;
|
||||
MetricsDiscovery::TEquationElement_1_0 ioEquationElement = {};
|
||||
ioEquationElement.Type = MetricsDiscovery::EQUATION_ELEM_IMM_UINT64;
|
||||
ioEquationElement.ImmediateUInt64 = 0;
|
||||
|
||||
ioReadEquation.getEquationElement.push_back(&ioEquationElement);
|
||||
|
||||
Mock<MetricsDiscovery::IInformation_1_0> ioMeasurement;
|
||||
MetricsDiscovery::TInformationParams_1_0 oaInformation = {};
|
||||
oaInformation.SymbolName = "BufferOverflow";
|
||||
oaInformation.IoReadEquation = &ioReadEquation;
|
||||
metricsConcurrentGroup.GetIoMeasurementInformationResult = &ioMeasurement;
|
||||
ioMeasurement.GetParamsResult = &oaInformation;
|
||||
|
||||
// Metrics Discovery:: metric set.
|
||||
Mock<MetricsDiscovery::IMetricSet_1_13> metricsSet;
|
||||
MetricsDiscovery::TMetricSetParams_1_11 metricsSetParams = {};
|
||||
|
||||
// Set flags for Streamer and Query metric sets.
|
||||
metricsSetParams.ApiMask = MetricsDiscovery::API_TYPE_OCL | MetricsDiscovery::API_TYPE_IOSTREAM;
|
||||
;
|
||||
metricsSetParams.MetricsCount = 0;
|
||||
metricsSetParams.SymbolName = "Metric set name";
|
||||
metricsSetParams.ShortName = "Metric set description";
|
||||
|
||||
openMetricsAdapter();
|
||||
|
||||
setupDefaultMocksForMetricDevice(metricsDevice);
|
||||
|
||||
metricsDevice.getConcurrentGroupResults.push_back(&metricsConcurrentGroup);
|
||||
|
||||
metricsConcurrentGroup.GetParamsResult = &metricsConcurrentGroupParams;
|
||||
metricsConcurrentGroup.getMetricSetResult = &metricsSet;
|
||||
|
||||
metricsSet.GetParamsResult = &metricsSetParams;
|
||||
|
||||
// Metric group count.
|
||||
uint32_t metricGroupCount = 0;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 2u);
|
||||
|
||||
std::vector<zet_metric_group_handle_t> metricGroupsHandles(metricGroupCount);
|
||||
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, metricGroupsHandles.data()), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 2u);
|
||||
|
||||
zet_intel_metric_group_calculate_properties_exp_t metricGroupCalcProps{};
|
||||
metricGroupCalcProps.stype = ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_CALCULATE_EXP_PROPERTIES;
|
||||
metricGroupCalcProps.pNext = nullptr;
|
||||
metricGroupCalcProps.isTimeFilterSupported = false;
|
||||
|
||||
zet_metric_group_properties_t metricGroupProperties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, &metricGroupCalcProps};
|
||||
|
||||
// Metric group properties.
|
||||
EXPECT_EQ(zetMetricGroupGetProperties(metricGroupsHandles[0], &metricGroupProperties), ZE_RESULT_SUCCESS);
|
||||
// Streamer metric groups support time filtering.
|
||||
EXPECT_EQ(metricGroupProperties.samplingType, ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED);
|
||||
EXPECT_EQ(metricGroupCalcProps.isTimeFilterSupported, true);
|
||||
|
||||
EXPECT_EQ(zetMetricGroupGetProperties(metricGroupsHandles[1], &metricGroupProperties), ZE_RESULT_SUCCESS);
|
||||
// Query metric groups don't support time filtering.
|
||||
EXPECT_EQ(metricGroupProperties.samplingType, ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED);
|
||||
EXPECT_EQ(metricGroupCalcProps.isTimeFilterSupported, false);
|
||||
}
|
||||
|
||||
TEST_F(MetricEnumerationTest, GivenValidMetricGroupWhenReadingPropertiesAndIncorrectStructPassedThenFailsWithInvalidArgument) {
|
||||
|
||||
// Metrics Discovery device.
|
||||
|
||||
Reference in New Issue
Block a user