mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
fix: Return accurate metric value count for EU stall
Related-To: NEO-13401 Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
e518acea15
commit
1a996d666a
@@ -23,6 +23,7 @@
|
||||
#include <level_zero/zet_api.h>
|
||||
|
||||
#include <cstring>
|
||||
#include <unordered_set>
|
||||
|
||||
namespace L0 {
|
||||
constexpr uint32_t ipSamplinDomainId = 100u;
|
||||
@@ -301,7 +302,7 @@ ze_result_t IpSamplingMetricGroupImp::calculateMetricValues(const zet_metric_gro
|
||||
}
|
||||
|
||||
if (calculateCountOnly) {
|
||||
return getCalculatedMetricCount(rawDataSize, *pMetricValueCount);
|
||||
return getCalculatedMetricCount(pRawData, rawDataSize, *pMetricValueCount);
|
||||
} else {
|
||||
return getCalculatedMetricValues(type, rawDataSize, pRawData, *pMetricValueCount, pMetricValues);
|
||||
}
|
||||
@@ -373,15 +374,26 @@ ze_result_t IpSamplingMetricGroupImp::getMetricTimestampsExp(const ze_bool_t syn
|
||||
return getDeviceTimestamps(deviceImp, synchronizedWithHost, globalTimestamp, metricTimestamp);
|
||||
}
|
||||
|
||||
ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricCount(const size_t rawDataSize,
|
||||
ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricCount(const uint8_t *pRawData, const size_t rawDataSize,
|
||||
uint32_t &metricValueCount) {
|
||||
|
||||
if ((rawDataSize % IpSamplingMetricGroupBase::rawReportSize) != 0) {
|
||||
std::unordered_set<uint64_t> stallReportIpCount{};
|
||||
constexpr uint32_t rawReportSize = IpSamplingMetricGroupBase::rawReportSize;
|
||||
|
||||
if ((rawDataSize % rawReportSize) != 0) {
|
||||
return ZE_RESULT_ERROR_INVALID_SIZE;
|
||||
}
|
||||
|
||||
const uint32_t rawReportCount = static_cast<uint32_t>(rawDataSize) / IpSamplingMetricGroupBase::rawReportSize;
|
||||
metricValueCount = rawReportCount * properties.metricCount;
|
||||
const uint32_t rawReportCount = static_cast<uint32_t>(rawDataSize) / rawReportSize;
|
||||
|
||||
for (const uint8_t *pRawIpData = pRawData; pRawIpData < pRawData + (rawReportCount * rawReportSize); pRawIpData += rawReportSize) {
|
||||
uint64_t ip = 0ULL;
|
||||
memcpy_s(reinterpret_cast<uint8_t *>(&ip), sizeof(ip), pRawIpData, sizeof(ip));
|
||||
ip &= 0x1fffffff;
|
||||
stallReportIpCount.insert(ip);
|
||||
}
|
||||
|
||||
metricValueCount = static_cast<uint32_t>(stallReportIpCount.size()) * properties.metricCount;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -402,7 +414,7 @@ ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricCount(const uint8_t *pM
|
||||
}
|
||||
|
||||
auto currTotalMetricValueCount = 0u;
|
||||
auto result = this->getCalculatedMetricCount(header->rawDataSize, currTotalMetricValueCount);
|
||||
auto result = this->getCalculatedMetricCount((processMetricData + sizeof(IpSamplingMetricDataHeader)), header->rawDataSize, currTotalMetricValueCount);
|
||||
if (result != ZE_RESULT_SUCCESS) {
|
||||
metricValueCount = 0;
|
||||
return result;
|
||||
|
||||
@@ -129,7 +129,7 @@ struct IpSamplingMetricGroupImp : public IpSamplingMetricGroupBase {
|
||||
private:
|
||||
std::vector<std::unique_ptr<IpSamplingMetricImp>> metrics = {};
|
||||
zet_metric_group_properties_t properties = {ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES, nullptr};
|
||||
ze_result_t getCalculatedMetricCount(const size_t rawDataSize, uint32_t &metricValueCount);
|
||||
ze_result_t getCalculatedMetricCount(const uint8_t *pRawData, const size_t rawDataSize, uint32_t &metricValueCount);
|
||||
ze_result_t getCalculatedMetricValues(const zet_metric_group_calculation_type_t type, const size_t rawDataSize, const uint8_t *pRawData,
|
||||
uint32_t &metricValueCount,
|
||||
zet_typed_value_t *pCalculatedData);
|
||||
|
||||
Reference in New Issue
Block a user