fix: extend MemoryInfo class interface to expose single memory region
unify logic of OverrideDrmRegion debug flag Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
parent
e72a607c31
commit
6f21d133cf
|
@ -76,32 +76,29 @@ uint32_t MemoryInfo::getTileIndex(uint32_t memoryBank) {
|
|||
MemoryClassInstance MemoryInfo::getMemoryRegionClassAndInstance(uint32_t memoryBank, const HardwareInfo &hwInfo) {
|
||||
|
||||
auto &gfxCoreHelper = this->drm.getRootDeviceEnvironment().getHelper<GfxCoreHelper>();
|
||||
if (!gfxCoreHelper.getEnableLocalMemory(hwInfo) || memoryBank == 0) {
|
||||
return systemMemoryRegion.region;
|
||||
if (!gfxCoreHelper.getEnableLocalMemory(hwInfo)) {
|
||||
memoryBank = 0;
|
||||
}
|
||||
|
||||
return getMemoryRegion(memoryBank).region;
|
||||
}
|
||||
|
||||
const MemoryRegion &MemoryInfo::getMemoryRegion(uint32_t memoryBank) {
|
||||
if (memoryBank == 0) {
|
||||
return systemMemoryRegion;
|
||||
}
|
||||
|
||||
auto index = getTileIndex(memoryBank);
|
||||
|
||||
UNRECOVERABLE_IF(index >= localMemoryRegions.size());
|
||||
|
||||
return localMemoryRegions[index].region;
|
||||
return localMemoryRegions[index];
|
||||
}
|
||||
|
||||
size_t MemoryInfo::getMemoryRegionSize(uint32_t memoryBank) {
|
||||
if (DebugManager.flags.PrintMemoryRegionSizes.get()) {
|
||||
printRegionSizes();
|
||||
}
|
||||
if (memoryBank == 0) {
|
||||
return systemMemoryRegion.probedSize;
|
||||
}
|
||||
|
||||
auto index = Math::log2(memoryBank);
|
||||
|
||||
if (index < localMemoryRegions.size()) {
|
||||
return localMemoryRegions[index].probedSize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return getMemoryRegion(memoryBank).probedSize;
|
||||
}
|
||||
|
||||
void MemoryInfo::printRegionSizes() {
|
||||
|
|
|
@ -32,6 +32,8 @@ class MemoryInfo {
|
|||
|
||||
MOCKABLE_VIRTUAL size_t getMemoryRegionSize(uint32_t memoryBank);
|
||||
|
||||
const MemoryRegion &getMemoryRegion(uint32_t memoryBank);
|
||||
|
||||
void printRegionSizes();
|
||||
|
||||
uint32_t getTileIndex(uint32_t memoryBank);
|
||||
|
|
|
@ -30,9 +30,9 @@ class DrmMemoryManagerWithSubDevicesPrelimTest : public ::testing::Test {
|
|||
|
||||
mock = new DrmQueryMock(*executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]);
|
||||
auto memoryInfo = new MockExtendedMemoryInfo(*mock);
|
||||
mock->memoryInfo.reset(memoryInfo);
|
||||
|
||||
mock->queryEngineInfo();
|
||||
mock->memoryInfo.reset(memoryInfo);
|
||||
|
||||
executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface = std::make_unique<OSInterface>();
|
||||
executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->osInterface->setDriverModel(std::unique_ptr<DriverModel>(mock));
|
||||
|
|
|
@ -294,7 +294,7 @@ TEST_F(MultiTileMemoryInfoPrelimTest, givenMemoryInfoWithRegionsWhenGettingMemor
|
|||
EXPECT_EQ(regionInfo[2].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[2].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(0));
|
||||
EXPECT_EQ(16 * GB, regionSize);
|
||||
EXPECT_EQ(regionInfo[2].probedSize, regionSize);
|
||||
|
||||
// route to tile 0 banks
|
||||
DebugManager.flags.OverrideDrmRegion.set(0);
|
||||
|
@ -303,7 +303,7 @@ TEST_F(MultiTileMemoryInfoPrelimTest, givenMemoryInfoWithRegionsWhenGettingMemor
|
|||
EXPECT_EQ(regionInfo[1].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[1].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(1));
|
||||
EXPECT_EQ(32 * GB, regionSize);
|
||||
EXPECT_EQ(regionInfo[1].probedSize, regionSize);
|
||||
|
||||
// try to force tile 0 banks
|
||||
DebugManager.flags.OverrideDrmRegion.set(-1);
|
||||
|
@ -336,9 +336,7 @@ TEST_F(MultiTileMemoryInfoPrelimTest, givenMemoryInfoWithoutRegionsWhenGettingMe
|
|||
setupMemoryInfo(regionInfo, 0);
|
||||
|
||||
EXPECT_ANY_THROW(memoryInfo->getMemoryRegionClassAndInstance(1, *pHwInfo));
|
||||
|
||||
auto regionSize = memoryInfo->getMemoryRegionSize(1);
|
||||
EXPECT_EQ(0 * GB, regionSize);
|
||||
EXPECT_ANY_THROW(memoryInfo->getMemoryRegionSize(1));
|
||||
}
|
||||
|
||||
TEST_F(MultiTileMemoryInfoPrelimTest, whenDebugVariablePrintMemoryRegionSizeIsSetAndGetMemoryRegionSizeIsCalledThenMessagePrintedToStdOutput) {
|
||||
|
|
|
@ -115,8 +115,7 @@ TEST(MemoryInfo, givenMemoryInfoWithoutDeviceRegionWhenGettingDeviceRegionSizeTh
|
|||
auto drm = std::make_unique<DrmTipMock>(*executionEnvironment->rootDeviceEnvironments[0]);
|
||||
auto memoryInfo = std::make_unique<MemoryInfo>(regionInfo, *drm);
|
||||
ASSERT_NE(nullptr, memoryInfo);
|
||||
auto regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(0));
|
||||
EXPECT_EQ(0 * GB, regionSize);
|
||||
EXPECT_ANY_THROW(memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(0)));
|
||||
}
|
||||
|
||||
TEST(MemoryInfo, givenMemoryInfoWithRegionsAndLocalMemoryDisabledWhenGettingMemoryRegionClassAndInstanceThenReturnCorrectValues) {
|
||||
|
@ -190,7 +189,7 @@ TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenGettingMemoryRegionClassAndInstan
|
|||
EXPECT_EQ(regionInfo[2].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[2].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
auto regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(0));
|
||||
EXPECT_EQ(16 * GB, regionSize);
|
||||
EXPECT_EQ(regionInfo[2].probedSize, regionSize);
|
||||
|
||||
DebugManager.flags.OverrideDrmRegion.set(0);
|
||||
|
||||
|
@ -198,7 +197,7 @@ TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenGettingMemoryRegionClassAndInstan
|
|||
EXPECT_EQ(regionInfo[1].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[1].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(1));
|
||||
EXPECT_EQ(32 * GB, regionSize);
|
||||
EXPECT_EQ(regionInfo[1].probedSize, regionSize);
|
||||
|
||||
DebugManager.flags.OverrideDrmRegion.set(-1);
|
||||
DebugManager.flags.ForceMemoryBankIndexOverride.set(1);
|
||||
|
@ -207,15 +206,16 @@ TEST(MemoryInfo, givenMemoryInfoWithRegionsWhenGettingMemoryRegionClassAndInstan
|
|||
auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getHelper<ProductHelper>();
|
||||
|
||||
regionClassAndInstance = memoryInfo->getMemoryRegionClassAndInstance(MemoryBanks::getBankForLocalMemory(1), *defaultHwInfo);
|
||||
regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(1));
|
||||
if (gfxCoreHelper.isBankOverrideRequired(*defaultHwInfo, productHelper)) {
|
||||
EXPECT_EQ(regionInfo[1].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[1].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
EXPECT_EQ(regionInfo[1].probedSize, regionSize);
|
||||
} else {
|
||||
EXPECT_EQ(regionInfo[2].region.memoryClass, regionClassAndInstance.memoryClass);
|
||||
EXPECT_EQ(regionInfo[2].region.memoryInstance, regionClassAndInstance.memoryInstance);
|
||||
EXPECT_EQ(regionInfo[2].probedSize, regionSize);
|
||||
}
|
||||
regionSize = memoryInfo->getMemoryRegionSize(MemoryBanks::getBankForLocalMemory(1));
|
||||
EXPECT_EQ(32 * GB, regionSize);
|
||||
}
|
||||
|
||||
using MemoryInfoTest = ::testing::Test;
|
||||
|
|
|
@ -1574,5 +1574,5 @@ TEST(DistanceInfoTest, givenDistanceInfosWhenAssignRegionsFromDistancesThenCorre
|
|||
memoryInfo->assignRegionsFromDistances(distances);
|
||||
EXPECT_EQ(1024u, memoryInfo->getMemoryRegionSize(1));
|
||||
EXPECT_EQ(1024u, memoryInfo->getMemoryRegionSize(2));
|
||||
EXPECT_EQ(0u, memoryInfo->getMemoryRegionSize(4));
|
||||
EXPECT_ANY_THROW(memoryInfo->getMemoryRegionSize(4));
|
||||
}
|
||||
|
|
|
@ -372,7 +372,7 @@ TEST_F(IoctlHelperPrelimFixture, givenPrelimWhenQueryEngineInfoWithDeviceMemoryT
|
|||
|
||||
EXPECT_EQ(1024u, drm->memoryInfo->getMemoryRegionSize(1));
|
||||
EXPECT_EQ(1024u, drm->memoryInfo->getMemoryRegionSize(2));
|
||||
EXPECT_EQ(0u, drm->memoryInfo->getMemoryRegionSize(4));
|
||||
EXPECT_ANY_THROW(drm->memoryInfo->getMemoryRegionSize(4));
|
||||
|
||||
std::vector<EngineClassInstance> engines;
|
||||
engineInfo->getListOfEnginesOnATile(0u, engines);
|
||||
|
|
Loading…
Reference in New Issue