fix: correct adjusting hw info for IGC, cover all cases

Related-To: NEO-8203

Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2023-09-18 12:28:40 +00:00
committed by Compute-Runtime-Automation
parent 0ead0dc1a1
commit 698a3ed3de
3 changed files with 28 additions and 18 deletions

View File

@@ -98,15 +98,10 @@ int OclocIgcFacade::initialize(const HardwareInfo &hwInfo) {
}
auto compilerProductHelper = NEO::CompilerProductHelper::create(hwInfo.platform.eProductFamily);
auto copyHwInfo = hwInfo;
if (compilerProductHelper) {
compilerProductHelper->adjustHwInfoForIgc(copyHwInfo);
}
populateIgcPlatform(*igcPlatform, hwInfo);
IGC::GtSysInfoHelper::PopulateInterfaceWith(*igcGtSystemInfo.get(), hwInfo.gtSystemInfo);
populateIgcPlatform(*igcPlatform, copyHwInfo);
IGC::GtSysInfoHelper::PopulateInterfaceWith(*igcGtSystemInfo.get(), copyHwInfo.gtSystemInfo);
populateWithFeatures(igcFtrWa.get(), copyHwInfo, compilerProductHelper.get());
populateWithFeatures(igcFtrWa.get(), hwInfo, compilerProductHelper.get());
initialized = true;
return OCLOC_SUCCESS;

View File

@@ -7,6 +7,7 @@
#include "shared/source/compiler_interface/igc_platform_helper.h"
#include "shared/source/helpers/compiler_product_helper.h"
#include "shared/source/helpers/hw_info.h"
#include "ocl_igc_interface/gt_system_info.h"
@@ -21,7 +22,12 @@ void populateIgcPlatform<>(IGC::Platform<1> &igcPlatform, const HardwareInfo &hw
}
template <>
void populateIgcPlatform<>(IGC::Platform<2> &igcPlatform, const HardwareInfo &hwInfo) {
void populateIgcPlatform<>(IGC::Platform<2> &igcPlatform, const HardwareInfo &inputHwInfo) {
auto hwInfo = inputHwInfo;
auto compilerProductHelper = CompilerProductHelper::create(hwInfo.platform.eProductFamily);
if (compilerProductHelper) {
compilerProductHelper->adjustHwInfoForIgc(hwInfo);
}
igcPlatform.SetProductFamily(hwInfo.platform.eProductFamily);
igcPlatform.SetPCHProductFamily(hwInfo.platform.ePCHProductFamily);
igcPlatform.SetDisplayCoreFamily(hwInfo.platform.eDisplayCoreFamily);

View File

@@ -905,30 +905,39 @@ HWTEST_F(CompilerInterfaceTest, givenNoDbgKeyForceUseDifferentPlatformWhenReques
auto igcPlatform = devCtx->GetPlatformHandle();
auto igcSysInfo = devCtx->GetGTSystemInfoHandle();
EXPECT_EQ(device->getHardwareInfo().platform.eProductFamily, igcPlatform->GetProductFamily());
EXPECT_EQ(device->getHardwareInfo().platform.eRenderCoreFamily, igcPlatform->GetRenderCoreFamily());
EXPECT_EQ(device->getHardwareInfo().gtSystemInfo.SliceCount, igcSysInfo->GetSliceCount());
EXPECT_EQ(device->getHardwareInfo().gtSystemInfo.SubSliceCount, igcSysInfo->GetSubSliceCount());
EXPECT_EQ(device->getHardwareInfo().gtSystemInfo.EUCount, igcSysInfo->GetEUCount());
EXPECT_EQ(device->getHardwareInfo().gtSystemInfo.ThreadCount, igcSysInfo->GetThreadCount());
auto hwInfo = device->getHardwareInfo();
device->getCompilerProductHelper().adjustHwInfoForIgc(hwInfo);
EXPECT_EQ(hwInfo.platform.eProductFamily, igcPlatform->GetProductFamily());
EXPECT_EQ(hwInfo.platform.eRenderCoreFamily, igcPlatform->GetRenderCoreFamily());
EXPECT_EQ(hwInfo.gtSystemInfo.SliceCount, igcSysInfo->GetSliceCount());
EXPECT_EQ(hwInfo.gtSystemInfo.SubSliceCount, igcSysInfo->GetSubSliceCount());
EXPECT_EQ(hwInfo.gtSystemInfo.EUCount, igcSysInfo->GetEUCount());
EXPECT_EQ(hwInfo.gtSystemInfo.ThreadCount, igcSysInfo->GetThreadCount());
}
HWTEST_F(CompilerInterfaceTest, givenDbgKeyForceUseDifferentPlatformWhenRequestForNewTranslationCtxThenUseDbgKeyPlatform) {
DebugManagerStateRestore dbgRestore;
auto dbgProdFamily = DEFAULT_TEST_PLATFORM::hwInfo.platform.eProductFamily;
auto dbgProdFamily = defaultHwInfo->platform.eProductFamily;
std::string dbgPlatformString(hardwarePrefix[dbgProdFamily]);
const GT_SYSTEM_INFO dbgSystemInfo = hardwareInfoTable[dbgProdFamily]->gtSystemInfo;
DebugManager.flags.ForceCompilerUsePlatform.set(dbgPlatformString);
auto device = this->pDevice;
device->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.eProductFamily = IGFX_UNKNOWN;
device->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.eRenderCoreFamily = IGFX_UNKNOWN_CORE;
auto retIgc = pCompilerInterface->createIgcTranslationCtx(*device, IGC::CodeType::spirV, IGC::CodeType::oclGenBin);
EXPECT_NE(nullptr, retIgc);
IGC::IgcOclDeviceCtxTagOCL *devCtx = pCompilerInterface->peekIgcDeviceCtx(device);
auto igcPlatform = devCtx->GetPlatformHandle();
auto igcSysInfo = devCtx->GetGTSystemInfoHandle();
EXPECT_EQ(hardwareInfoTable[dbgProdFamily]->platform.eProductFamily, igcPlatform->GetProductFamily());
EXPECT_EQ(hardwareInfoTable[dbgProdFamily]->platform.eRenderCoreFamily, igcPlatform->GetRenderCoreFamily());
auto hwInfo = *hardwareInfoTable[dbgProdFamily];
device->getCompilerProductHelper().adjustHwInfoForIgc(hwInfo);
EXPECT_EQ(hwInfo.platform.eProductFamily, igcPlatform->GetProductFamily());
EXPECT_EQ(hwInfo.platform.eRenderCoreFamily, igcPlatform->GetRenderCoreFamily());
EXPECT_EQ(dbgSystemInfo.SliceCount, igcSysInfo->GetSliceCount());
EXPECT_EQ(dbgSystemInfo.SubSliceCount, igcSysInfo->GetSubSliceCount());
EXPECT_EQ(dbgSystemInfo.DualSubSliceCount, igcSysInfo->GetSubSliceCount());