mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
feature: support metric group type
Related-To: NEO-12055 Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
eca60f01d1
commit
365b0affc9
@@ -299,38 +299,6 @@ ze_result_t metricStreamerOpen(zet_context_handle_t hContext, zet_device_handle_
|
||||
return MetricGroup::fromHandle(hMetricGroup)->streamerOpen(hContext, hDevice, pDesc, hNotificationEvent, phMetricStreamer);
|
||||
}
|
||||
|
||||
ze_result_t MetricGroup::getMetricGroupExtendedProperties(MetricSource &metricSource, void *pNext) {
|
||||
ze_result_t retVal = ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
|
||||
while (pNext) {
|
||||
zet_base_desc_t *extendedProperties = reinterpret_cast<zet_base_desc_t *>(pNext);
|
||||
|
||||
if (extendedProperties->stype == ZET_STRUCTURE_TYPE_METRIC_GLOBAL_TIMESTAMPS_RESOLUTION_EXP) {
|
||||
|
||||
zet_metric_global_timestamps_resolution_exp_t *metricsTimestampProperties =
|
||||
reinterpret_cast<zet_metric_global_timestamps_resolution_exp_t *>(extendedProperties);
|
||||
|
||||
retVal = metricSource.getTimerResolution(metricsTimestampProperties->timerResolution);
|
||||
if (retVal != ZE_RESULT_SUCCESS) {
|
||||
metricsTimestampProperties->timerResolution = 0;
|
||||
metricsTimestampProperties->timestampValidBits = 0;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
retVal = metricSource.getTimestampValidBits(metricsTimestampProperties->timestampValidBits);
|
||||
if (retVal != ZE_RESULT_SUCCESS) {
|
||||
metricsTimestampProperties->timerResolution = 0;
|
||||
metricsTimestampProperties->timestampValidBits = 0;
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
|
||||
pNext = const_cast<void *>(extendedProperties->pNext);
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
bool MultiDomainDeferredActivationTracker::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) {
|
||||
|
||||
// Activation: postpone until zetMetricStreamerOpen or zeCommandQueueExecuteCommandLists
|
||||
|
||||
@@ -53,8 +53,6 @@ class MetricSource {
|
||||
virtual bool isAvailable() = 0;
|
||||
virtual ze_result_t appendMetricMemoryBarrier(CommandList &commandList) = 0;
|
||||
virtual ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) = 0;
|
||||
virtual ze_result_t getTimerResolution(uint64_t &resolution) = 0;
|
||||
virtual ze_result_t getTimestampValidBits(uint64_t &validBits) = 0;
|
||||
virtual ze_result_t activateMetricGroupsPreferDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) = 0;
|
||||
virtual ze_result_t activateMetricGroupsAlreadyDeferred() = 0;
|
||||
virtual ze_result_t metricProgrammableGet(uint32_t *pCount, zet_metric_programmable_exp_handle_t *phMetricProgrammables) = 0;
|
||||
@@ -71,6 +69,7 @@ class MetricSource {
|
||||
uint32_t getType() const {
|
||||
return type;
|
||||
}
|
||||
virtual ze_result_t handleMetricGroupExtendedProperties(void *pNext) = 0;
|
||||
|
||||
protected:
|
||||
uint32_t type = MetricSource::metricSourceTypeUndefined;
|
||||
@@ -194,7 +193,6 @@ struct MetricGroup : _zet_metric_group_handle_t {
|
||||
zet_device_handle_t hDevice,
|
||||
const zet_metric_query_pool_desc_t *desc,
|
||||
zet_metric_query_pool_handle_t *phMetricQueryPool) = 0;
|
||||
ze_result_t getMetricGroupExtendedProperties(MetricSource &metricSource, void *pnext);
|
||||
virtual ze_result_t getExportData(const uint8_t *pRawData, size_t rawDataSize, size_t *pExportDataSize,
|
||||
uint8_t *pExportData) = 0;
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/helpers/string.h"
|
||||
|
||||
#include "level_zero/api/driver_experimental/public/zex_metric.h"
|
||||
#include "level_zero/core/source/device/device.h"
|
||||
#include "level_zero/core/source/device/device_imp.h"
|
||||
#include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h"
|
||||
@@ -206,6 +207,33 @@ ze_result_t IpSamplingMetricSourceImp::getConcurrentMetricGroups(std::vector<zet
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t IpSamplingMetricSourceImp::handleMetricGroupExtendedProperties(void *pNext) {
|
||||
ze_result_t retVal = ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
while (pNext) {
|
||||
auto extendedProperties = reinterpret_cast<zet_base_properties_t *>(pNext);
|
||||
|
||||
if (extendedProperties->stype == ZET_STRUCTURE_TYPE_METRIC_GLOBAL_TIMESTAMPS_RESOLUTION_EXP) {
|
||||
|
||||
zet_metric_global_timestamps_resolution_exp_t *metricsTimestampProperties =
|
||||
reinterpret_cast<zet_metric_global_timestamps_resolution_exp_t *>(extendedProperties);
|
||||
|
||||
getTimerResolution(metricsTimestampProperties->timerResolution);
|
||||
getTimestampValidBits(metricsTimestampProperties->timestampValidBits);
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
if (extendedProperties->stype == ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_TYPE_EXP) {
|
||||
zet_intel_metric_group_type_exp_t *groupType = reinterpret_cast<zet_intel_metric_group_type_exp_t *>(extendedProperties);
|
||||
groupType->type = ZET_INTEL_METRIC_GROUP_TYPE_EXP_OTHER;
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
pNext = extendedProperties->pNext;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
IpSamplingMetricGroupImp::IpSamplingMetricGroupImp(IpSamplingMetricSourceImp &metricSource,
|
||||
std::vector<IpSamplingMetricImp> &metrics) : IpSamplingMetricGroupBase(metricSource) {
|
||||
this->metrics.reserve(metrics.size());
|
||||
@@ -228,7 +256,7 @@ ze_result_t IpSamplingMetricGroupImp::getProperties(zet_metric_group_properties_
|
||||
pProperties->pNext = pNext;
|
||||
|
||||
if (pNext) {
|
||||
return getMetricGroupExtendedProperties(metricSource, pNext);
|
||||
return metricSource.handleMetricGroupExtendedProperties(pNext);
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
|
||||
@@ -40,8 +40,7 @@ class IpSamplingMetricSourceImp : public MetricSource {
|
||||
MetricIpSamplingOsInterface *getMetricOsInterface() { return metricIPSamplingpOsInterface.get(); }
|
||||
IpSamplingMetricStreamerImp *pActiveStreamer = nullptr;
|
||||
const MetricDeviceContext &getMetricDeviceContext() const { return metricDeviceContext; }
|
||||
ze_result_t getTimerResolution(uint64_t &resolution) override;
|
||||
ze_result_t getTimestampValidBits(uint64_t &validBits) override;
|
||||
ze_result_t handleMetricGroupExtendedProperties(void *pNext) override;
|
||||
void setActivationTracker(MultiDomainDeferredActivationTracker *inputActivationTracker) {
|
||||
activationTracker.reset(inputActivationTracker);
|
||||
}
|
||||
@@ -55,6 +54,8 @@ class IpSamplingMetricSourceImp : public MetricSource {
|
||||
std::unique_ptr<MetricIpSamplingOsInterface> metricIPSamplingpOsInterface = nullptr;
|
||||
std::unique_ptr<MetricGroup> cachedMetricGroup = nullptr;
|
||||
std::unique_ptr<MultiDomainDeferredActivationTracker> activationTracker{};
|
||||
ze_result_t getTimerResolution(uint64_t &resolution);
|
||||
ze_result_t getTimestampValidBits(uint64_t &validBits);
|
||||
};
|
||||
|
||||
struct IpSamplingMetricGroupBase : public MetricGroupImp {
|
||||
|
||||
@@ -561,7 +561,7 @@ ze_result_t OaMetricGroupImp::getProperties(zet_metric_group_properties_t *pProp
|
||||
copyProperties(properties, *pProperties);
|
||||
pProperties->pNext = pNext;
|
||||
if (pNext) {
|
||||
status = getMetricGroupExtendedProperties(metricSource, pNext);
|
||||
status = metricSource.handleMetricGroupExtendedProperties(pNext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "shared/source/os_interface/os_library.h"
|
||||
|
||||
#include "level_zero/api/driver_experimental/public/zex_metric.h"
|
||||
#include "level_zero/core/source/cmdlist/cmdlist.h"
|
||||
#include "level_zero/core/source/device/device_imp.h"
|
||||
#include "level_zero/tools/source/metrics/metric.h"
|
||||
@@ -199,6 +200,42 @@ ze_result_t OaMetricSourceImp::getConcurrentMetricGroups(std::vector<zet_metric_
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t OaMetricSourceImp::handleMetricGroupExtendedProperties(void *pNext) {
|
||||
ze_result_t retVal = ZE_RESULT_ERROR_INVALID_ARGUMENT;
|
||||
while (pNext) {
|
||||
auto extendedProperties = reinterpret_cast<zet_base_properties_t *>(pNext);
|
||||
|
||||
if (extendedProperties->stype == ZET_STRUCTURE_TYPE_METRIC_GLOBAL_TIMESTAMPS_RESOLUTION_EXP) {
|
||||
|
||||
zet_metric_global_timestamps_resolution_exp_t *metricsTimestampProperties =
|
||||
reinterpret_cast<zet_metric_global_timestamps_resolution_exp_t *>(extendedProperties);
|
||||
|
||||
retVal = getTimerResolution(metricsTimestampProperties->timerResolution);
|
||||
if (retVal != ZE_RESULT_SUCCESS) {
|
||||
metricsTimestampProperties->timerResolution = 0;
|
||||
metricsTimestampProperties->timestampValidBits = 0;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
retVal = getTimestampValidBits(metricsTimestampProperties->timestampValidBits);
|
||||
if (retVal != ZE_RESULT_SUCCESS) {
|
||||
metricsTimestampProperties->timerResolution = 0;
|
||||
metricsTimestampProperties->timestampValidBits = 0;
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
|
||||
if (extendedProperties->stype == ZET_INTEL_STRUCTURE_TYPE_METRIC_GROUP_TYPE_EXP) {
|
||||
zet_intel_metric_group_type_exp_t *groupType = reinterpret_cast<zet_intel_metric_group_type_exp_t *>(extendedProperties);
|
||||
groupType->type = ZET_INTEL_METRIC_GROUP_TYPE_EXP_OTHER;
|
||||
retVal = ZE_RESULT_SUCCESS;
|
||||
}
|
||||
pNext = extendedProperties->pNext;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
template <>
|
||||
OaMetricSourceImp &MetricDeviceContext::getMetricSource<OaMetricSourceImp>() const {
|
||||
return static_cast<OaMetricSourceImp &>(*metricSources.at(MetricSource::metricSourceTypeOa));
|
||||
|
||||
@@ -34,15 +34,13 @@ class OaMetricSourceImp : public MetricSource {
|
||||
std::unique_ptr<MetricsLibrary> &getMetricsLibraryObject() { return metricsLibrary; }
|
||||
std::unique_ptr<MetricEnumeration> &getMetricEnumerationObject() { return metricEnumeration; }
|
||||
|
||||
ze_result_t getTimerResolution(uint64_t &resolution) override;
|
||||
ze_result_t getTimestampValidBits(uint64_t &validBits) override;
|
||||
|
||||
ze_result_t activateMetricGroupsAlreadyDeferred() override;
|
||||
ze_result_t activateMetricGroupsPreferDeferred(const uint32_t count,
|
||||
zet_metric_group_handle_t *phMetricGroups) override;
|
||||
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(void *pNext) override;
|
||||
bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const;
|
||||
bool isMetricGroupActivatedInHw() const;
|
||||
void setUseCompute(const bool useCompute);
|
||||
@@ -63,6 +61,8 @@ class OaMetricSourceImp : public MetricSource {
|
||||
bool useCompute = false;
|
||||
std::unique_ptr<MetricOAOsInterface> metricOAOsInterface = nullptr;
|
||||
std::unique_ptr<MultiDomainDeferredActivationTracker> activationTracker{};
|
||||
ze_result_t getTimerResolution(uint64_t &resolution);
|
||||
ze_result_t getTimestampValidBits(uint64_t &validBits);
|
||||
};
|
||||
|
||||
template <>
|
||||
|
||||
Reference in New Issue
Block a user