mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 14:55:24 +08:00
feature: calcOp supports metric scopes
Resolves: NEO-14417 Signed-off-by: Matias Cabral <matias.a.cabral@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
88b2fb60a6
commit
1197ec47bc
@@ -34,13 +34,13 @@ void MetricSource::getMetricGroupSourceIdProperty(zet_base_properties_t *propert
|
||||
|
||||
void MetricSource::initComputeMetricScopes(MetricDeviceContext &metricDeviceContext) {
|
||||
|
||||
auto createScope = [&metricDeviceContext](const std::string &name, const std::string &desc, uint32_t id) {
|
||||
auto createScope = [&metricDeviceContext](const std::string &name, const std::string &desc, uint32_t id, bool aggregated) {
|
||||
zet_intel_metric_scope_properties_exp_t scopeProperties = {ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP, nullptr};
|
||||
scopeProperties.iD = id;
|
||||
snprintf(scopeProperties.name, ZET_INTEL_MAX_METRIC_SCOPE_NAME_EXP, "%s", name.c_str());
|
||||
snprintf(scopeProperties.description, ZET_INTEL_MAX_METRIC_SCOPE_NAME_EXP, "%s", desc.c_str());
|
||||
|
||||
auto metricScopeImp = MetricScopeImp::create(scopeProperties);
|
||||
auto metricScopeImp = MetricScopeImp::create(scopeProperties, aggregated);
|
||||
DEBUG_BREAK_IF(metricScopeImp == nullptr);
|
||||
metricDeviceContext.addMetricScope(std::move(metricScopeImp));
|
||||
};
|
||||
@@ -50,25 +50,25 @@ void MetricSource::initComputeMetricScopes(MetricDeviceContext &metricDeviceCont
|
||||
auto deviceImp = static_cast<DeviceImp *>(&metricDeviceContext.getDevice());
|
||||
uint32_t subDeviceCount = deviceImp->numSubDevices;
|
||||
for (uint32_t i = 0; i < subDeviceCount; i++) {
|
||||
std::string scopeName = "COMPUTE_TILE_" + std::to_string(i);
|
||||
std::string scopeDesc = "Metrics results for tile " + std::to_string(i);
|
||||
std::string scopeName = std::string(computeScopeNamePrefix) + std::to_string(i);
|
||||
std::string scopeDesc = std::string(computeScopeDescriptionPrefix) + std::to_string(i);
|
||||
|
||||
createScope(scopeName, scopeDesc, i);
|
||||
createScope(scopeName, scopeDesc, i, false);
|
||||
}
|
||||
|
||||
auto &l0GfxCoreHelper = metricDeviceContext.getDevice().getNEODevice()->getRootDeviceEnvironment().getHelper<L0GfxCoreHelper>();
|
||||
if (l0GfxCoreHelper.supportMetricsAggregation()) {
|
||||
std::string scopeName = "DEVICE_AGGREGATED";
|
||||
std::string scopeDesc = "Metrics results aggregated at device level";
|
||||
std::string scopeName(aggregatedScopeName);
|
||||
std::string scopeDesc(aggregatedScopeDescription);
|
||||
|
||||
createScope(scopeName, scopeDesc, subDeviceCount);
|
||||
createScope(scopeName, scopeDesc, subDeviceCount, true);
|
||||
}
|
||||
} else {
|
||||
auto subDeviceIndex = metricDeviceContext.getSubDeviceIndex();
|
||||
std::string scopeName = "COMPUTE_TILE_" + std::to_string(subDeviceIndex);
|
||||
std::string scopeDesc = "Metrics results for tile " + std::to_string(subDeviceIndex);
|
||||
std::string scopeName = std::string(computeScopeNamePrefix) + std::to_string(subDeviceIndex);
|
||||
std::string scopeDesc = std::string(computeScopeDescriptionPrefix) + std::to_string(subDeviceIndex);
|
||||
|
||||
createScope(scopeName, scopeDesc, subDeviceIndex);
|
||||
createScope(scopeName, scopeDesc, subDeviceIndex, false);
|
||||
}
|
||||
|
||||
metricDeviceContext.setComputeMetricScopeInitialized();
|
||||
@@ -646,12 +646,38 @@ ze_result_t MetricDeviceContext::calcOperationCreate(zet_context_handle_t hConte
|
||||
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
if (pCalculationDesc->metricScopesCount == 0) {
|
||||
METRICS_LOG_ERR("%s", "Must define at least one metric scope");
|
||||
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
std::vector<MetricScopeImp *> metricScopes;
|
||||
bool aggregatedScopeProvided = false;
|
||||
for (uint32_t i = 0; i < pCalculationDesc->metricScopesCount; i++) {
|
||||
metricScopes.push_back(static_cast<MetricScopeImp *>(MetricScope::fromHandle(pCalculationDesc->phMetricScopes[i])));
|
||||
if (metricScopes.back()->isAggregated()) {
|
||||
aggregatedScopeProvided = true;
|
||||
}
|
||||
}
|
||||
|
||||
std::sort(metricScopes.begin(), metricScopes.end());
|
||||
metricScopes.erase(std::unique(metricScopes.begin(), metricScopes.end()), metricScopes.end());
|
||||
|
||||
// If aggregated scope is provided, make it be listed first.
|
||||
if (aggregatedScopeProvided) {
|
||||
auto aggregatedScopeIt = std::find_if(metricScopes.begin(), metricScopes.end(),
|
||||
[](const zet_intel_metric_scope_exp_handle_t &scope) {
|
||||
return static_cast<MetricScopeImp *>(MetricScope::fromHandle(scope))->isAggregated();
|
||||
});
|
||||
std::swap(metricScopes[0], *aggregatedScopeIt);
|
||||
}
|
||||
|
||||
MetricSource &metricSource = (metricGroupImp) ? metricGroupImp->getMetricSource() : metricImp->getMetricSource(); // NOLINT(clang-analyzer-core.CallAndMessage)
|
||||
return metricSource.calcOperationCreate(*this, pCalculationDesc, phCalculationOperation);
|
||||
return metricSource.calcOperationCreate(*this, pCalculationDesc, metricScopes, phCalculationOperation);
|
||||
}
|
||||
|
||||
std::unique_ptr<MetricScopeImp> MetricScopeImp::create(zet_intel_metric_scope_properties_exp_t &scopeProperties) {
|
||||
return std::make_unique<MetricScopeImp>(scopeProperties);
|
||||
std::unique_ptr<MetricScopeImp> MetricScopeImp::create(zet_intel_metric_scope_properties_exp_t &scopeProperties, bool aggregated) {
|
||||
return std::make_unique<MetricScopeImp>(scopeProperties, aggregated);
|
||||
}
|
||||
|
||||
void MetricDeviceContext::initMetricScopes() {
|
||||
@@ -973,15 +999,15 @@ MetricImp *HomogeneousMultiDeviceMetricCreated::create(MetricSource &metricSourc
|
||||
|
||||
ze_result_t MetricCalcOpImp::getMetricsFromCalcOp(uint32_t *pCount, zet_metric_handle_t *phMetrics, bool isExcludedMetrics) {
|
||||
if (*pCount == 0) {
|
||||
*pCount = isExcludedMetrics ? excludedMetricCount : metricInReportCount;
|
||||
*pCount = isExcludedMetrics ? getExcludedMetricsCount() : getMetricsInReportCount();
|
||||
return ZE_RESULT_SUCCESS;
|
||||
} else if (*pCount < (isExcludedMetrics ? excludedMetricCount : metricInReportCount)) {
|
||||
} else if (*pCount < (isExcludedMetrics ? getExcludedMetricsCount() : getMetricsInReportCount())) {
|
||||
METRICS_LOG_ERR("%s", "Metric can't be smaller than report size");
|
||||
*pCount = 0;
|
||||
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
*pCount = isExcludedMetrics ? excludedMetricCount : metricInReportCount;
|
||||
*pCount = isExcludedMetrics ? getExcludedMetricsCount() : getMetricsInReportCount();
|
||||
for (uint32_t index = 0; index < *pCount; index++) {
|
||||
phMetrics[index] = isExcludedMetrics ? excludedMetrics[index]->toHandle() : metricsInReport[index]->toHandle();
|
||||
}
|
||||
|
||||
@@ -107,6 +107,7 @@ class MetricSource {
|
||||
virtual ze_result_t appendMarker(zet_command_list_handle_t hCommandList, zet_metric_group_handle_t hMetricGroup, uint32_t value) = 0;
|
||||
virtual ze_result_t calcOperationCreate(MetricDeviceContext &metricDeviceContext,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) = 0;
|
||||
virtual bool canDisable() = 0;
|
||||
virtual void initMetricScopes(MetricDeviceContext &metricDeviceContext) = 0;
|
||||
@@ -479,26 +480,33 @@ struct MetricCalcOp : _zet_intel_metric_calculation_operation_exp_handle_t {
|
||||
|
||||
struct MetricCalcOpImp : public MetricCalcOp {
|
||||
~MetricCalcOpImp() override = default;
|
||||
MetricCalcOpImp(bool multiDevice, const std::vector<MetricImp *> &inMetricsInReport,
|
||||
uint32_t inExcludedMetricsCount = 0, const std::vector<MetricImp *> &inExcludedMetrics = std::vector<MetricImp *>())
|
||||
: isMultiDevice(multiDevice), metricInReportCount(static_cast<uint32_t>(inMetricsInReport.size())),
|
||||
metricsInReport(inMetricsInReport), excludedMetricCount(inExcludedMetricsCount),
|
||||
excludedMetrics(inExcludedMetrics) {}
|
||||
MetricCalcOpImp(bool multiDevice,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
const std::vector<MetricImp *> &metricsInReport,
|
||||
const std::vector<MetricImp *> &excludedMetrics = std::vector<MetricImp *>())
|
||||
: isMultiDevice(multiDevice),
|
||||
metricScopes(metricScopes),
|
||||
metricsInReport(metricsInReport),
|
||||
excludedMetrics(excludedMetrics) {}
|
||||
|
||||
bool isRootDevice() { return isMultiDevice; }
|
||||
ze_result_t getReportFormat(uint32_t *pCount, zet_metric_handle_t *phMetrics) override;
|
||||
ze_result_t getExcludedMetrics(uint32_t *pCount, zet_metric_handle_t *phMetrics) override;
|
||||
uint32_t getMetricsInReportCount() { return metricInReportCount; };
|
||||
uint32_t getMetricsInReportCount() { return static_cast<uint32_t>(metricsInReport.size()); };
|
||||
uint32_t getExcludedMetricsCount() { return static_cast<uint32_t>(excludedMetrics.size()); };
|
||||
|
||||
protected:
|
||||
ze_result_t getMetricsFromCalcOp(uint32_t *pCount, zet_metric_handle_t *phMetrics, bool isExcludedMetrics = false);
|
||||
bool isMultiDevice = false;
|
||||
uint32_t metricInReportCount = 0;
|
||||
std::vector<MetricScopeImp *> metricScopes{};
|
||||
std::vector<MetricImp *> metricsInReport{};
|
||||
uint32_t excludedMetricCount = 0;
|
||||
std::vector<MetricImp *> excludedMetrics{};
|
||||
};
|
||||
|
||||
static constexpr std::string_view computeScopeNamePrefix = "COMPUTE_TILE_";
|
||||
static constexpr std::string_view computeScopeDescriptionPrefix = "Metrics results for tile ";
|
||||
static constexpr std::string_view aggregatedScopeName = "DEVICE_AGGREGATED";
|
||||
static constexpr std::string_view aggregatedScopeDescription = "Metrics results aggregated at device level";
|
||||
struct MetricScope : _zet_intel_metric_scope_exp_handle_t {
|
||||
virtual ~MetricScope() = default;
|
||||
MetricScope() {}
|
||||
@@ -511,13 +519,15 @@ struct MetricScope : _zet_intel_metric_scope_exp_handle_t {
|
||||
|
||||
struct MetricScopeImp : public MetricScope {
|
||||
~MetricScopeImp() override = default;
|
||||
MetricScopeImp(zet_intel_metric_scope_properties_exp_t &properties) : properties(properties){};
|
||||
MetricScopeImp(zet_intel_metric_scope_properties_exp_t &properties, bool aggregated) : properties(properties), aggregated(aggregated) {}
|
||||
|
||||
virtual ze_result_t getProperties(zet_intel_metric_scope_properties_exp_t *pProperties);
|
||||
static std::unique_ptr<MetricScopeImp> create(zet_intel_metric_scope_properties_exp_t &scopeProperties);
|
||||
static std::unique_ptr<MetricScopeImp> create(zet_intel_metric_scope_properties_exp_t &scopeProperties, bool aggregated);
|
||||
bool isAggregated() const { return aggregated; }
|
||||
|
||||
private:
|
||||
zet_intel_metric_scope_properties_exp_t properties;
|
||||
bool aggregated = false;
|
||||
};
|
||||
|
||||
// MetricGroup.
|
||||
|
||||
@@ -274,11 +274,12 @@ ze_result_t IpSamplingMetricSourceImp::handleMetricGroupExtendedProperties(zet_m
|
||||
|
||||
ze_result_t IpSamplingMetricSourceImp::calcOperationCreate(MetricDeviceContext &metricDeviceContext,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) {
|
||||
ze_result_t status = ZE_RESULT_ERROR_UNKNOWN;
|
||||
|
||||
bool isMultiDevice = (metricDeviceContext.isImplicitScalingCapable()) ? true : false;
|
||||
status = IpSamplingMetricCalcOpImp::create(*this, pCalculationDesc, isMultiDevice, phCalculationOperation);
|
||||
status = IpSamplingMetricCalcOpImp::create(isMultiDevice, metricScopes, *this, pCalculationDesc, phCalculationOperation);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ class IpSamplingMetricSourceImp : public MetricSource {
|
||||
}
|
||||
ze_result_t calcOperationCreate(MetricDeviceContext &metricDeviceContext,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) override;
|
||||
|
||||
uint32_t metricSourceCount = 0;
|
||||
|
||||
@@ -105,9 +105,10 @@ uint32_t IpSamplingMetricStreamerImp::getMaxSupportedReportCount() {
|
||||
return ipSamplingSource.getMetricOsInterface()->getRequiredBufferSize(UINT32_MAX) / unitReportSize;
|
||||
}
|
||||
|
||||
ze_result_t IpSamplingMetricCalcOpImp::create(IpSamplingMetricSourceImp &metricSource,
|
||||
ze_result_t IpSamplingMetricCalcOpImp::create(bool isMultiDevice,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
IpSamplingMetricSourceImp &metricSource,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
bool isMultiDevice,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) {
|
||||
|
||||
// There is only one valid metric group in IP sampling and time filtering is not supported
|
||||
@@ -140,9 +141,8 @@ ze_result_t IpSamplingMetricCalcOpImp::create(IpSamplingMetricSourceImp &metricS
|
||||
}
|
||||
}
|
||||
|
||||
auto calcOp = new IpSamplingMetricCalcOpImp(static_cast<uint32_t>(hMetrics.size()),
|
||||
metricsInReport, includedMetricIndexes,
|
||||
isMultiDevice);
|
||||
auto calcOp = new IpSamplingMetricCalcOpImp(isMultiDevice, metricScopes, static_cast<uint32_t>(hMetrics.size()),
|
||||
metricsInReport, includedMetricIndexes);
|
||||
*phCalculationOperation = calcOp->toHandle();
|
||||
ze_result_t status = ZE_RESULT_SUCCESS;
|
||||
if ((pCalculationDesc->timeWindowsCount > 0) || (pCalculationDesc->timeAggregationWindow != 0)) {
|
||||
|
||||
@@ -48,17 +48,20 @@ struct MultiDeviceIpSamplingMetricStreamerImp : public IpSamplingMetricStreamerB
|
||||
};
|
||||
|
||||
struct IpSamplingMetricCalcOpImp : public MetricCalcOpImp {
|
||||
IpSamplingMetricCalcOpImp(uint32_t inCachedMetricsCount,
|
||||
IpSamplingMetricCalcOpImp(bool multidevice,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
uint32_t cachedMetricsCount,
|
||||
std::vector<MetricImp *> &metricsInReport,
|
||||
std::vector<uint32_t> &inputIncludedMetricIndexes, bool multidevice)
|
||||
: MetricCalcOpImp(multidevice, metricsInReport),
|
||||
cachedMetricsCount(inCachedMetricsCount),
|
||||
includedMetricIndexes(inputIncludedMetricIndexes) {}
|
||||
std::vector<uint32_t> &includedMetricIndexes)
|
||||
: MetricCalcOpImp(multidevice, metricScopes, metricsInReport, std::vector<MetricImp *>()),
|
||||
cachedMetricsCount(cachedMetricsCount),
|
||||
includedMetricIndexes(includedMetricIndexes) {}
|
||||
|
||||
~IpSamplingMetricCalcOpImp() override{};
|
||||
static ze_result_t create(IpSamplingMetricSourceImp &metricSource,
|
||||
static ze_result_t create(bool isMultiDevice,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
IpSamplingMetricSourceImp &metricSource,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
bool isMultiDevice,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation);
|
||||
ze_result_t destroy() override;
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ class OaMetricSourceImp : public MetricSource {
|
||||
zet_metric_group_handle_t *pMetricGroupHandle);
|
||||
ze_result_t calcOperationCreate(MetricDeviceContext &metricDeviceContext,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) override {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
@@ -76,5 +76,58 @@ void MetricIpSamplingFixture::TearDown() {
|
||||
globalDriverHandles->clear();
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateBaseFixture::initCalcDescriptor() {
|
||||
zet_intel_metric_scope_properties_exp_t scopeProperties{};
|
||||
scopeProperties.stype = ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP;
|
||||
scopeProperties.pNext = nullptr;
|
||||
|
||||
mockMetricScope = new MockMetricScope(scopeProperties, false);
|
||||
hMockScope = mockMetricScope->toHandle();
|
||||
|
||||
calculationDesc.stype = ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP;
|
||||
calculationDesc.pNext = nullptr; // pNext
|
||||
calculationDesc.metricGroupCount = 0; // metricGroupCount
|
||||
calculationDesc.phMetricGroups = nullptr; // phMetricGroups
|
||||
calculationDesc.metricCount = 0; // metricCount
|
||||
calculationDesc.phMetrics = nullptr; // phMetrics
|
||||
calculationDesc.timeWindowsCount = 0; // timeWindowsCount
|
||||
calculationDesc.pCalculationTimeWindows = nullptr; // pCalculationTimeWindows
|
||||
calculationDesc.timeAggregationWindow = 0; // timeAggregationWindow
|
||||
calculationDesc.metricScopesCount = 1; // metricScopesCount
|
||||
calculationDesc.phMetricScopes = &hMockScope; // phMetricScopes
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateBaseFixture::cleanupCalcDescriptor() {
|
||||
delete mockMetricScope;
|
||||
hMockScope = nullptr;
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateMultiDevFixture::SetUp() {
|
||||
MetricIpSamplingMultiDevFixture::SetUp();
|
||||
initCalcDescriptor();
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateMultiDevFixture::TearDown() {
|
||||
MetricIpSamplingMultiDevFixture::TearDown();
|
||||
cleanupCalcDescriptor();
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateSingleDevFixture::SetUp() {
|
||||
MetricIpSamplingFixture::SetUp();
|
||||
initCalcDescriptor();
|
||||
|
||||
device->getMetricDeviceContext().enableMetricApi();
|
||||
uint32_t metricGroupCount = 1;
|
||||
zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle);
|
||||
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
}
|
||||
|
||||
void MetricIpSamplingCalculateSingleDevFixture::TearDown() {
|
||||
MetricIpSamplingFixture::TearDown();
|
||||
cleanupCalcDescriptor();
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
|
||||
#include "level_zero/tools/source/metrics/metric_ip_sampling_source.h"
|
||||
#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h"
|
||||
#include <level_zero/zet_api.h>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
@@ -223,11 +224,25 @@ class MetricIpSamplingCalculateBaseFixture {
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}}};
|
||||
|
||||
MockMetricScope *mockMetricScope;
|
||||
zet_intel_metric_scope_exp_handle_t hMockScope = nullptr;
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{};
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
|
||||
void initCalcDescriptor();
|
||||
void cleanupCalcDescriptor();
|
||||
};
|
||||
|
||||
struct MetricIpSamplingCalculateSingleDevFixture : public MetricIpSamplingCalculateBaseFixture, MetricIpSamplingFixture {
|
||||
public:
|
||||
void SetUp() override;
|
||||
void TearDown() override;
|
||||
};
|
||||
struct MetricIpSamplingCalculateMultiDevFixture : public MetricIpSamplingCalculateBaseFixture, MetricIpSamplingMultiDevFixture {
|
||||
public:
|
||||
void SetUp() override;
|
||||
void TearDown() override;
|
||||
};
|
||||
|
||||
} // namespace ult
|
||||
|
||||
@@ -51,6 +51,7 @@ class MockMetricSource : public L0::MetricSource {
|
||||
|
||||
ze_result_t calcOperationCreate(MetricDeviceContext &metricDeviceContext,
|
||||
zet_intel_metric_calculation_exp_desc_t *pCalculationDesc,
|
||||
const std::vector<MetricScopeImp *> &metricScopes,
|
||||
zet_intel_metric_calculation_operation_exp_handle_t *phCalculationOperation) override {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
@@ -161,9 +162,10 @@ class MockMetric : public L0::MetricImp {
|
||||
class MockMetricCalcOp : public MetricCalcOpImp {
|
||||
public:
|
||||
~MockMetricCalcOp() override = default;
|
||||
MockMetricCalcOp(bool multiDevice, const std::vector<MetricImp *> &inMetricsInReport,
|
||||
uint32_t inExcludedMetricsCount, const std::vector<MetricImp *> &inExcludedMetrics)
|
||||
: MetricCalcOpImp(multiDevice, inMetricsInReport, inExcludedMetricsCount, inExcludedMetrics) {}
|
||||
MockMetricCalcOp(bool multiDevice, const std::vector<MetricScopeImp *> &metricScopes,
|
||||
const std::vector<MetricImp *> &metricsInReport,
|
||||
const std::vector<MetricImp *> &excludedMetrics)
|
||||
: MetricCalcOpImp(multiDevice, metricScopes, metricsInReport, excludedMetrics) {}
|
||||
|
||||
ze_result_t destroy() override {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
@@ -199,8 +201,8 @@ class MockMetricDeviceContext : public MetricDeviceContext {
|
||||
class MockMetricScope : public MetricScopeImp {
|
||||
public:
|
||||
~MockMetricScope() override = default;
|
||||
MockMetricScope(zet_intel_metric_scope_properties_exp_t &properties)
|
||||
: MetricScopeImp(properties) {}
|
||||
MockMetricScope(zet_intel_metric_scope_properties_exp_t &properties, bool aggregated)
|
||||
: MetricScopeImp(properties, aggregated) {}
|
||||
ze_result_t getProperties(zet_intel_metric_scope_properties_exp_t *pProperties) override {
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
#include "shared/test/common/test_macros/test_base.h"
|
||||
|
||||
#include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h"
|
||||
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
|
||||
#include "level_zero/include/level_zero/zet_intel_gpu_metric.h"
|
||||
#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h"
|
||||
@@ -50,7 +52,10 @@ class CalcOperationFixture : public DeviceFixture,
|
||||
void TearDown() override;
|
||||
MockMetricSource mockMetricSource{};
|
||||
MockMetricGroup *mockMetricGroup;
|
||||
zet_metric_group_handle_t phMetricGroup = nullptr;
|
||||
zet_metric_group_handle_t hMetricGroup = nullptr;
|
||||
|
||||
MockMetricScope *mockMetricScope;
|
||||
zet_intel_metric_scope_exp_handle_t hMetricScope = nullptr;
|
||||
|
||||
DebugManagerStateRestore restorer;
|
||||
};
|
||||
@@ -58,12 +63,22 @@ class CalcOperationFixture : public DeviceFixture,
|
||||
void CalcOperationFixture::SetUp() {
|
||||
DeviceFixture::setUp();
|
||||
mockMetricGroup = new MockMetricGroup(mockMetricSource);
|
||||
phMetricGroup = mockMetricGroup->toHandle();
|
||||
hMetricGroup = mockMetricGroup->toHandle();
|
||||
|
||||
zet_intel_metric_scope_properties_exp_t scopeProperties{};
|
||||
scopeProperties.stype = ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP;
|
||||
scopeProperties.pNext = nullptr;
|
||||
|
||||
mockMetricScope = new MockMetricScope(scopeProperties, false);
|
||||
hMetricScope = mockMetricScope->toHandle();
|
||||
}
|
||||
|
||||
void CalcOperationFixture::TearDown() {
|
||||
DeviceFixture::tearDown();
|
||||
delete mockMetricGroup;
|
||||
delete mockMetricScope;
|
||||
hMetricGroup = nullptr;
|
||||
hMetricScope = nullptr;
|
||||
}
|
||||
|
||||
TEST_F(CalcOperationFixture, WhenCreatingCalcOpAndInvalidParamsPassedThenErrorIsHandled) {
|
||||
@@ -71,14 +86,16 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpAndInvalidParamsPassedThenErrorIs
|
||||
// Aggregation window is zero
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
0, // metricGroupCount
|
||||
nullptr, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&hMetricGroup, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&hMetricScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
@@ -98,7 +115,7 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedSourcesThenErrorIsReturn
|
||||
MockMetricGroup mockMetricGroup2(mockMetricSource2);
|
||||
|
||||
// metric groups from different source
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{phMetricGroup, mockMetricGroup2.toHandle()};
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{hMetricGroup, mockMetricGroup2.toHandle()};
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
@@ -109,6 +126,8 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedSourcesThenErrorIsReturn
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
1000, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&hMetricScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
@@ -122,7 +141,7 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedSourcesThenErrorIsReturn
|
||||
std::vector<zet_metric_handle_t> metrics{mockMetric.toHandle(), mockMetric2.toHandle()};
|
||||
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &phMetricGroup;
|
||||
calculationDesc.phMetricGroups = &hMetricGroup;
|
||||
calculationDesc.metricCount = 2;
|
||||
calculationDesc.phMetrics = metrics.data();
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zetIntelMetricCalculationOperationCreateExp(context,
|
||||
@@ -142,7 +161,7 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedHierarchiesThenErrorIsRe
|
||||
mockMetricGroup2.isMultiDevice = true;
|
||||
|
||||
// metric groups from different hierarchy
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{phMetricGroup, mockMetricGroup2.toHandle()};
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{hMetricGroup, mockMetricGroup2.toHandle()};
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
@@ -153,6 +172,8 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedHierarchiesThenErrorIsRe
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
1000, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&hMetricScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
@@ -166,7 +187,7 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpWithMixedHierarchiesThenErrorIsRe
|
||||
std::vector<zet_metric_handle_t> metrics{mockMetric.toHandle(), mockMetric2.toHandle()};
|
||||
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &phMetricGroup;
|
||||
calculationDesc.phMetricGroups = &hMetricGroup;
|
||||
calculationDesc.metricCount = 2;
|
||||
calculationDesc.phMetrics = metrics.data();
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zetIntelMetricCalculationOperationCreateExp(context,
|
||||
@@ -178,7 +199,7 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpUseTheSourceFromMetricGroupOrMetr
|
||||
|
||||
MockMetricGroup mockMetricGroup2(mockMetricSource);
|
||||
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{phMetricGroup, mockMetricGroup2.toHandle()};
|
||||
std::vector<zet_metric_group_handle_t> metricGroups{hMetricGroup, mockMetricGroup2.toHandle()};
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
@@ -189,6 +210,8 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpUseTheSourceFromMetricGroupOrMetr
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
1000, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&hMetricScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
@@ -210,10 +233,11 @@ TEST_F(CalcOperationFixture, WhenCreatingCalcOpUseTheSourceFromMetricGroupOrMetr
|
||||
|
||||
TEST_F(CalcOperationFixture, WhenCreatingCalcOpObjectToAndFromHandleBaseClassWorkAsExpected) {
|
||||
std::vector<MetricImp *> mockMetricsInReport{};
|
||||
uint32_t mockExcludedMetricCount = 0;
|
||||
std::vector<MetricImp *> mockExcludedMetrics{};
|
||||
|
||||
MockMetricCalcOp mockMetricCalcOp(false, mockMetricsInReport, mockExcludedMetricCount, mockExcludedMetrics);
|
||||
std::vector<MetricScopeImp *> metricScopes{mockMetricScope};
|
||||
|
||||
MockMetricCalcOp mockMetricCalcOp(false, metricScopes, mockMetricsInReport, mockExcludedMetrics);
|
||||
auto hMockCalcOp = mockMetricCalcOp.toHandle();
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetIntelMetricCalculationOperationDestroyExp(hMockCalcOp));
|
||||
@@ -228,11 +252,12 @@ TEST_F(CalcOperationFixture, WhenGettingMetricsInReportAndExcludedMetricsThenThe
|
||||
mockMetricsInReport.push_back(&mockMetricInReport);
|
||||
|
||||
std::vector<MetricImp *> mockExcludedMetrics{};
|
||||
uint32_t mockExcludedMetricCount = 1;
|
||||
MockMetric mockExcludedMetric(mockMetricSource);
|
||||
mockExcludedMetrics.push_back(&mockExcludedMetric);
|
||||
|
||||
MockMetricCalcOp mockMetricCalcOp(false, mockMetricsInReport, mockExcludedMetricCount, mockExcludedMetrics);
|
||||
std::vector<MetricScopeImp *> metricScopes{mockMetricScope};
|
||||
|
||||
MockMetricCalcOp mockMetricCalcOp(false, metricScopes, mockMetricsInReport, mockExcludedMetrics);
|
||||
uint32_t metricCount = 0;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationGetReportFormatExp(mockMetricCalcOp.toHandle(), &metricCount, nullptr));
|
||||
EXPECT_EQ(metricCount, 1U);
|
||||
@@ -390,7 +415,7 @@ TEST_F(MetricScopesFixture, MetricScopeObjectToAndFromHandleBaseClassWorkAsExpec
|
||||
scopeProperties.stype = ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP;
|
||||
scopeProperties.pNext = nullptr;
|
||||
|
||||
MockMetricScope mockMetricScope(scopeProperties);
|
||||
MockMetricScope mockMetricScope(scopeProperties, false);
|
||||
auto hMockScope = mockMetricScope.toHandle();
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetIntelMetricScopeGetPropertiesExp(hMockScope,
|
||||
@@ -399,5 +424,98 @@ TEST_F(MetricScopesFixture, MetricScopeObjectToAndFromHandleBaseClassWorkAsExpec
|
||||
EXPECT_NE(nullptr, mockScope);
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct MockL0GfxCoreHelperSupportMetricsAggregation : L0::L0GfxCoreHelperHw<GfxFamily> {
|
||||
bool supportMetricsAggregation() const override { return true; }
|
||||
};
|
||||
|
||||
HWTEST_F(MetricScopesFixture, GivenMetricsAggregationIsSupportedConfirmAggregatedMetricScopeIsCreated) {
|
||||
|
||||
MockL0GfxCoreHelperSupportMetricsAggregation<FamilyType> mockL0GfxCoreHelper;
|
||||
std::unique_ptr<ApiGfxCoreHelper> l0GfxCoreHelperBackup(static_cast<ApiGfxCoreHelper *>(&mockL0GfxCoreHelper));
|
||||
device->getNEODevice()->getRootDeviceEnvironmentRef().apiGfxCoreHelper.swap(l0GfxCoreHelperBackup);
|
||||
|
||||
auto mockDeviceContext = new MockMetricDeviceContext(*device);
|
||||
mockDeviceContext->clearAllSources();
|
||||
auto metricSource = new MockMetricSource();
|
||||
metricSource->isAvailableReturn = true;
|
||||
mockDeviceContext->setMockMetricSource(metricSource);
|
||||
|
||||
auto deviceImp = static_cast<DeviceImp *>(device);
|
||||
deviceImp->metricContext.reset(mockDeviceContext);
|
||||
mockDeviceContext->setMultiDeviceCapable(true);
|
||||
|
||||
uint32_t metricScopesCount = 1;
|
||||
zet_intel_metric_scope_exp_handle_t metricScope;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricScopesGetExp(context->toHandle(),
|
||||
device->toHandle(),
|
||||
&metricScopesCount,
|
||||
&metricScope));
|
||||
|
||||
EXPECT_EQ(metricScopesCount, 1u);
|
||||
zet_intel_metric_scope_properties_exp_t scopeProperties{};
|
||||
scopeProperties.stype = ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP;
|
||||
scopeProperties.pNext = nullptr;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricScopeGetPropertiesExp(metricScope,
|
||||
&scopeProperties));
|
||||
EXPECT_EQ(scopeProperties.iD, 0u);
|
||||
EXPECT_STREQ(scopeProperties.name, "DEVICE_AGGREGATED");
|
||||
EXPECT_STREQ(scopeProperties.description, "Metrics results aggregated at device level");
|
||||
|
||||
device->getNEODevice()->getRootDeviceEnvironmentRef().apiGfxCoreHelper.swap(l0GfxCoreHelperBackup);
|
||||
l0GfxCoreHelperBackup.release();
|
||||
}
|
||||
|
||||
HWTEST_F(MetricScopesFixture, GivenMetricsAggregationIsSupportedWhenCreatingCalcOpAggregatedScopeShouldBeFirst) {
|
||||
|
||||
MockL0GfxCoreHelperSupportMetricsAggregation<FamilyType> mockL0GfxCoreHelper;
|
||||
std::unique_ptr<ApiGfxCoreHelper> l0GfxCoreHelperBackup(static_cast<ApiGfxCoreHelper *>(&mockL0GfxCoreHelper));
|
||||
device->getNEODevice()->getRootDeviceEnvironmentRef().apiGfxCoreHelper.swap(l0GfxCoreHelperBackup);
|
||||
|
||||
auto mockDeviceContext = new MockMetricDeviceContext(*device);
|
||||
mockDeviceContext->clearAllSources();
|
||||
auto metricSource = new MockMetricSource();
|
||||
metricSource->isAvailableReturn = true;
|
||||
mockDeviceContext->setMockMetricSource(metricSource);
|
||||
auto deviceImp = static_cast<DeviceImp *>(device);
|
||||
deviceImp->metricContext.reset(mockDeviceContext);
|
||||
mockDeviceContext->setMultiDeviceCapable(true);
|
||||
|
||||
uint32_t metricScopesCount = 1;
|
||||
zet_intel_metric_scope_exp_handle_t metricScope;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricScopesGetExp(context->toHandle(),
|
||||
device->toHandle(),
|
||||
&metricScopesCount,
|
||||
&metricScope));
|
||||
|
||||
MockMetricGroup mockMetricGroup(*metricSource);
|
||||
mockMetricGroup.isMultiDevice = true;
|
||||
zet_metric_group_handle_t hMetricGroup = mockMetricGroup.toHandle();
|
||||
|
||||
// Aggregation window is zero
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&hMetricGroup, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
100, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&metricScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
device->toHandle(), &calculationDesc,
|
||||
&hCalculationOperation));
|
||||
|
||||
device->getNEODevice()->getRootDeviceEnvironmentRef().apiGfxCoreHelper.swap(l0GfxCoreHelperBackup);
|
||||
l0GfxCoreHelperBackup.release();
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "level_zero/tools/source/metrics/os_interface_metric.h"
|
||||
#include "level_zero/tools/test/unit_tests/sources/metrics/metric_ip_sampling_fixture.h"
|
||||
#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_ip_sampling.h"
|
||||
#include "level_zero/tools/test/unit_tests/sources/metrics/mock_metric_source.h"
|
||||
#include <level_zero/zet_api.h>
|
||||
|
||||
namespace L0 {
|
||||
@@ -597,17 +598,8 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, givenIpSamplingMetricGroupThenCrea
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
@@ -647,17 +639,9 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, givenIpSamplingMetricGroupCreating
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
100, // timeAggregationWindow, ip samping ingores it.
|
||||
};
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
calculationDesc.timeAggregationWindow = 1000;
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_INTEL_RESULT_WARNING_TIME_PARAMS_IGNORED_EXP,
|
||||
@@ -694,17 +678,8 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, givenIpSamplingCalcOpCanGetReportF
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
@@ -765,17 +740,8 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, givenIpSamplingCalcOpGetReportForm
|
||||
uint32_t metricsToCalculateCount = static_cast<uint32_t>(metricsToCalculate.size());
|
||||
EXPECT_EQ(metricsToCalculateCount, 5u);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
0, // metricGroupCount
|
||||
nullptr, // phMetricGroups
|
||||
metricsToCalculateCount, // metricCount
|
||||
metricsToCalculate.data(), // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricCount = metricsToCalculateCount;
|
||||
calculationDesc.phMetrics = metricsToCalculate.data();
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
@@ -812,17 +778,8 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, givenIpSamplingCalcOpCanGetExclude
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
@@ -869,9 +826,12 @@ HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, WhenReadingMetricGroupTimeCalculat
|
||||
}
|
||||
}
|
||||
|
||||
using MetricIpSamplingCalcOpTest = MetricIpSamplingCalculateSingleDevFixture;
|
||||
HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnRootDeviceExpectSuccess, EustallSupportedPlatforms) {
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnSubDeviceThenSuccessIsReturned, EustallSupportedPlatforms) {
|
||||
auto device = testDevices[0];
|
||||
ze_device_properties_t props = {};
|
||||
device->getProperties(&props);
|
||||
EXPECT_EQ(props.flags & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE, 0u);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
@@ -881,17 +841,34 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricGroupCount = 1;
|
||||
calculationDesc.phMetricGroups = &metricGroupHandle;
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
device->toHandle(), &calculationDesc,
|
||||
&hCalculationOperation));
|
||||
|
||||
std::vector<uint8_t> rawDataWithHeader(rawDataVectorSize + sizeof(IpSamplingMetricDataHeader));
|
||||
addHeader(rawDataWithHeader.data(), rawDataWithHeader.size(), reinterpret_cast<uint8_t *>(rawDataVector.data()), rawDataVectorSize, 0);
|
||||
|
||||
uint32_t totalMetricReportCount = 0;
|
||||
size_t offset = 0;
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetIntelMetricCalculateValuesExp(rawDataWithHeader.size(), &offset,
|
||||
reinterpret_cast<uint8_t *>(rawDataWithHeader.data()), hCalculationOperation,
|
||||
&totalMetricReportCount, nullptr));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zetIntelMetricCalculateValuesExp(rawDataVectorSize, &offset,
|
||||
reinterpret_cast<uint8_t *>(rawDataVector.data()), hCalculationOperation,
|
||||
&totalMetricReportCount, nullptr));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationDestroyExp(hCalculationOperation));
|
||||
}
|
||||
|
||||
using MetricIpSamplingCalcOpTest = MetricIpSamplingCalculateSingleDevFixture;
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnSubDeviceThenSuccessIsReturned, EustallSupportedPlatforms) {
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
@@ -937,26 +914,6 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnSubDeviceThenHandleErrorConditions, EustallSupportedPlatforms) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
uint32_t metricGroupCount = 1;
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
@@ -983,26 +940,6 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnSubDeviceCanDetectRawDataOverflow, EustallSupportedPlatforms) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
uint32_t metricGroupCount = 1;
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
device->toHandle(), &calculationDesc,
|
||||
@@ -1022,14 +959,6 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnSubDeviceFilterMetricsInReport, EustallSupportedPlatforms) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
uint32_t metricGroupCount = 1;
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
uint32_t metricCount = 0;
|
||||
EXPECT_EQ(zetMetricGet(metricGroupHandle, &metricCount, nullptr), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricCount, 10u);
|
||||
@@ -1049,17 +978,10 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
uint32_t metricsToCalculateCount = static_cast<uint32_t>(metricsToCalculate.size());
|
||||
EXPECT_EQ(metricsToCalculateCount, 5u);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
0, // metricGroupCount
|
||||
nullptr, // phMetricGroups
|
||||
metricsToCalculateCount, // metricCount
|
||||
metricsToCalculate.data(), // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
calculationDesc.metricGroupCount = 0;
|
||||
calculationDesc.phMetricGroups = nullptr;
|
||||
calculationDesc.metricCount = metricsToCalculateCount;
|
||||
calculationDesc.phMetrics = metricsToCalculate.data();
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
@@ -1093,24 +1015,6 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesDoesNotAllowLimitingResults, EustallSupportedPlatforms) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
uint32_t metricGroupCount = 1;
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
metricGroupCount, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
device->toHandle(), &calculationDesc,
|
||||
@@ -1132,54 +1036,5 @@ HWTEST2_F(MetricIpSamplingCalcOpTest, GivenIpSamplingCalcOpCallingMetricCalculat
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationDestroyExp(hCalculationOperation));
|
||||
}
|
||||
|
||||
HWTEST2_F(MetricIpSamplingCalcOpMultiDevTest, GivenIpSamplingCalcOpCallingMetricCalculateValuesOnRootDeviceExpectSuccess, EustallSupportedPlatforms) {
|
||||
|
||||
auto device = testDevices[0];
|
||||
ze_device_properties_t props = {};
|
||||
device->getProperties(&props);
|
||||
EXPECT_EQ(props.flags & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE, 0u);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, device->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
uint32_t metricGroupCount = 1;
|
||||
zet_metric_group_handle_t metricGroupHandle = nullptr;
|
||||
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, &metricGroupHandle), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
nullptr, // pNext
|
||||
1, // metricGroupCount
|
||||
&metricGroupHandle, // phMetricGroups
|
||||
0, // metricCount
|
||||
nullptr, // phMetrics
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
0, // timeAggregationWindow
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationCreateExp(context->toHandle(),
|
||||
device->toHandle(), &calculationDesc,
|
||||
&hCalculationOperation));
|
||||
|
||||
std::vector<uint8_t> rawDataWithHeader(rawDataVectorSize + sizeof(IpSamplingMetricDataHeader));
|
||||
addHeader(rawDataWithHeader.data(), rawDataWithHeader.size(), reinterpret_cast<uint8_t *>(rawDataVector.data()), rawDataVectorSize, 0);
|
||||
|
||||
uint32_t totalMetricReportCount = 0;
|
||||
size_t offset = 0;
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zetIntelMetricCalculateValuesExp(rawDataWithHeader.size(), &offset,
|
||||
reinterpret_cast<uint8_t *>(rawDataWithHeader.data()), hCalculationOperation,
|
||||
&totalMetricReportCount, nullptr));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, zetIntelMetricCalculateValuesExp(rawDataVectorSize, &offset,
|
||||
reinterpret_cast<uint8_t *>(rawDataVector.data()), hCalculationOperation,
|
||||
&totalMetricReportCount, nullptr));
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, zetIntelMetricCalculationOperationDestroyExp(hCalculationOperation));
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace L0
|
||||
|
||||
@@ -3688,6 +3688,13 @@ TEST_F(MetricEnumerationTest, givenValidOAMetricGroupThenOASourceCalcOperationIs
|
||||
EXPECT_EQ(metricGroupCount, 1u);
|
||||
EXPECT_NE(metricGroupHandle, nullptr);
|
||||
|
||||
zet_intel_metric_scope_properties_exp_t scopeProperties{};
|
||||
scopeProperties.stype = ZET_STRUCTURE_TYPE_INTEL_METRIC_SCOPE_PROPERTIES_EXP;
|
||||
scopeProperties.pNext = nullptr;
|
||||
|
||||
MockMetricScope mockMetricScope(scopeProperties, false);
|
||||
auto hMockScope = mockMetricScope.toHandle();
|
||||
|
||||
// metric groups from different source
|
||||
zet_intel_metric_calculation_exp_desc_t calculationDesc{
|
||||
ZET_INTEL_STRUCTURE_TYPE_METRIC_CALCULATION_DESC_EXP,
|
||||
@@ -3699,6 +3706,8 @@ TEST_F(MetricEnumerationTest, givenValidOAMetricGroupThenOASourceCalcOperationIs
|
||||
0, // timeWindowsCount
|
||||
nullptr, // pCalculationTimeWindows
|
||||
1000, // timeAggregationWindow
|
||||
1, // metricScopesCount
|
||||
&hMockScope, // phMetricScopes
|
||||
};
|
||||
|
||||
zet_intel_metric_calculation_operation_exp_handle_t hCalculationOperation;
|
||||
|
||||
Reference in New Issue
Block a user