From f7685a93e4572410615bc0082f56ff760d3ba80e Mon Sep 17 00:00:00 2001 From: Rafal Maziejuk Date: Thu, 9 Feb 2023 15:13:43 +0000 Subject: [PATCH] Adjust maxWorkGroupSize value Related-To: NEO-7357 Signed-off-by: Rafal Maziejuk --- level_zero/core/source/kernel/kernel_imp.cpp | 3 ++- .../sources/cmdlist/test_cmdlist_7.cpp | 16 +++++-------- opencl/source/kernel/kernel.cpp | 7 ++++-- opencl/test/unit_test/kernel/kernel_tests.cpp | 2 +- shared/source/device/device_caps.cpp | 3 +++ shared/source/helpers/gfx_core_helper.h | 6 +++++ .../source/helpers/gfx_core_helper_base.inl | 10 ++++++++ .../test/common/gen12lp/test_traits_gen12lp.h | 3 ++- .../xe_hpc_core/test_traits_xe_hpc_core.h | 3 ++- .../xe_hpg_core/test_traits_xe_hpg_core.h | 3 ++- .../stream_properties_tests_common.cpp | 13 ++++++++-- ..._encode_dispatch_kernel_xehp_and_later.cpp | 10 ++++++-- .../helpers/gfx_core_helper_tests.cpp | 24 ++++++++++++++++++- .../os_interface/hw_info_config_tests.cpp | 7 ++++-- 14 files changed, 86 insertions(+), 24 deletions(-) diff --git a/level_zero/core/source/kernel/kernel_imp.cpp b/level_zero/core/source/kernel/kernel_imp.cpp index 5df718bd63..13a689f741 100644 --- a/level_zero/core/source/kernel/kernel_imp.cpp +++ b/level_zero/core/source/kernel/kernel_imp.cpp @@ -737,7 +737,9 @@ ze_result_t KernelImp::getProperties(ze_kernel_properties_t *pKernelProperties) memset(pKernelProperties->uuid.kid, 0, ZE_MAX_KERNEL_UUID_SIZE); memset(pKernelProperties->uuid.mid, 0, ZE_MAX_MODULE_UUID_SIZE); + const auto &gfxCoreHelper = this->module->getDevice()->getGfxCoreHelper(); uint32_t maxKernelWorkGroupSize = static_cast(this->module->getDevice()->getNEODevice()->getDeviceInfo().maxWorkGroupSize); + maxKernelWorkGroupSize = gfxCoreHelper.adjustMaxWorkGroupSize(kernelDescriptor.kernelAttributes.numGrfRequired, kernelDescriptor.kernelAttributes.simdSize, maxKernelWorkGroupSize); pKernelProperties->maxNumSubgroups = maxKernelWorkGroupSize / kernelDescriptor.kernelAttributes.simdSize; void *pNext = pKernelProperties->pNext; @@ -748,7 +750,6 @@ ze_result_t KernelImp::getProperties(ze_kernel_properties_t *pKernelProperties) reinterpret_cast(extendedProperties); preferredGroupSizeProperties->preferredMultiple = this->kernelImmData->getKernelInfo()->getMaxSimdSize(); - auto &gfxCoreHelper = this->module->getDevice()->getGfxCoreHelper(); if (gfxCoreHelper.isFusedEuDispatchEnabled(this->module->getDevice()->getHwInfo(), kernelDescriptor.kernelAttributes.flags.requiresDisabledEUFusion)) { preferredGroupSizeProperties->preferredMultiple *= 2; } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp index 48bad2d29e..45b999382d 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp @@ -319,15 +319,7 @@ HWTEST2_F(CommandListAppendLaunchKernel, givenSignalEventWhenAppendLaunchIndirec context->freeMem(alloc); } -struct ProgramChangedFieldsInComputeMode { - template - static constexpr bool isMatched() { - if (productFamily == IGFX_BROADWELL) - return false; - return TestTraits::get()>::programOnlyChangedFieldsInComputeStateMode; - } -}; -HWTEST2_F(CommandListAppendLaunchKernel, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenChangedFieldsAreDirty, ProgramChangedFieldsInComputeMode) { +HWTEST2_F(CommandListAppendLaunchKernel, GivenComputeModePropertiesWhenUpdateStreamPropertiesIsCalledTwiceThenChangedFieldsAreDirty, IsAtLeastGen12lp) { DebugManagerStateRestore restorer; auto &productHelper = device->getProductHelper(); @@ -360,7 +352,11 @@ HWTEST2_F(CommandListAppendLaunchKernel, GivenComputeModePropertiesWhenUpdateStr const_cast(&kernel.getKernelDescriptor())->kernelAttributes.numGrfRequired = 0x80; commandList->updateStreamProperties(kernel, false, &launchKernelArgs, false); - EXPECT_EQ(productHelper.isGrfNumReportedWithScm(), commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty); + if constexpr (TestTraits::largeGrfModeInStateComputeModeSupported) { + EXPECT_EQ(productHelper.isGrfNumReportedWithScm(), commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty); + } else { + EXPECT_EQ(0, commandList->finalStreamState.stateComputeMode.largeGrfMode.isDirty); + } if (productHelper.getScmPropertyCoherencyRequiredSupport()) { EXPECT_EQ(0, commandList->finalStreamState.stateComputeMode.isCoherencyRequired.value); } else { diff --git a/opencl/source/kernel/kernel.cpp b/opencl/source/kernel/kernel.cpp index bcebaa9ff6..1cee484c4c 100644 --- a/opencl/source/kernel/kernel.cpp +++ b/opencl/source/kernel/kernel.cpp @@ -2244,11 +2244,14 @@ bool Kernel::areMultipleSubDevicesInContext() const { } void Kernel::reconfigureKernel() { - auto &kernelDescriptor = kernelInfo.kernelDescriptor; + const auto &kernelDescriptor = kernelInfo.kernelDescriptor; if (kernelDescriptor.kernelAttributes.numGrfRequired == GrfConfig::LargeGrfNumber && kernelDescriptor.kernelAttributes.simdSize != 32) { - maxKernelWorkGroupSize >>= 1; + this->maxKernelWorkGroupSize >>= 1; } + const auto &gfxCoreHelper = getDevice().getGfxCoreHelper(); + this->maxKernelWorkGroupSize = gfxCoreHelper.adjustMaxWorkGroupSize(kernelDescriptor.kernelAttributes.numGrfRequired, kernelDescriptor.kernelAttributes.simdSize, this->maxKernelWorkGroupSize); + this->containsStatelessWrites = kernelDescriptor.kernelAttributes.flags.usesStatelessWrites; this->systolicPipelineSelectMode = kernelDescriptor.kernelAttributes.flags.usesSystolicPipelineSelectMode; } diff --git a/opencl/test/unit_test/kernel/kernel_tests.cpp b/opencl/test/unit_test/kernel/kernel_tests.cpp index d66c22331b..e163118b9c 100644 --- a/opencl/test/unit_test/kernel/kernel_tests.cpp +++ b/opencl/test/unit_test/kernel/kernel_tests.cpp @@ -3173,7 +3173,7 @@ HWTEST_F(KernelLargeGrfTests, GivenLargeGrfAndSimdSizeWhenGettingMaxWorkGroupSiz { MockKernel kernel(program.get(), *pKernelInfo, *pClDevice); - pKernelInfo->kernelDescriptor.kernelAttributes.numGrfRequired = GrfConfig::LargeGrfNumber - 1; + pKernelInfo->kernelDescriptor.kernelAttributes.numGrfRequired = GrfConfig::DefaultGrfNumber; EXPECT_EQ(CL_SUCCESS, kernel.initialize()); EXPECT_EQ(pDevice->getDeviceInfo().maxWorkGroupSize, *kernel.maxWorkGroupSizeForCrossThreadData); EXPECT_EQ(pDevice->getDeviceInfo().maxWorkGroupSize, kernel.maxKernelWorkGroupSize); diff --git a/shared/source/device/device_caps.cpp b/shared/source/device/device_caps.cpp index a68b8b8e1a..a04c97dd34 100644 --- a/shared/source/device/device_caps.cpp +++ b/shared/source/device/device_caps.cpp @@ -143,6 +143,9 @@ void Device::initializeCaps() { maxWS = Math::prevPowerOfTwo(maxWS); deviceInfo.maxWorkGroupSize = std::min(maxWS, 1024u); + const auto minGrfSize = gfxCoreHelper.getMinimalGrfSize(); + deviceInfo.maxWorkGroupSize = gfxCoreHelper.adjustMaxWorkGroupSize(minGrfSize, simdSizeUsed, static_cast(deviceInfo.maxWorkGroupSize)); + if (DebugManager.flags.OverrideMaxWorkgroupSize.get() != -1) { deviceInfo.maxWorkGroupSize = DebugManager.flags.OverrideMaxWorkgroupSize.get(); } diff --git a/shared/source/helpers/gfx_core_helper.h b/shared/source/helpers/gfx_core_helper.h index b28dc4f4ab..1215ae51ab 100644 --- a/shared/source/helpers/gfx_core_helper.h +++ b/shared/source/helpers/gfx_core_helper.h @@ -104,6 +104,7 @@ class GfxCoreHelper { virtual bool isWaDisableRccRhwoOptimizationRequired() const = 0; virtual bool isAdditionalFeatureFlagRequired(const FeatureTable *featureTable) const = 0; virtual uint32_t getMinimalSIMDSize() const = 0; + virtual uint32_t getMinimalGrfSize() const = 0; virtual bool isOffsetToSkipSetFFIDGPWARequired(const HardwareInfo &hwInfo, const ProductHelper &productHelper) const = 0; virtual bool isFusedEuDispatchEnabled(const HardwareInfo &hwInfo, bool disableEUFusionForKernel) const = 0; virtual uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double frequency) const = 0; @@ -119,6 +120,7 @@ class GfxCoreHelper { virtual bool isCooperativeDispatchSupported(const EngineGroupType engineGroupType, const RootDeviceEnvironment &rootDeviceEnvironment) const = 0; virtual uint32_t adjustMaxWorkGroupCount(uint32_t maxWorkGroupCount, const EngineGroupType engineGroupType, const RootDeviceEnvironment &rootDeviceEnvironment, bool isEngineInstanced) const = 0; + virtual uint32_t adjustMaxWorkGroupSize(const uint32_t numGrf, const uint32_t simd, const uint32_t defaultMaxGroupSize) const = 0; virtual size_t getMaxFillPaternSizeForCopyEngine() const = 0; virtual size_t getSipKernelMaxDbgSurfaceSize(const HardwareInfo &hwInfo) const = 0; virtual bool isSipWANeeded(const HardwareInfo &hwInfo) const = 0; @@ -298,6 +300,8 @@ class GfxCoreHelperHw : public GfxCoreHelper { uint32_t getMinimalSIMDSize() const override; + uint32_t getMinimalGrfSize() const override; + uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double frequency) const override; uint32_t getGlobalTimeStampBits() const override; @@ -321,6 +325,8 @@ class GfxCoreHelperHw : public GfxCoreHelper { uint32_t adjustMaxWorkGroupCount(uint32_t maxWorkGroupCount, const EngineGroupType engineGroupType, const RootDeviceEnvironment &rootDeviceEnvironment, bool isEngineInstanced) const override; + uint32_t adjustMaxWorkGroupSize(const uint32_t numGrf, const uint32_t simd, const uint32_t defaultMaxGroupSize) const override; + size_t getMaxFillPaternSizeForCopyEngine() const override; size_t getSipKernelMaxDbgSurfaceSize(const HardwareInfo &hwInfo) const override; diff --git a/shared/source/helpers/gfx_core_helper_base.inl b/shared/source/helpers/gfx_core_helper_base.inl index beef8c353d..e17e8336d4 100644 --- a/shared/source/helpers/gfx_core_helper_base.inl +++ b/shared/source/helpers/gfx_core_helper_base.inl @@ -683,4 +683,14 @@ template bool GfxCoreHelperHw::isRelaxedOrderingSupported() const { return false; } + +template +uint32_t GfxCoreHelperHw::adjustMaxWorkGroupSize(const uint32_t numGrf, const uint32_t simd, const uint32_t defaultMaxGroupSize) const { + return defaultMaxGroupSize; +} + +template +uint32_t GfxCoreHelperHw::getMinimalGrfSize() const { + return 128u; +} } // namespace NEO diff --git a/shared/test/common/gen12lp/test_traits_gen12lp.h b/shared/test/common/gen12lp/test_traits_gen12lp.h index 02e210fdf9..5ab82682e4 100644 --- a/shared/test/common/gen12lp/test_traits_gen12lp.h +++ b/shared/test/common/gen12lp/test_traits_gen12lp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2022 Intel Corporation + * Copyright (C) 2021-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -19,4 +19,5 @@ struct TestTraits { static constexpr bool implementsPreambleThreadArbitration = false; static constexpr bool forceGpuNonCoherent = true; static constexpr bool imagesSupported = true; + static constexpr bool largeGrfModeInStateComputeModeSupported = true; }; diff --git a/shared/test/common/xe_hpc_core/test_traits_xe_hpc_core.h b/shared/test/common/xe_hpc_core/test_traits_xe_hpc_core.h index 3759ca0775..0d3d519313 100644 --- a/shared/test/common/xe_hpc_core/test_traits_xe_hpc_core.h +++ b/shared/test/common/xe_hpc_core/test_traits_xe_hpc_core.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2022 Intel Corporation + * Copyright (C) 2021-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -29,4 +29,5 @@ struct TestTraits { static constexpr bool isUnTypedDataPortCacheFlushSupported = true; static constexpr bool imagesSupported = false; static constexpr bool isPipeControlExtendedPriorToNonPipelinedStateCommandSupported = true; + static constexpr bool largeGrfModeInStateComputeModeSupported = true; }; diff --git a/shared/test/common/xe_hpg_core/test_traits_xe_hpg_core.h b/shared/test/common/xe_hpg_core/test_traits_xe_hpg_core.h index 18f805ca25..19d70264aa 100644 --- a/shared/test/common/xe_hpg_core/test_traits_xe_hpg_core.h +++ b/shared/test/common/xe_hpg_core/test_traits_xe_hpg_core.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2022 Intel Corporation + * Copyright (C) 2021-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -29,4 +29,5 @@ struct TestTraits { static constexpr bool isUnTypedDataPortCacheFlushSupported = true; static constexpr bool imagesSupported = true; static constexpr bool isPipeControlExtendedPriorToNonPipelinedStateCommandSupported = false; + static constexpr bool largeGrfModeInStateComputeModeSupported = true; }; diff --git a/shared/test/unit_test/command_stream/stream_properties_tests_common.cpp b/shared/test/unit_test/command_stream/stream_properties_tests_common.cpp index 03fb777931..8227fbb9e1 100644 --- a/shared/test/unit_test/command_stream/stream_properties_tests_common.cpp +++ b/shared/test/unit_test/command_stream/stream_properties_tests_common.cpp @@ -15,8 +15,11 @@ #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/default_hw_info.h" #include "shared/test/common/mocks/mock_execution_environment.h" +#include "shared/test/common/test_macros/hw_test.h" #include "shared/test/common/test_macros/test.h" +#include "test_traits_common.h" + using namespace NEO; struct MockStateComputeModeProperties : public StateComputeModeProperties { @@ -39,6 +42,8 @@ struct MockStateBaseAddressProperties : public StateBaseAddressProperties { using StateBaseAddressProperties::stateBaseAddressPropertiesSupport; }; +using StreamPropertiesTests = ::testing::Test; + TEST(StreamPropertiesTests, whenPropertyValueIsChangedThenProperStateIsSet) { NEO::StreamProperty streamProperty; @@ -106,7 +111,7 @@ TEST(StreamPropertiesTests, whenSettingCooperativeKernelPropertiesThenCorrectVal } } -TEST(StreamPropertiesTests, whenSettingStateComputeModePropertiesThenCorrectValuesAreSet) { +HWTEST2_F(StreamPropertiesTests, whenSettingStateComputeModePropertiesThenCorrectValuesAreSet, IsAtLeastGen12lp) { DebugManagerStateRestore restorer; DebugManager.flags.ForceGrfNumProgrammingWithScm.set(1); DebugManager.flags.ForceThreadArbitrationPolicyProgrammingWithScm.set(1); @@ -129,7 +134,11 @@ TEST(StreamPropertiesTests, whenSettingStateComputeModePropertiesThenCorrectValu for (auto largeGrf : ::testing::Bool()) { for (auto threadArbitrationPolicy : threadArbitrationPolicyValues) { properties.stateComputeMode.setPropertiesAll(requiresCoherency, largeGrf ? 256 : 128, threadArbitrationPolicy, preemptionMode, rootDeviceEnvironment); - EXPECT_EQ(largeGrf, properties.stateComputeMode.largeGrfMode.value); + if constexpr (TestTraits::largeGrfModeInStateComputeModeSupported) { + EXPECT_EQ(largeGrf, properties.stateComputeMode.largeGrfMode.value); + } else { + EXPECT_EQ(-1, properties.stateComputeMode.largeGrfMode.value); + } if (scmPropertiesSupport.coherencyRequired) { EXPECT_EQ(requiresCoherency, properties.stateComputeMode.isCoherencyRequired.value); } else { diff --git a/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp b/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp index 7a6eab3539..2e4e79c486 100644 --- a/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp +++ b/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp @@ -26,6 +26,8 @@ #include "shared/test/unit_test/fixtures/command_container_fixture.h" #include "shared/test/unit_test/mocks/mock_dispatch_kernel_encoder_interface.h" +#include "test_traits_common.h" + #include using namespace NEO; @@ -517,7 +519,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenForceBtpPrefetchModeD } } -HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenDispatchInterfaceWhenNumRequiredGrfIsNotDefaultThenStateComputeModeCommandAdded) { +HWTEST2_F(CommandEncodeStatesTest, givenDispatchInterfaceWhenNumRequiredGrfIsNotDefaultThenStateComputeModeCommandAdded, IsAtLeastGen12lp) { DebugManagerStateRestore restorer; DebugManager.flags.ForceGrfNumProgrammingWithScm.set(1); @@ -528,7 +530,11 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenDispatchInterfaceWhen EXPECT_FALSE(streamProperties.stateComputeMode.isDirty()); streamProperties.stateComputeMode.setPropertiesAll(false, 256, 0u, PreemptionMode::Disabled, rootDeviceEnvironment); - EXPECT_TRUE(streamProperties.stateComputeMode.isDirty()); + if constexpr (TestTraits::largeGrfModeInStateComputeModeSupported) { + EXPECT_TRUE(streamProperties.stateComputeMode.isDirty()); + } else { + EXPECT_FALSE(streamProperties.stateComputeMode.isDirty()); + } } HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenInlineDataRequiredWhenEncodingWalkerThenEmitInlineParameterIsSet) { 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 e5087fdc1c..831796a9cc 100644 --- a/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp +++ b/shared/test/unit_test/helpers/gfx_core_helper_tests.cpp @@ -927,10 +927,15 @@ HWCMDTEST_F(IGFX_GEN8_CORE, GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenIs } HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenMinimalSIMDSizeIsQueriedThen8IsReturned) { - auto &gfxCoreHelper = getHelper(); + const auto &gfxCoreHelper = getHelper(); EXPECT_EQ(8u, gfxCoreHelper.getMinimalSIMDSize()); } +HWTEST_F(GfxCoreHelperTest, givenDefaultGfxCoreHelperHwWhenMinimalGrfSizeIsQueriedThen128IsReturned) { + const auto &gfxCoreHelper = getHelper(); + EXPECT_EQ(128u, gfxCoreHelper.getMinimalGrfSize()); +} + HWCMDTEST_F(IGFX_GEN8_CORE, GfxCoreHelperTest, WhenIsFusedEuDispatchEnabledIsCalledThenFalseIsReturned) { if (hardwareInfo.platform.eRenderCoreFamily == IGFX_GEN12LP_CORE) { GTEST_SKIP(); @@ -1458,6 +1463,23 @@ HWTEST_F(GfxCoreHelperTest, whenIsDynamicallyPopulatedisTrueThengetHighestEnable EXPECT_EQ(maxSlice, 7u); } +HWTEST_F(GfxCoreHelperTest, givenNumGrfAndSimdSizeWhenAdjustingMaxWorkGroupSizeThenAlwaysReturnDeviceDefault) { + const auto &gfxCoreHelper = getHelper(); + constexpr auto defaultMaxGroupSize = 1024u; + + uint32_t simdSize = 16u; + uint32_t numGrfRequired = GrfConfig::LargeGrfNumber; + EXPECT_EQ(defaultMaxGroupSize, gfxCoreHelper.adjustMaxWorkGroupSize(numGrfRequired, simdSize, defaultMaxGroupSize)); + + simdSize = 32u; + numGrfRequired = GrfConfig::LargeGrfNumber; + EXPECT_EQ(defaultMaxGroupSize, gfxCoreHelper.adjustMaxWorkGroupSize(numGrfRequired, simdSize, defaultMaxGroupSize)); + + simdSize = 16u; + numGrfRequired = GrfConfig::DefaultGrfNumber; + EXPECT_EQ(defaultMaxGroupSize, gfxCoreHelper.adjustMaxWorkGroupSize(numGrfRequired, simdSize, defaultMaxGroupSize)); +} + HWTEST_F(ProductHelperCommonTest, givenPatIndexAndAllocationTypeWhenCallOverridePatIndexThenSameIndexIsReturned) { auto &gfxCoreHelper = getHelper(); uint64_t patIndex = 1u; diff --git a/shared/test/unit_test/os_interface/hw_info_config_tests.cpp b/shared/test/unit_test/os_interface/hw_info_config_tests.cpp index 81332bc2bd..9cc791188f 100644 --- a/shared/test/unit_test/os_interface/hw_info_config_tests.cpp +++ b/shared/test/unit_test/os_interface/hw_info_config_tests.cpp @@ -23,6 +23,7 @@ #include "shared/test/common/test_macros/hw_test.h" #include "gtest/gtest.h" +#include "test_traits_common.h" using namespace NEO; @@ -503,7 +504,7 @@ HWTEST_F(ProductHelperTest, givenSamplerStateWhenAdjustSamplerStateThenNothingIs EXPECT_EQ(0, memcmp(&initialState, &state, sizeof(SAMPLER_STATE))); } -HWTEST_F(ProductHelperTest, WhenFillingScmPropertiesSupportThenExpectUseCorrectGetters) { +HWTEST2_F(ProductHelperTest, WhenFillingScmPropertiesSupportThenExpectUseCorrectGetters, IsAtLeastGen12lp) { StateComputeModePropertiesSupport scmPropertiesSupport = {}; productHelper->fillScmPropertiesSupportStructure(scmPropertiesSupport); @@ -512,8 +513,10 @@ HWTEST_F(ProductHelperTest, WhenFillingScmPropertiesSupportThenExpectUseCorrectG EXPECT_EQ(productHelper->getScmPropertyCoherencyRequiredSupport(), scmPropertiesSupport.coherencyRequired); EXPECT_EQ(productHelper->getScmPropertyZPassAsyncComputeThreadLimitSupport(), scmPropertiesSupport.zPassAsyncComputeThreadLimit); EXPECT_EQ(productHelper->getScmPropertyPixelAsyncComputeThreadLimitSupport(), scmPropertiesSupport.pixelAsyncComputeThreadLimit); - EXPECT_EQ(productHelper->isGrfNumReportedWithScm(), scmPropertiesSupport.largeGrfMode); EXPECT_EQ(productHelper->getScmPropertyDevicePreemptionModeSupport(), scmPropertiesSupport.devicePreemptionMode); + if constexpr (TestTraits::largeGrfModeInStateComputeModeSupported) { + EXPECT_EQ(productHelper->isGrfNumReportedWithScm(), scmPropertiesSupport.largeGrfMode); + } } HWTEST_F(ProductHelperTest, WhenFillingFrontEndPropertiesSupportThenExpectUseCorrectGetters) {