Add debug flag to override bank index in local memory bank selector

Change-Id: Ie85129fc7cbdeb9cfa88b401430f983c096a868f
Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
Kamil Kopryk 2020-06-09 14:07:07 +02:00 committed by sys_ocldev
parent 87596d2387
commit dadbd5a09f
4 changed files with 21 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include "shared/source/helpers/basic_math.h"
#include "shared/source/memory_manager/local_memory_usage.h"
#include "shared/test/unit_test/helpers/debug_manager_state_restore.h"
#include "third_party/gtest/gtest/gtest.h"
@ -56,6 +57,18 @@ TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryIsReleased
EXPECT_EQ(allocationSize, selector.getOccupiedMemorySizeForBank(bankIndex));
}
TEST(localMemoryUsageTest, givenOverrideLeastOccupiedBankDebugFlagWhenGetLeastOccupiedBankIsCalledThenForcedBankIndexIsReturned) {
DebugManagerStateRestore dbgRestore;
MockLocalMemoryUsageBankSelector selector(1u);
auto bankIndex = selector.getLeastOccupiedBank();
EXPECT_EQ(0u, bankIndex);
uint32_t forcedBankIndex = 64u;
DebugManager.flags.OverrideLeastOccupiedBank.set(static_cast<int32_t>(forcedBankIndex));
bankIndex = selector.getLeastOccupiedBank();
EXPECT_EQ(forcedBankIndex, bankIndex);
}
TEST(localMemoryUsageTest, givenLocalMemoryUsageBankSelectorWhenMemoryAllocatedSeveralTimesItIsStoredOnDifferentBanks) {
MockLocalMemoryUsageBankSelector selector(5u);

View File

@ -162,5 +162,6 @@ LimitBlitterMaxHeight = -1
FlushAfterEachBlit = -1
UseCommandBufferHeaderSizeForWddmQueueSubmission = 1
OverridePreemptionSurfaceSizeInMb = -1
OverrideLeastOccupiedBank = -1
UseAsyncDrmExec = -1
EnableMultiStorageResources = -1

View File

@ -64,6 +64,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, LimitBlitterMaxWidth, -1, "-1: default, >=0: Max
DECLARE_DEBUG_VARIABLE(int32_t, LimitBlitterMaxHeight, -1, "-1: default, >=0: Max height")
DECLARE_DEBUG_VARIABLE(int32_t, FlushAfterEachBlit, -1, "-1: default, 0: disable, 1: enable")
DECLARE_DEBUG_VARIABLE(int32_t, OverridePreemptionSurfaceSizeInMb, -1, "-1: default, >=0 Override preemption surface size with value")
DECLARE_DEBUG_VARIABLE(int32_t, OverrideLeastOccupiedBank, -1, "-1: default, >=0 Override least occupied bank with value")
/*LOGGING FLAGS*/
DECLARE_DEBUG_VARIABLE(bool, PrintDebugSettings, false, "Dump all debug variables settings to text file. Print to stdout if value is different than default.")

View File

@ -7,6 +7,8 @@
#include "shared/source/memory_manager/local_memory_usage.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include <algorithm>
#include <bitset>
#include <iterator>
@ -23,6 +25,10 @@ LocalMemoryUsageBankSelector::LocalMemoryUsageBankSelector(uint32_t banksCount)
}
uint32_t LocalMemoryUsageBankSelector::getLeastOccupiedBank() {
if (DebugManager.flags.OverrideLeastOccupiedBank.get() != -1) {
return static_cast<uint32_t>(DebugManager.flags.OverrideLeastOccupiedBank.get());
}
auto leastOccupiedBankIterator = std::min_element(memorySizes.get(), memorySizes.get() + banksCount);
return static_cast<uint32_t>(std::distance(memorySizes.get(), leastOccupiedBankIterator));
}