mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
Fix Metric Activation Procedure
This patch implements Deactivate previously activated metric groups, if they are not part of the current list Related-To: LOCI-3160 Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
6cb44ae0d9
commit
6292a3304a
@@ -83,14 +83,40 @@ ze_result_t MetricDeviceContext::metricGroupGet(uint32_t *pCount, zet_metric_gro
|
||||
return result;
|
||||
}
|
||||
|
||||
ze_result_t MetricDeviceContext::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) {
|
||||
void MetricDeviceContext::activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups) {
|
||||
|
||||
// Activation: postpone until zetMetricStreamerOpen or zeCommandQueueExecuteCommandLists
|
||||
// Deactivation: execute immediately.
|
||||
if (phMetricGroups == nullptr) {
|
||||
return deActivateAllDomains();
|
||||
deActivateAllDomains();
|
||||
return;
|
||||
}
|
||||
|
||||
auto isMetricGroupProvided = [phMetricGroups, count](const zet_metric_group_handle_t hMetricGroup) {
|
||||
for (auto index = 0u; index < count; index++) {
|
||||
if (hMetricGroup == phMetricGroups[index]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// Deactive existing metric groups which are not provided in phMetricGroups
|
||||
std::vector<uint32_t> deactivateList = {};
|
||||
for (const auto &[domainId, metricGroupPair] : domains) {
|
||||
const auto &hMetricGroup = metricGroupPair.first;
|
||||
if (isMetricGroupProvided(hMetricGroup) == false) {
|
||||
deActivateDomain(domainId);
|
||||
deactivateList.push_back(domainId);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove deactivated ones from the map
|
||||
for (const auto &domainId : deactivateList) {
|
||||
domains.erase(domainId);
|
||||
}
|
||||
|
||||
// Activate-deferred new metric groups if any
|
||||
for (auto index = 0u; index < count; index++) {
|
||||
|
||||
zet_metric_group_handle_t hMetricGroup = MetricGroup::fromHandle(phMetricGroups[index])->getMetricGroupForSubDevice(subDeviceIndex);
|
||||
@@ -102,17 +128,9 @@ ze_result_t MetricDeviceContext::activateMetricGroupsDeferred(uint32_t count, ze
|
||||
continue;
|
||||
}
|
||||
|
||||
// Domain empty; So create new deactiavted association.
|
||||
if (domains[domain].first == nullptr) {
|
||||
domains[domain].first = hMetricGroup;
|
||||
domains[domain].second = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Attempt to overwrite a previous association is an error.
|
||||
return ZE_RESULT_ERROR_UNKNOWN;
|
||||
domains[domain].first = hMetricGroup;
|
||||
domains[domain].second = false;
|
||||
}
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t MetricDeviceContext::activateAllDomains() {
|
||||
@@ -125,16 +143,18 @@ ze_result_t MetricDeviceContext::activateAllDomains() {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t MetricDeviceContext::deActivateAllDomains() {
|
||||
void MetricDeviceContext::deActivateDomain(uint32_t domain) {
|
||||
auto &metricGroupPair = domains[domain];
|
||||
if (metricGroupPair.second == true) {
|
||||
MetricGroup::fromHandle(metricGroupPair.first)->deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
void MetricDeviceContext::deActivateAllDomains() {
|
||||
for (auto &entry : domains) {
|
||||
auto &metricGroup = entry.second;
|
||||
if (metricGroup.second == true) {
|
||||
MetricGroup::fromHandle(metricGroup.first)->deactivate();
|
||||
}
|
||||
metricGroup = {};
|
||||
deActivateDomain(entry.first);
|
||||
}
|
||||
domains.clear();
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t MetricDeviceContext::appendMetricMemoryBarrier(CommandList &commandList) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class MetricDeviceContext {
|
||||
public:
|
||||
MetricDeviceContext(Device &device);
|
||||
ze_result_t metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups);
|
||||
ze_result_t activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups);
|
||||
void activateMetricGroupsDeferred(uint32_t count, zet_metric_group_handle_t *phMetricGroups);
|
||||
ze_result_t activateMetricGroups();
|
||||
ze_result_t appendMetricMemoryBarrier(CommandList &commandList);
|
||||
bool isMetricGroupActivated(const zet_metric_group_handle_t hMetricGroup) const;
|
||||
@@ -60,7 +60,8 @@ class MetricDeviceContext {
|
||||
private:
|
||||
bool enable();
|
||||
ze_result_t activateAllDomains();
|
||||
ze_result_t deActivateAllDomains();
|
||||
void deActivateAllDomains();
|
||||
void deActivateDomain(uint32_t domain);
|
||||
struct Device &device;
|
||||
std::map<uint32_t, std::pair<zet_metric_group_handle_t, bool>> domains;
|
||||
bool multiDeviceCapable = false;
|
||||
|
||||
Reference in New Issue
Block a user