mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 12:23:05 +08:00
feature: add support for query l3 bank count in xe-prelim
Related-To: NEO-11125 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
ce122fb1fa
commit
bc5237ca8a
@@ -443,9 +443,10 @@ bool IoctlHelperXe::setGpuCpuTimes(TimeStampData *pGpuCpuTime, OSTime *osTime) {
|
||||
}
|
||||
|
||||
void IoctlHelperXe::getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *geomDss, std::vector<std::bitset<8>> *computeDss,
|
||||
std::vector<std::bitset<8>> *euDss, DrmQueryTopologyData &topologyData, bool &isComputeDssEmpty) {
|
||||
std::vector<std::bitset<8>> *euDss, std::vector<std::bitset<8>> *l3BanksMask, DrmQueryTopologyData &topologyData, bool &isComputeDssEmpty) {
|
||||
int subSliceCount = 0;
|
||||
int euPerDss = 0;
|
||||
int l3Banks = 0;
|
||||
|
||||
for (auto tileId = 0u; tileId < nTiles; tileId++) {
|
||||
|
||||
@@ -467,9 +468,15 @@ void IoctlHelperXe::getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *
|
||||
euPerDssPerTile += euDss[tileId][byte].count();
|
||||
}
|
||||
|
||||
int l3BanksPerTile = 0;
|
||||
for (auto byte = 0u; byte < l3BanksMask[tileId].size(); byte++) {
|
||||
l3BanksPerTile += l3BanksMask[tileId][byte].count();
|
||||
}
|
||||
|
||||
// pick smallest config
|
||||
subSliceCount = (subSliceCount == 0) ? subSliceCountPerTile : std::min(subSliceCount, subSliceCountPerTile);
|
||||
euPerDss = (euPerDss == 0) ? euPerDssPerTile : std::min(euPerDss, euPerDssPerTile);
|
||||
l3Banks = (l3Banks == 0) ? l3BanksPerTile : std::min(l3Banks, l3BanksPerTile);
|
||||
|
||||
// pick max config
|
||||
topologyData.maxSubSlicesPerSlice = std::max(topologyData.maxSubSlicesPerSlice, subSliceCountPerTile);
|
||||
@@ -480,6 +487,7 @@ void IoctlHelperXe::getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *
|
||||
topologyData.subSliceCount = subSliceCount;
|
||||
topologyData.euCount = subSliceCount * euPerDss;
|
||||
topologyData.maxSlices = 1;
|
||||
topologyData.numL3Banks = l3Banks;
|
||||
}
|
||||
|
||||
void IoctlHelperXe::getTopologyMap(size_t nTiles, std::vector<std::bitset<8>> *dssInfo, TopologyMap &topologyMap) {
|
||||
@@ -516,6 +524,7 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
StackVec<std::vector<std::bitset<8>>, 2> geomDss;
|
||||
StackVec<std::vector<std::bitset<8>>, 2> computeDss;
|
||||
StackVec<std::vector<std::bitset<8>>, 2> euDss;
|
||||
StackVec<std::vector<std::bitset<8>>, 2> l3Banks;
|
||||
|
||||
auto topologySize = queryGtTopology.size();
|
||||
auto dataPtr = queryGtTopology.data();
|
||||
@@ -524,6 +533,7 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
geomDss.resize(numTiles);
|
||||
computeDss.resize(numTiles);
|
||||
euDss.resize(numTiles);
|
||||
l3Banks.resize(numTiles);
|
||||
bool receivedDssInfo = false;
|
||||
while (topologySize >= sizeof(drm_xe_query_topology_mask)) {
|
||||
drm_xe_query_topology_mask *topo = reinterpret_cast<drm_xe_query_topology_mask *>(dataPtr);
|
||||
@@ -545,6 +555,8 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
default:
|
||||
if (isEuPerDssTopologyType(topo->type)) {
|
||||
fillMask(euDss[tileId], topo);
|
||||
} else if (isL3BankTopologyType(topo->type)) {
|
||||
fillMask(l3Banks[tileId], topo);
|
||||
} else {
|
||||
xeLog("Unhandle GT Topo type: %d\n", topo->type);
|
||||
}
|
||||
@@ -557,7 +569,7 @@ bool IoctlHelperXe::getTopologyDataAndMap(const HardwareInfo &hwInfo, DrmQueryTo
|
||||
}
|
||||
|
||||
bool isComputeDssEmpty = false;
|
||||
getTopologyData(numTiles, geomDss.begin(), computeDss.begin(), euDss.begin(), topologyData, isComputeDssEmpty);
|
||||
getTopologyData(numTiles, geomDss.begin(), computeDss.begin(), euDss.begin(), l3Banks.begin(), topologyData, isComputeDssEmpty);
|
||||
|
||||
auto &dssInfo = isComputeDssEmpty ? geomDss : computeDss;
|
||||
getTopologyMap(numTiles, dssInfo.begin(), topologyMap);
|
||||
@@ -1723,4 +1735,7 @@ void IoctlHelperXe::querySupportedFeatures() {
|
||||
bool IoctlHelperXe::isEuPerDssTopologyType(uint16_t topologyType) const {
|
||||
return topologyType == DRM_XE_TOPO_EU_PER_DSS;
|
||||
}
|
||||
bool IoctlHelperXe::isL3BankTopologyType(uint16_t topologyType) const {
|
||||
return false;
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -113,7 +113,7 @@ class IoctlHelperXe : public IoctlHelper {
|
||||
std::unique_ptr<MemoryInfo> createMemoryInfo() override;
|
||||
size_t getLocalMemoryRegionsSize(const MemoryInfo *memoryInfo, uint32_t subDevicesCount, uint32_t deviceBitfield) const override;
|
||||
void setupIpVersion() override;
|
||||
void getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *geomDss, std::vector<std::bitset<8>> *computeDss, std::vector<std::bitset<8>> *euDss, DrmQueryTopologyData &topologyData, bool &isComputeDssEmpty);
|
||||
void getTopologyData(size_t nTiles, std::vector<std::bitset<8>> *geomDss, std::vector<std::bitset<8>> *computeDss, std::vector<std::bitset<8>> *euDss, std::vector<std::bitset<8>> *l3BanksMask, DrmQueryTopologyData &topologyData, bool &isComputeDssEmpty);
|
||||
void getTopologyMap(size_t nTiles, std::vector<std::bitset<8>> *dssInfo, TopologyMap &topologyMap);
|
||||
|
||||
bool setGpuCpuTimes(TimeStampData *pGpuCpuTime, OSTime *osTime) override;
|
||||
@@ -134,6 +134,7 @@ class IoctlHelperXe : public IoctlHelper {
|
||||
bool resourceRegistrationEnabled() override { return true; }
|
||||
bool isPreemptionSupported() override { return true; }
|
||||
virtual bool isEuPerDssTopologyType(uint16_t topologyType) const;
|
||||
virtual bool isL3BankTopologyType(uint16_t topologyType) const;
|
||||
|
||||
protected:
|
||||
static constexpr uint32_t maxContextSetProperties = 4;
|
||||
|
||||
@@ -15,4 +15,8 @@ bool IoctlHelperXePrelim::isEuPerDssTopologyType(uint16_t topologyType) const {
|
||||
return topologyType == DRM_XE_TOPO_EU_PER_DSS ||
|
||||
topologyType == DRM_XE_TOPO_SIMD16_EU_PER_DSS;
|
||||
}
|
||||
|
||||
bool IoctlHelperXePrelim::isL3BankTopologyType(uint16_t topologyType) const {
|
||||
return topologyType == DRM_XE_TOPO_L3_BANK;
|
||||
}
|
||||
} // namespace NEO
|
||||
|
||||
@@ -14,6 +14,7 @@ class IoctlHelperXePrelim : public IoctlHelperXe {
|
||||
public:
|
||||
using IoctlHelperXe::IoctlHelperXe;
|
||||
bool isEuPerDssTopologyType(uint16_t topologyType) const override;
|
||||
bool isL3BankTopologyType(uint16_t topologyType) const override;
|
||||
};
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
Reference in New Issue
Block a user