diff --git a/opencl/test/unit_test/xe_hpc_core/gfx_core_helper_tests_xe_hpc_core.cpp b/opencl/test/unit_test/xe_hpc_core/gfx_core_helper_tests_xe_hpc_core.cpp index edff9df376..538fcffdee 100644 --- a/opencl/test/unit_test/xe_hpc_core/gfx_core_helper_tests_xe_hpc_core.cpp +++ b/opencl/test/unit_test/xe_hpc_core/gfx_core_helper_tests_xe_hpc_core.cpp @@ -638,16 +638,6 @@ XE_HPC_CORETEST_F(GfxCoreHelperTestsXeHpcCore, givenProgramGlobalFenceAsMiMemFen EXPECT_EQ(sizeof(MI_MEM_FENCE), MemorySynchronizationCommands::getSizeForAdditonalSynchronization(pDevice->getRootDeviceEnvironment())); } -XE_HPC_CORETEST_F(GfxCoreHelperTestsXeHpcCore, givenGfxCoreHelperWhenGettingThreadsPerEUConfigsThenCorrectConfigsAreReturned) { - auto &gfxCoreHelper = getHelper(); - - auto &configs = gfxCoreHelper.getThreadsPerEUConfigs(); - - EXPECT_EQ(2U, configs.size()); - EXPECT_EQ(4U, configs[0]); - EXPECT_EQ(8U, configs[1]); -} - using ProductHelperTestXeHpcCore = Test; XE_HPC_CORETEST_F(ProductHelperTestXeHpcCore, givenDefaultProductHelperHwWhenGettingIsBlitCopyRequiredForLocalMemoryThenFalseIsReturned) { diff --git a/shared/source/device/device_caps.cpp b/shared/source/device/device_caps.cpp index 8490e31063..32e7be6353 100644 --- a/shared/source/device/device_caps.cpp +++ b/shared/source/device/device_caps.cpp @@ -20,6 +20,7 @@ #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/os_interface/os_interface.h" #include "shared/source/os_interface/product_helper.h" +#include "shared/source/release_helper/release_helper.h" #include @@ -42,6 +43,7 @@ void Device::initializeCaps() { auto &productHelper = this->getRootDeviceEnvironment().getHelper(); auto &gfxCoreHelper = this->getRootDeviceEnvironment().getHelper(); + auto releaseHelper = this->getRootDeviceEnvironment().getReleaseHelper(); bool ocl21FeaturesEnabled = hwInfo.capabilityTable.supportsOcl21Features; if (DebugManager.flags.ForceOCLVersion.get() != 0) { @@ -136,7 +138,10 @@ void Device::initializeCaps() { deviceInfo.maxNumEUsPerDualSubSlice = deviceInfo.maxNumEUsPerSubSlice; } deviceInfo.numThreadsPerEU = systemInfo.ThreadCount / systemInfo.EUCount; - deviceInfo.threadsPerEUConfigs = gfxCoreHelper.getThreadsPerEUConfigs(); + + if (releaseHelper) { + deviceInfo.threadsPerEUConfigs = releaseHelper->getThreadsPerEUConfigs(); + } auto maxWS = productHelper.getMaxThreadsForWorkgroupInDSSOrSS(hwInfo, static_cast(deviceInfo.maxNumEUsPerSubSlice), static_cast(deviceInfo.maxNumEUsPerDualSubSlice)) * simdSizeUsed; maxWS = Math::prevPowerOfTwo(maxWS); diff --git a/shared/source/helpers/gfx_core_helper.h b/shared/source/helpers/gfx_core_helper.h index 65d0b375bd..711851a9dd 100644 --- a/shared/source/helpers/gfx_core_helper.h +++ b/shared/source/helpers/gfx_core_helper.h @@ -92,7 +92,6 @@ class GfxCoreHelper { virtual const EngineInstancesContainer getGpgpuEngineInstances(const RootDeviceEnvironment &rootDeviceEnvironment) const = 0; virtual EngineGroupType getEngineGroupType(aub_stream::EngineType engineType, EngineUsage engineUsage, const HardwareInfo &hwInfo) const = 0; virtual const StackVec getDeviceSubGroupSizes() const = 0; - virtual const StackVec getThreadsPerEUConfigs() const = 0; virtual bool getEnableLocalMemory(const HardwareInfo &hwInfo) const = 0; static uint32_t getMaxThreadsForVfe(const HardwareInfo &hwInfo); virtual uint32_t getMetricsLibraryGenId() const = 0; @@ -268,8 +267,6 @@ class GfxCoreHelperHw : public GfxCoreHelper { const StackVec getDeviceSubGroupSizes() const override; - const StackVec getThreadsPerEUConfigs() const override; - bool getEnableLocalMemory(const HardwareInfo &hwInfo) const override; uint32_t getMetricsLibraryGenId() const override; diff --git a/shared/source/helpers/gfx_core_helper_base.inl b/shared/source/helpers/gfx_core_helper_base.inl index f0ca231fa3..2084bad10a 100644 --- a/shared/source/helpers/gfx_core_helper_base.inl +++ b/shared/source/helpers/gfx_core_helper_base.inl @@ -533,11 +533,6 @@ const StackVec GfxCoreHelperHw::getDeviceSubGroupSizes() c return {8, 16, 32}; } -template -const StackVec GfxCoreHelperHw::getThreadsPerEUConfigs() const { - return {}; -} - template void GfxCoreHelperHw::setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const RootDeviceEnvironment &rootDeviceEnvironment) const {} diff --git a/shared/source/release_helper/release_helper.h b/shared/source/release_helper/release_helper.h index 837573dc56..d3313816fc 100644 --- a/shared/source/release_helper/release_helper.h +++ b/shared/source/release_helper/release_helper.h @@ -8,6 +8,7 @@ #pragma once #include "shared/source/helpers/hw_ip_version.h" +#include "shared/source/utilities/stackvec.h" #include #include @@ -24,6 +25,8 @@ inline constexpr uint32_t maxArchitecture = 64; using createReleaseHelperFunctionType = std::unique_ptr (*)(HardwareIpVersion hardwareIpVersion); inline createReleaseHelperFunctionType *releaseHelperFactory[maxArchitecture]{}; +using ThreadsPerEUConfigs = StackVec; + class ReleaseHelper { public: static std::unique_ptr create(HardwareIpVersion hardwareIpVersion); @@ -49,6 +52,7 @@ class ReleaseHelper { virtual std::vector getSupportedNumGrfs() const = 0; virtual bool isBindlessAddressingDisabled() const = 0; virtual uint32_t getNumThreadsPerEu() const = 0; + virtual const ThreadsPerEUConfigs getThreadsPerEUConfigs() const = 0; protected: ReleaseHelper(HardwareIpVersion hardwareIpVersion) : hardwareIpVersion(hardwareIpVersion) {} @@ -82,6 +86,7 @@ class ReleaseHelperHw : public ReleaseHelper { std::vector getSupportedNumGrfs() const override; bool isBindlessAddressingDisabled() const override; uint32_t getNumThreadsPerEu() const override; + const StackVec getThreadsPerEUConfigs() const override; protected: ReleaseHelperHw(HardwareIpVersion hardwareIpVersion) : ReleaseHelper(hardwareIpVersion) {} diff --git a/shared/source/release_helper/release_helper_base.inl b/shared/source/release_helper/release_helper_base.inl index ae56b77dd9..a3cbde4d07 100644 --- a/shared/source/release_helper/release_helper_base.inl +++ b/shared/source/release_helper/release_helper_base.inl @@ -107,4 +107,9 @@ template uint32_t ReleaseHelperHw::getNumThreadsPerEu() const { return 8u; } + +template +const ThreadsPerEUConfigs ReleaseHelperHw::getThreadsPerEUConfigs() const { + return {4, 8}; +} } // namespace NEO diff --git a/shared/source/xe_hpc_core/gfx_core_helper_xe_hpc_core.cpp b/shared/source/xe_hpc_core/gfx_core_helper_xe_hpc_core.cpp index 4cdb19e6da..db197565f5 100644 --- a/shared/source/xe_hpc_core/gfx_core_helper_xe_hpc_core.cpp +++ b/shared/source/xe_hpc_core/gfx_core_helper_xe_hpc_core.cpp @@ -140,11 +140,6 @@ const StackVec GfxCoreHelperHw::getDeviceSubGroupSizes() cons return {16, 32}; } -template <> -const StackVec GfxCoreHelperHw::getThreadsPerEUConfigs() const { - return {4, 8}; -} - template <> size_t MemorySynchronizationCommands::getSizeForSingleAdditionalSynchronization(const RootDeviceEnvironment &rootDeviceEnvironment) { const auto &productHelper = rootDeviceEnvironment.getHelper(); diff --git a/shared/source/xe_hpg_core/gfx_core_helper_xe_hpg_core.cpp b/shared/source/xe_hpg_core/gfx_core_helper_xe_hpg_core.cpp index 2f471ee714..7e63ceaf09 100644 --- a/shared/source/xe_hpg_core/gfx_core_helper_xe_hpg_core.cpp +++ b/shared/source/xe_hpg_core/gfx_core_helper_xe_hpg_core.cpp @@ -94,11 +94,6 @@ void MemorySynchronizationCommands::addAdditionalSynchronizationForDirec EncodeSemaphore::addMiSemaphoreWaitCommand(commandStream, gpuAddress, EncodeSemaphore::invalidHardwareTag, COMPARE_OPERATION::COMPARE_OPERATION_SAD_NOT_EQUAL_SDD, false, false, false); } -template <> -const StackVec GfxCoreHelperHw::getThreadsPerEUConfigs() const { - return {4, 8}; -} - template <> bool GfxCoreHelperHw::isBufferSizeSuitableForCompression(const size_t size) const { if (DebugManager.flags.OverrideBufferSuitableForRenderCompression.get() != -1) { diff --git a/shared/test/common/mocks/mock_release_helper.h b/shared/test/common/mocks/mock_release_helper.h index ce84948222..85a9ed6ce6 100644 --- a/shared/test/common/mocks/mock_release_helper.h +++ b/shared/test/common/mocks/mock_release_helper.h @@ -33,5 +33,6 @@ class MockReleaseHelper : public ReleaseHelper { ADDMETHOD_CONST_NOBASE(getSupportedNumGrfs, std::vector, {128}, ()); ADDMETHOD_CONST_NOBASE(isBindlessAddressingDisabled, bool, true, ()); ADDMETHOD_CONST_NOBASE(getNumThreadsPerEu, uint32_t, 8u, ()); + ADDMETHOD_CONST_NOBASE(getThreadsPerEUConfigs, const ThreadsPerEUConfigs, {}, ()); }; } // namespace NEO diff --git a/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp b/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp index cc8fc2199f..0393312722 100644 --- a/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp +++ b/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp @@ -141,14 +141,6 @@ TEST_F(GfxCoreHelperTest, givenEngineTypeRcsWhenCsTraitsAreQueiredThenCorrectNam EXPECT_STREQ("RCS", csTraits.name.c_str()); } -using isTglLpOrBelow = IsAtMostProduct; -HWTEST2_F(GfxCoreHelperTest, givenGfxCoreHelperWhenGettingThreadsPerEUConfigsThenNoConfigsAreReturned, isTglLpOrBelow) { - auto &gfxCoreHelper = getHelper(); - - auto &configs = gfxCoreHelper.getThreadsPerEUConfigs(); - EXPECT_EQ(0U, configs.size()); -} - TEST_F(GfxCoreHelperTest, whenGetGpuTimeStampInNSIsCalledThenTimestampIsMaskedBasedOnResolution) { auto &gfxCoreHelper = getHelper(); diff --git a/shared/test/unit_test/release_helper/release_helper_12_55_tests.cpp b/shared/test/unit_test/release_helper/release_helper_12_55_tests.cpp index 97c7e49a92..a4ae348291 100644 --- a/shared/test/unit_test/release_helper/release_helper_12_55_tests.cpp +++ b/shared/test/unit_test/release_helper/release_helper_12_55_tests.cpp @@ -60,3 +60,7 @@ TEST_F(ReleaseHelper1255Tests, whenShouldAdjustCalledThenFalseReturned) { TEST_F(ReleaseHelper1255Tests, whenGettingSupportedNumGrfsThenCorrectValuesAreReturned) { whenGettingSupportedNumGrfsThenValues128And256Returned(); } + +TEST_F(ReleaseHelper1255Tests, whenGettingThreadsPerEuConfigsThen4And8AreReturned) { + whenGettingThreadsPerEuConfigsThen4And8AreReturned(); +} diff --git a/shared/test/unit_test/release_helper/release_helper_12_56_tests.cpp b/shared/test/unit_test/release_helper/release_helper_12_56_tests.cpp index 4c7de66448..94484da54d 100644 --- a/shared/test/unit_test/release_helper/release_helper_12_56_tests.cpp +++ b/shared/test/unit_test/release_helper/release_helper_12_56_tests.cpp @@ -60,3 +60,7 @@ TEST_F(ReleaseHelper1256Tests, whenShouldAdjustCalledThenFalseReturned) { TEST_F(ReleaseHelper1256Tests, whenGettingSupportedNumGrfsThenCorrectValuesAreReturned) { whenGettingSupportedNumGrfsThenValues128And256Returned(); } + +TEST_F(ReleaseHelper1256Tests, whenGettingThreadsPerEuConfigsThen4And8AreReturned) { + whenGettingThreadsPerEuConfigsThen4And8AreReturned(); +} \ No newline at end of file diff --git a/shared/test/unit_test/release_helper/release_helper_12_57_tests.cpp b/shared/test/unit_test/release_helper/release_helper_12_57_tests.cpp index 35d5c06690..a7350206fc 100644 --- a/shared/test/unit_test/release_helper/release_helper_12_57_tests.cpp +++ b/shared/test/unit_test/release_helper/release_helper_12_57_tests.cpp @@ -60,3 +60,7 @@ TEST_F(ReleaseHelper1257Tests, whenShouldAdjustCalledThenFalseReturned) { TEST_F(ReleaseHelper1257Tests, whenGettingSupportedNumGrfsThenCorrectValuesAreReturned) { whenGettingSupportedNumGrfsThenValues128And256Returned(); } + +TEST_F(ReleaseHelper1257Tests, whenGettingThreadsPerEuConfigsThen4And8AreReturned) { + whenGettingThreadsPerEuConfigsThen4And8AreReturned(); +} \ No newline at end of file diff --git a/shared/test/unit_test/release_helper/release_helper_12_70_tests.cpp b/shared/test/unit_test/release_helper/release_helper_12_70_tests.cpp index a3788fb281..5a51893bb3 100644 --- a/shared/test/unit_test/release_helper/release_helper_12_70_tests.cpp +++ b/shared/test/unit_test/release_helper/release_helper_12_70_tests.cpp @@ -75,3 +75,7 @@ TEST_F(ReleaseHelper1270Tests, whenCheckPreferredAllocationMethodThenAllocateByK TEST_F(ReleaseHelper1270Tests, whenGettingSupportedNumGrfsThenCorrectValuesAreReturned) { whenGettingSupportedNumGrfsThenValues128And256Returned(); } + +TEST_F(ReleaseHelper1270Tests, whenGettingThreadsPerEuConfigsThen4And8AreReturned) { + whenGettingThreadsPerEuConfigsThen4And8AreReturned(); +} \ No newline at end of file diff --git a/shared/test/unit_test/release_helper/release_helper_12_71_tests.cpp b/shared/test/unit_test/release_helper/release_helper_12_71_tests.cpp index 73ff0b2929..d11384b822 100644 --- a/shared/test/unit_test/release_helper/release_helper_12_71_tests.cpp +++ b/shared/test/unit_test/release_helper/release_helper_12_71_tests.cpp @@ -76,3 +76,7 @@ TEST_F(ReleaseHelper1271Tests, whenCheckPreferredAllocationMethodThenAllocateByK TEST_F(ReleaseHelper1271Tests, whenGettingSupportedNumGrfsThenCorrectValuesAreReturned) { whenGettingSupportedNumGrfsThenValues128And256Returned(); } + +TEST_F(ReleaseHelper1271Tests, whenGettingThreadsPerEuConfigsThen4And8AreReturned) { + whenGettingThreadsPerEuConfigsThen4And8AreReturned(); +} \ No newline at end of file diff --git a/shared/test/unit_test/release_helper/release_helper_tests_base.cpp b/shared/test/unit_test/release_helper/release_helper_tests_base.cpp index b351c3ea01..0b4f69e3f5 100644 --- a/shared/test/unit_test/release_helper/release_helper_tests_base.cpp +++ b/shared/test/unit_test/release_helper/release_helper_tests_base.cpp @@ -115,3 +115,16 @@ void ReleaseHelperTestsBase::whenGettingSupportedNumGrfsThenValues128And256Retur EXPECT_EQ(expectedValues, releaseHelper->getSupportedNumGrfs()); } } + +void ReleaseHelperTestsBase::whenGettingThreadsPerEuConfigsThen4And8AreReturned() { + for (auto &revision : getRevisions()) { + ipVersion.revision = revision; + releaseHelper = ReleaseHelper::create(ipVersion); + ASSERT_NE(nullptr, releaseHelper); + auto &configs = releaseHelper->getThreadsPerEUConfigs(); + + EXPECT_EQ(2U, configs.size()); + EXPECT_EQ(4U, configs[0]); + EXPECT_EQ(8U, configs[1]); + } +} diff --git a/shared/test/unit_test/release_helper/release_helper_tests_base.h b/shared/test/unit_test/release_helper/release_helper_tests_base.h index c0e378372c..a0cae80d58 100644 --- a/shared/test/unit_test/release_helper/release_helper_tests_base.h +++ b/shared/test/unit_test/release_helper/release_helper_tests_base.h @@ -29,6 +29,7 @@ struct ReleaseHelperTestsBase : public ::testing::Test { void whenShouldAdjustCalledThenTrueReturned(); void whenShouldAdjustCalledThenFalseReturned(); void whenGettingSupportedNumGrfsThenValues128And256Returned(); + void whenGettingThreadsPerEuConfigsThen4And8AreReturned(); virtual std::vector getRevisions() = 0; diff --git a/shared/test/unit_test/xe_hpg_core/gfx_core_helper_tests_xe_hpg_core.cpp b/shared/test/unit_test/xe_hpg_core/gfx_core_helper_tests_xe_hpg_core.cpp index 8c0e9e18ff..bc4c868a56 100644 --- a/shared/test/unit_test/xe_hpg_core/gfx_core_helper_tests_xe_hpg_core.cpp +++ b/shared/test/unit_test/xe_hpg_core/gfx_core_helper_tests_xe_hpg_core.cpp @@ -142,16 +142,6 @@ XE_HPG_CORETEST_F(GfxCoreHelperTestXeHpgCore, GivenVariousValuesWhenAlignSlmSize EXPECT_EQ(65536u, gfxCoreHelper.alignSlmSize(65536)); } -XE_HPG_CORETEST_F(GfxCoreHelperTestXeHpgCore, givenGfxCoreHelperWhenGettingThreadsPerEUConfigsThenCorrectConfigsAreReturned) { - auto &gfxCoreHelper = getHelper(); - - auto &configs = gfxCoreHelper.getThreadsPerEUConfigs(); - - EXPECT_EQ(2U, configs.size()); - EXPECT_EQ(4U, configs[0]); - EXPECT_EQ(8U, configs[1]); -} - XE_HPG_CORETEST_F(ProductHelperTestXeHpgCore, givenProductHelperWhenCheckDummyBlitWaRequiredThenReturnTrue) { auto &productHelper = getHelper(); EXPECT_TRUE(productHelper.isDummyBlitWaRequired());