fix: Track Sub Device Hierarchy for use by Metrics Library

Related-To: LOCI-4819

- When communicating with the Metrics Libraries, if one is using a
specific sub device, then the correct physical sub device index and
number of sub devices must be used.

- When Affinity Mask is set, this hierarchy information is lost,
therefore the sub device hierarchy data is stored in a map to each
"device" to be returned to the user allowing for the correct sub device
information to be passed to the metrics library.

Signed-off-by: Spruit, Neil R <neil.r.spruit@intel.com>
This commit is contained in:
Spruit, Neil R
2023-08-16 03:00:31 +00:00
committed by Compute-Runtime-Automation
parent 873b3d4241
commit 5c75449508
7 changed files with 178 additions and 16 deletions

View File

@@ -51,6 +51,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
}
bool isExposingSubDevicesAsDevices() const { return this->subDevicesAsDevices; }
bool isCombinedDeviceHierarchy() const { return this->combinedDeviceHierarchy; }
bool getSubDeviceHierarchy(uint32_t index, std::tuple<uint32_t, uint32_t, uint32_t> *subDeviceMap);
bool areMetricsEnabled() { return this->metricsEnabled; }
void setFP64EmulationEnabled() {
fp64EmulationEnabled = true;
@@ -64,6 +65,10 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
std::unique_ptr<OsEnvironment> osEnvironment;
std::vector<std::unique_ptr<RootDeviceEnvironment>> rootDeviceEnvironments;
void releaseRootDeviceEnvironmentResources(RootDeviceEnvironment *rootDeviceEnvironment);
// Map of Sub Device Indicies set during Affinity Mask in the form of:
// <RootDeviceIndex, SubDeviceIndex, SubDeviceCount>
// Primarily used by the Metrics Library to communicate the actual Sub Device Index being used in queries.
std::unordered_map<uint32_t, std::tuple<uint32_t, uint32_t, uint32_t>> mapOfSubDeviceIndices;
protected:
static bool comparePciIdBusNumber(std::unique_ptr<RootDeviceEnvironment> &rootDeviceEnvironment1, std::unique_ptr<RootDeviceEnvironment> &rootDeviceEnvironment2);