Use max enabled slice in debugger thread mapping

Signed-off-by: Yates, Brandon <brandon.yates@intel.com>
This commit is contained in:
Yates, Brandon
2022-09-23 00:29:32 +00:00
committed by Compute-Runtime-Automation
parent 81845d3781
commit 71bef6094d
17 changed files with 102 additions and 19 deletions

View File

@@ -6,6 +6,7 @@
*/
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/helpers/hw_helper.h"
#include "level_zero/core/source/device/device.h"
#include "level_zero/core/source/event/event.h"
@@ -40,8 +41,9 @@ void L0HwHelperHw<GfxFamily>::getAttentionBitmaskForSingleThreads(const std::vec
const uint32_t numThreadsPerEu = (hwInfo.gtSystemInfo.ThreadCount / hwInfo.gtSystemInfo.EUCount);
const uint32_t bytesPerEu = alignUp(numThreadsPerEu, 8) / 8;
const uint32_t threadsSizePerSlice = numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(hwInfo);
bitmaskSize = hwInfo.gtSystemInfo.MaxSubSlicesSupported * hwInfo.gtSystemInfo.MaxEuPerSubSlice * bytesPerEu;
bitmaskSize = std::max(highestEnabledSlice, hwInfo.gtSystemInfo.MaxSlicesSupported) * numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
bitmask = std::make_unique<uint8_t[]>(bitmaskSize);
memset(bitmask.get(), 0, bitmaskSize);
@@ -63,11 +65,12 @@ std::vector<EuThread::ThreadId> L0HwHelperHw<GfxFamily>::getThreadsFromAttention
const uint32_t bytesPerEu = alignUp(numThreadsPerEu, 8) / 8;
const uint32_t threadsSizePerSlice = numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
const uint32_t threadsSizePerSubSlice = numEuPerSubslice * bytesPerEu;
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(hwInfo);
UNRECOVERABLE_IF(bytesPerEu != 1);
std::vector<EuThread::ThreadId> threads;
for (uint32_t slice = 0; slice < hwInfo.gtSystemInfo.MaxSlicesSupported; slice++) {
for (uint32_t slice = 0; slice < std::max(highestEnabledSlice, hwInfo.gtSystemInfo.MaxSlicesSupported); slice++) {
for (uint32_t subslice = 0; subslice < numSubslicesPerSlice; subslice++) {
for (uint32_t eu = 0; eu < hwInfo.gtSystemInfo.MaxEuPerSubSlice; eu++) {
size_t offset = slice * threadsSizePerSlice + subslice * threadsSizePerSubSlice + eu * bytesPerEu;

View File

@@ -12,11 +12,12 @@ void L0HwHelperHw<Family>::getAttentionBitmaskForSingleThreads(const std::vector
const uint32_t bytesPerEu = alignUp(numThreadsPerEu, 8) / 8;
const uint32_t numEuPerSubslice = std::min(hwInfo.gtSystemInfo.MaxEuPerSubSlice, 8u);
const uint32_t threadsSizePerSlice = numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(hwInfo);
const uint32_t eusPerRow = 4;
const uint32_t numberOfRows = 2;
bitmaskSize = hwInfo.gtSystemInfo.MaxSubSlicesSupported * numEuPerSubslice * bytesPerEu;
bitmaskSize = std::max(highestEnabledSlice, hwInfo.gtSystemInfo.MaxSlicesSupported) * numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
bitmask = std::make_unique<uint8_t[]>(bitmaskSize);
memset(bitmask.get(), 0, bitmaskSize);
@@ -43,11 +44,12 @@ std::vector<EuThread::ThreadId> L0HwHelperHw<Family>::getThreadsFromAttentionBit
const uint32_t threadsSizePerSubSlice = numEuPerSubslice * bytesPerEu;
const uint32_t eusPerRow = 4;
const uint32_t numberOfRows = 2;
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(hwInfo);
UNRECOVERABLE_IF(bytesPerEu != 1);
std::vector<EuThread::ThreadId> threads;
for (uint32_t slice = 0; slice < hwInfo.gtSystemInfo.MaxSlicesSupported; slice++) {
for (uint32_t slice = 0; slice < std::max(highestEnabledSlice, hwInfo.gtSystemInfo.MaxSlicesSupported); slice++) {
for (uint32_t subslice = 0; subslice < numSubslicesPerSlice; subslice++) {
size_t subSliceOffset = slice * threadsSizePerSlice + subslice * threadsSizePerSubSlice;

View File

@@ -296,7 +296,6 @@ int main(int argc, char **argv) {
gtSystemInfo.MaxEuPerSubSlice = std::max(gtSystemInfo.MaxEuPerSubSlice, euPerSubSlice);
gtSystemInfo.MaxSlicesSupported = std::max(gtSystemInfo.MaxSlicesSupported, gtSystemInfo.SliceCount);
gtSystemInfo.MaxSubSlicesSupported = std::max(gtSystemInfo.MaxSubSlicesSupported, gtSystemInfo.SubSliceCount);
gtSystemInfo.IsDynamicallyPopulated = false;
// clang-format on
// Platforms with uninitialized factory are not supported

View File

@@ -5,6 +5,7 @@
*
*/
#include "shared/source/helpers/aligned_memory.h"
#include "shared/source/helpers/ptr_math.h"
#include "shared/test/common/helpers/debug_manager_state_restore.h"
#include "shared/test/common/helpers/default_hw_info.h"
@@ -373,9 +374,44 @@ HWTEST_F(L0HwHelperTest, givenBitmaskWithAttentionBitsForHalfOfThreadsWhenGettin
}
}
using PlatformsWithFusedEus = IsWithinGfxCore<IGFX_GEN12LP_CORE, IGFX_XE_HP_CORE>;
using PlatformsWithFusedEus = IsWithinGfxCore<IGFX_GEN12LP_CORE, IGFX_XE_HPG_CORE>;
using L0HwHelperFusedEuTest = ::testing::Test;
HWTEST2_F(L0HwHelperFusedEuTest, givenDynamicallyPopulatesSliceInfoGreaterThanMaxSlicesSupportedThenBitmasksAreCorrect, PlatformsWithFusedEus) {
auto hwInfo = *NEO::defaultHwInfo.get();
auto &l0HwHelper = L0::L0HwHelper::get(hwInfo.platform.eRenderCoreFamily);
if (hwInfo.gtSystemInfo.MaxEuPerSubSlice <= 8) {
GTEST_SKIP();
}
std::unique_ptr<uint8_t[]> bitmask;
size_t size = 0;
hwInfo.gtSystemInfo.IsDynamicallyPopulated = true;
hwInfo.gtSystemInfo.MaxSlicesSupported = 2;
for (int i = 0; i < GT_MAX_SLICE; i++) {
hwInfo.gtSystemInfo.SliceInfo[i].Enabled = false;
}
hwInfo.gtSystemInfo.SliceInfo[2].Enabled = true;
hwInfo.gtSystemInfo.SliceInfo[3].Enabled = true;
std::vector<EuThread::ThreadId> threadsWithAtt;
threadsWithAtt.push_back({0, 2, 0, 0, 0});
threadsWithAtt.push_back({0, 3, 0, 0, 0});
l0HwHelper.getAttentionBitmaskForSingleThreads(threadsWithAtt, hwInfo, bitmask, size);
const uint32_t numSubslicesPerSlice = hwInfo.gtSystemInfo.MaxSubSlicesSupported / hwInfo.gtSystemInfo.MaxSlicesSupported;
const uint32_t numEuPerSubslice = std::min(hwInfo.gtSystemInfo.MaxEuPerSubSlice, 8u);
const uint32_t numThreadsPerEu = (hwInfo.gtSystemInfo.ThreadCount / hwInfo.gtSystemInfo.EUCount);
const uint32_t bytesPerEu = alignUp(numThreadsPerEu, 8) / 8;
auto expected_size = 4 * numSubslicesPerSlice * numEuPerSubslice * bytesPerEu;
EXPECT_EQ(size, expected_size);
auto threads = l0HwHelper.getThreadsFromAttentionBitmask(hwInfo, 0, bitmask.get(), size);
ASSERT_EQ(threads.size(), 4u);
EXPECT_EQ(threads[0], threadsWithAtt[0]);
EXPECT_EQ(threads[2], threadsWithAtt[1]);
}
HWTEST2_F(L0HwHelperFusedEuTest, givenBitmaskWithAttentionBitsForSingleThreadWhenGettingThreadsThenThreadForTwoEUsReturned, PlatformsWithFusedEus) {
auto hwInfo = *NEO::defaultHwInfo.get();
if (hwInfo.gtSystemInfo.MaxEuPerSubSlice <= 8) {

View File

@@ -1516,3 +1516,27 @@ HWTEST2_F(HwHelperTest, givenAtLeastXeHpPlatformWhenGettingMinimalScratchSpaceSi
const auto &hwHelper = HwHelper::get(renderCoreFamily);
EXPECT_EQ(64U, hwHelper.getMinimalScratchSpaceSize());
}
TEST(HwHelperTests, whenIsDynamicallyPopulatedisFalseThengetHighestEnabledSliceReturnsMaxSlicesSupported) {
auto hwInfo = *defaultHwInfo;
hwInfo.gtSystemInfo.IsDynamicallyPopulated = false;
hwInfo.gtSystemInfo.MaxSlicesSupported = 4;
const auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily);
auto maxSlice = hwHelper.getHighestEnabledSlice(hwInfo);
EXPECT_EQ(maxSlice, hwInfo.gtSystemInfo.MaxSlicesSupported);
}
TEST(HwHelperTests, whenIsDynamicallyPopulatedisTrueThengetHighestEnabledSliceReturnsHighestEnabledSliceInfo) {
auto hwInfo = *defaultHwInfo;
hwInfo.gtSystemInfo.IsDynamicallyPopulated = true;
hwInfo.gtSystemInfo.MaxSlicesSupported = 4;
for (int i = 0; i < GT_MAX_SLICE; i++) {
hwInfo.gtSystemInfo.SliceInfo[i].Enabled = false;
}
hwInfo.gtSystemInfo.SliceInfo[6].Enabled = true;
const auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily);
auto maxSlice = hwHelper.getHighestEnabledSlice(hwInfo);
EXPECT_EQ(maxSlice, 7u);
}

View File

@@ -299,7 +299,6 @@ int main(int argc, char **argv) {
gtSystemInfo.MaxEuPerSubSlice = std::max(gtSystemInfo.MaxEuPerSubSlice, euPerSubSlice);
gtSystemInfo.MaxSlicesSupported = std::max(gtSystemInfo.MaxSlicesSupported, gtSystemInfo.SliceCount);
gtSystemInfo.MaxSubSlicesSupported = std::max(gtSystemInfo.MaxSubSlicesSupported, gtSystemInfo.SubSliceCount);
gtSystemInfo.IsDynamicallyPopulated = false;
// clang-format on
binaryNameSuffix.append(familyName[hwInfoForTests.platform.eRenderCoreFamily]);

View File

@@ -66,4 +66,18 @@ uint32_t HwHelper::getSubDevicesCount(const HardwareInfo *pHwInfo) {
}
}
uint32_t HwHelper::getHighestEnabledSlice(const HardwareInfo &hwInfo) {
uint32_t highestEnabledSlice = 0;
if (!hwInfo.gtSystemInfo.IsDynamicallyPopulated) {
return hwInfo.gtSystemInfo.MaxSlicesSupported;
}
for (int highestSlice = GT_MAX_SLICE - 1; highestSlice >= 0; highestSlice--) {
if (hwInfo.gtSystemInfo.SliceInfo[highestSlice].Enabled) {
highestEnabledSlice = highestSlice + 1;
break;
}
}
return highestEnabledSlice;
}
} // namespace NEO

View File

@@ -62,6 +62,7 @@ class HwHelper {
static bool compressedBuffersSupported(const HardwareInfo &hwInfo);
static bool compressedImagesSupported(const HardwareInfo &hwInfo);
static bool cacheFlushAfterWalkerSupported(const HardwareInfo &hwInfo);
static uint32_t getHighestEnabledSlice(const HardwareInfo &hwInfo);
virtual bool timestampPacketWriteSupported() const = 0;
virtual bool isTimestampWaitSupportedForQueues() const = 0;
virtual bool isTimestampWaitSupportedForEvents(const HardwareInfo &hwInfo) const = 0;

View File

@@ -75,6 +75,7 @@ void setHwInfoValuesFromConfig(const uint64_t hwInfoConfig, HardwareInfo &hwInfo
hwInfoIn.gtSystemInfo.SubSliceCount = subSlicePerSliceCount * sliceCount;
hwInfoIn.gtSystemInfo.DualSubSliceCount = subSlicePerSliceCount * sliceCount;
hwInfoIn.gtSystemInfo.EUCount = euPerSubSliceCount * subSlicePerSliceCount * sliceCount;
hwInfoIn.gtSystemInfo.IsDynamicallyPopulated = true;
for (uint32_t slice = 0; slice < hwInfoIn.gtSystemInfo.SliceCount; slice++) {
hwInfoIn.gtSystemInfo.SliceInfo[slice].Enabled = true;
}

View File

@@ -110,6 +110,7 @@ int HwInfoConfig::configureHwInfoDrm(const HardwareInfo *inHwInfo, HardwareInfo
gtSystemInfo->MaxSubSlicesSupported = std::max(static_cast<uint32_t>(topologyData.maxSubSliceCount * topologyData.maxSliceCount), gtSystemInfo->MaxSubSlicesSupported);
gtSystemInfo->MaxSlicesSupported = topologyData.maxSliceCount;
gtSystemInfo->IsDynamicallyPopulated = true;
for (uint32_t slice = 0; slice < gtSystemInfo->SliceCount; slice++) {
gtSystemInfo->SliceInfo[slice].Enabled = true;
}

View File

@@ -171,8 +171,10 @@ bool Wddm::translateTopologyInfo(TopologyMapping &mapping) {
std::vector<int> sliceIndices;
auto gtSystemInfo = rootDeviceEnvironment.getHardwareInfo()->gtSystemInfo;
sliceIndices.reserve(gtSystemInfo.SliceCount);
auto hwInfo = rootDeviceEnvironment.getHardwareInfo();
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(*hwInfo);
for (uint32_t x = 0; x < GT_MAX_SLICE; x++) {
for (uint32_t x = 0; x < std::max(highestEnabledSlice, hwInfo->gtSystemInfo.MaxSlicesSupported); x++) {
if (!gtSystemInfo.SliceInfo[x].Enabled) {
continue;
}

View File

@@ -207,7 +207,7 @@ void PvcHwConfig::setupHardwareInfo(HardwareInfo *hwInfo, bool setupFeatureTable
gtSysInfo->CCSInfo.Instances.CCSEnableMask = 0b11;
hwInfo->featureTable.ftrBcsInfo = 1;
gtSysInfo->IsDynamicallyPopulated = true;
for (uint32_t slice = 0; slice < gtSysInfo->SliceCount; slice++) {
gtSysInfo->SliceInfo[slice].Enabled = true;
}

View File

@@ -158,13 +158,7 @@ bool HwInfoConfigHw<gfxProduct>::isTile64With3DSurfaceOnBCSSupported(const Hardw
template <>
uint32_t HwInfoConfigHw<gfxProduct>::computeMaxNeededSubSliceSpace(const HardwareInfo &hwInfo) const {
auto highestEnabledSlice = 0;
for (int highestSlice = GT_MAX_SLICE - 1; highestSlice >= 0; highestSlice--) {
if (hwInfo.gtSystemInfo.SliceInfo[highestSlice].Enabled) {
highestEnabledSlice = highestSlice + 1;
break;
}
}
const uint32_t highestEnabledSlice = NEO::HwHelper::getHighestEnabledSlice(hwInfo);
auto subSlicesPerSlice = hwInfo.gtSystemInfo.MaxSubSlicesSupported / hwInfo.gtSystemInfo.MaxSlicesSupported;
auto maxSubSlice = highestEnabledSlice * subSlicesPerSlice;

View File

@@ -178,7 +178,7 @@ void Dg2HwConfig::setupHardwareInfo(HardwareInfo *hwInfo, bool setupFeatureTable
gtSysInfo->CCSInfo.NumberOfCCSEnabled = 1;
hwInfo->featureTable.ftrBcsInfo = 1;
gtSysInfo->IsDynamicallyPopulated = true;
for (uint32_t slice = 0; slice < gtSysInfo->SliceCount; slice++) {
gtSysInfo->SliceInfo[slice].Enabled = true;
}

View File

@@ -292,7 +292,6 @@ int main(int argc, char **argv) {
gtSystemInfo.MaxEuPerSubSlice = std::max(gtSystemInfo.MaxEuPerSubSlice, euPerSubSlice);
gtSystemInfo.MaxSlicesSupported = std::max(gtSystemInfo.MaxSlicesSupported, gtSystemInfo.SliceCount);
gtSystemInfo.MaxSubSlicesSupported = std::max(gtSystemInfo.MaxSubSlicesSupported, gtSystemInfo.SubSliceCount);
gtSystemInfo.IsDynamicallyPopulated = false;
// clang-format on
binaryNameSuffix.append(familyName[hwInfoForTests.platform.eRenderCoreFamily]);

View File

@@ -164,6 +164,7 @@ TEST_F(WddmTests, givenDebugFlagForceEvictOnlyIfNecessaryAllValuesThenForceSetti
TEST_F(WddmTests, GivengtSystemInfoSliceInfoHasEnabledSlicesAtHigherIndicesThenExpectTopologyMapCreateAndReturnTrue) {
VariableBackup<HardwareInfo> backupHwInfo(defaultHwInfo.get());
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 2;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1; // Only one slice enabled
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].Enabled = false;
@@ -191,6 +192,7 @@ TEST_F(WddmTests, GivengtSystemInfoSliceInfoHasEnabledSlicesAtHigherIndicesThenE
TEST_F(WddmTests, GivenProperTopologyDataAndDebugFlagsEnabledWhenInitializingWddmThenExpectTopologyMapCreateAndReturnTrue) {
VariableBackup<HardwareInfo> backupHwInfo(defaultHwInfo.get());
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1; // Only one slice enabled
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].Enabled = true;
@@ -216,6 +218,7 @@ TEST_F(WddmTests, GivenNoSubsliceEnabledAndDebugFlagsEnabledWhenInitializingWddm
VariableBackup<HardwareInfo> backupHwInfo(defaultHwInfo.get());
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1; // Only one slice enabled
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DualSubSliceEnabledCount = 1;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DSSInfo[0].Enabled = true;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DSSInfo[0].SubSlice[0].Enabled = false;
@@ -236,6 +239,7 @@ TEST_F(WddmTests, GivenProperTopologyDataWhenQueryingTopologyThenExpectTrue) {
VariableBackup<HardwareInfo> backupHwInfo(defaultHwInfo.get());
defaultHwInfo.get()->gtSystemInfo.MultiTileArchInfo.TileCount = 1;
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1; // Only one slice enabled
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].Enabled = true;
@@ -272,6 +276,7 @@ TEST_F(WddmTests, GivenMoreThanOneEnabledSliceWhenQueryingTopologyThenExpectTrue
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 2;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].Enabled = false;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
uint32_t index = 1;
for (uint32_t enabledSliceCount = 0; enabledSliceCount < defaultHwInfo.get()->gtSystemInfo.SliceCount; enabledSliceCount++) {
@@ -303,6 +308,7 @@ TEST_F(WddmTests, GivenNoSubsliceEnabledWhenQueryingTopologyThenExpectFalse) {
defaultHwInfo.get()->gtSystemInfo.MultiTileArchInfo.TileCount = 1;
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DualSubSliceEnabledCount = 1;
// Lets say, DSS 0 is disabled and dss 1 is enabled, thus overall DSS enable count is 1
@@ -320,6 +326,7 @@ TEST_F(WddmTests, GivenNoEuThreadsEnabledWhenQueryingTopologyThenExpectFalse) {
defaultHwInfo.get()->gtSystemInfo.MultiTileArchInfo.TileCount = 1;
defaultHwInfo.get()->gtSystemInfo.MaxSlicesSupported = 10;
defaultHwInfo.get()->gtSystemInfo.SliceCount = 1;
defaultHwInfo.get()->gtSystemInfo.IsDynamicallyPopulated = true;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DualSubSliceEnabledCount = 1;
defaultHwInfo.get()->gtSystemInfo.SliceInfo[0].DSSInfo[0].Enabled = true;

View File

@@ -51,7 +51,6 @@ DG2TEST_F(HwInfoConfigTestDg2, givenDg2ConfigWhenSetupHardwareInfoThenGtSystemIn
Dg2HwConfig::setupHardwareInfo(&hwInfo, false);
EXPECT_EQ(8u, gtSystemInfo.CsrSizeInMb);
EXPECT_FALSE(gtSystemInfo.IsL3HashModeEnabled);
EXPECT_FALSE(gtSystemInfo.IsDynamicallyPopulated);
}
DG2TEST_F(HwInfoConfigTestDg2, givenG10DevIdWhenAdditionalKernelExecInfoSupportCheckedThenCorrectValueIsReturned) {
@@ -392,6 +391,7 @@ DG2TEST_F(HwInfoConfigTestDg2, givenDg2WhenSetForceNonCoherentThenProperFlagSet)
DG2TEST_F(HwInfoConfigTestDg2, givenEnabledSliceInNonStandardConfigWhenComputeUnitsUsedForScratchThenProperCalculationIsReturned) {
HardwareInfo hwInfo = *defaultHwInfo;
GT_SYSTEM_INFO &testSysInfo = hwInfo.gtSystemInfo;
testSysInfo.IsDynamicallyPopulated = true;
for (int i = 0; i < GT_MAX_SLICE; i++) {
testSysInfo.SliceInfo[i].Enabled = false;
}
@@ -411,6 +411,7 @@ DG2TEST_F(HwInfoConfigTestDg2, givenEnabledSliceInNonStandardConfigWhenComputeUn
DG2TEST_F(HwInfoConfigTestDg2, givenNotEnabledSliceWhenComputeUnitsUsedForScratchThenThrowUnrecoverableIf) {
HardwareInfo hwInfo = *defaultHwInfo;
GT_SYSTEM_INFO &testSysInfo = hwInfo.gtSystemInfo;
testSysInfo.IsDynamicallyPopulated = true;
for (int i = 0; i < GT_MAX_SLICE; i++) {
testSysInfo.SliceInfo[i].Enabled = false;
}