From 3eb98163a893b031ddcde74b5702384ccb3f5df2 Mon Sep 17 00:00:00 2001 From: Mateusz Jablonski Date: Wed, 13 Sep 2023 09:55:17 +0000 Subject: [PATCH] fix: define isCachingOnCpuAvailable per hw release Related-To: NEO-8187 Signed-off-by: Mateusz Jablonski --- .../source/gmm_helper/cache_settings_helper.cpp | 4 +++- shared/source/os_interface/product_helper.h | 1 - shared/source/os_interface/product_helper.inl | 5 ----- shared/source/os_interface/product_helper_hw.h | 1 - shared/source/release_helper/release_helper.h | 2 ++ .../release_helper/release_helper_base.inl | 5 +++++ .../release_helper_common_xe_lpg.inl | 5 +++++ .../xe_hpg_core/linux/product_helper_mtl.cpp | 5 ----- .../xe_hpg_core/windows/product_helper_mtl.cpp | 5 ----- shared/test/unit_test/gmm_helper/gmm_tests.cpp | 16 +++++++++++----- .../os_interface/product_helper_tests.cpp | 4 ---- .../windows/wddm_memory_manager_tests.cpp | 8 ++++++-- .../release_helper_12_55_tests.cpp | 1 + .../release_helper_12_56_tests.cpp | 1 + .../release_helper_12_57_tests.cpp | 1 + .../release_helper_12_70_tests.cpp | 1 + .../release_helper_12_71_tests.cpp | 1 + .../xe_hpg_core/mtl/excludes_xe_hpg_core_mtl.cpp | 1 - .../xe_hpg_core/mtl/product_helper_tests_mtl.cpp | 4 ---- 19 files changed, 37 insertions(+), 34 deletions(-) diff --git a/shared/source/gmm_helper/cache_settings_helper.cpp b/shared/source/gmm_helper/cache_settings_helper.cpp index e3e3e14ad1..69cd223c71 100644 --- a/shared/source/gmm_helper/cache_settings_helper.cpp +++ b/shared/source/gmm_helper/cache_settings_helper.cpp @@ -13,6 +13,7 @@ #include "shared/source/helpers/hw_info.h" #include "shared/source/memory_manager/allocation_type.h" #include "shared/source/os_interface/product_helper.h" +#include "shared/source/release_helper/release_helper.h" namespace NEO { @@ -37,7 +38,8 @@ bool CacheSettingsHelper::preferNoCpuAccess(GMM_RESOURCE_USAGE_TYPE_ENUM gmmReso if (rootDeviceEnvironment.isWddmOnLinux()) { return false; } - if (rootDeviceEnvironment.getProductHelper().isCachingOnCpuAvailable()) { + auto releaseHelper = rootDeviceEnvironment.getReleaseHelper(); + if (!releaseHelper || releaseHelper->isCachingOnCpuAvailable()) { return false; } return (gmmResourceUsageType != GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER); diff --git a/shared/source/os_interface/product_helper.h b/shared/source/os_interface/product_helper.h index 9191468c4c..66dde308d2 100644 --- a/shared/source/os_interface/product_helper.h +++ b/shared/source/os_interface/product_helper.h @@ -204,7 +204,6 @@ class ProductHelper { virtual uint32_t getNumberOfPartsInTileForConcurrentKernel() const = 0; virtual bool is48bResourceNeededForRayTracing() const = 0; virtual bool disableL3CacheForDebug(const HardwareInfo &hwInfo) const = 0; - virtual bool isCachingOnCpuAvailable() const = 0; virtual bool isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const = 0; virtual bool getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const = 0; virtual bool isResolvingSubDeviceIDNeeded(const ReleaseHelper *releaseHelper) const = 0; diff --git a/shared/source/os_interface/product_helper.inl b/shared/source/os_interface/product_helper.inl index 3d65308c8e..af9b0db4bc 100644 --- a/shared/source/os_interface/product_helper.inl +++ b/shared/source/os_interface/product_helper.inl @@ -798,11 +798,6 @@ bool ProductHelperHw::disableL3CacheForDebug(const HardwareInfo &) c return false; } -template -bool ProductHelperHw::isCachingOnCpuAvailable() const { - return true; -} - template bool ProductHelperHw::isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const { return false; diff --git a/shared/source/os_interface/product_helper_hw.h b/shared/source/os_interface/product_helper_hw.h index ab196bbbae..bce78c7fe3 100644 --- a/shared/source/os_interface/product_helper_hw.h +++ b/shared/source/os_interface/product_helper_hw.h @@ -157,7 +157,6 @@ class ProductHelperHw : public ProductHelper { bool isCalculationForDisablingEuFusionWithDpasNeeded(const HardwareInfo &hwInfo) const override; bool is48bResourceNeededForRayTracing() const override; bool disableL3CacheForDebug(const HardwareInfo &hwInfo) const override; - bool isCachingOnCpuAvailable() const override; bool isSkippingStatefulInformationRequired(const KernelDescriptor &kernelDescriptor) const override; bool getMediaFrequencyTileIndex(const ReleaseHelper *releaseHelper, uint32_t &tileIndex) const override; bool isResolvingSubDeviceIDNeeded(const ReleaseHelper *releaseHelper) const override; diff --git a/shared/source/release_helper/release_helper.h b/shared/source/release_helper/release_helper.h index 3b5fe3c0ae..40bfac0f99 100644 --- a/shared/source/release_helper/release_helper.h +++ b/shared/source/release_helper/release_helper.h @@ -37,6 +37,7 @@ class ReleaseHelper { virtual int getProductMaxPreferredSlmSize(int preferredEnumValue) const = 0; virtual bool getMediaFrequencyTileIndex(uint32_t &tileIndex) const = 0; virtual bool isResolvingSubDeviceIDNeeded() const = 0; + virtual bool isCachingOnCpuAvailable() const = 0; virtual std::optional getPreferredAllocationMethod(AllocationType allocationType) const = 0; protected: @@ -61,6 +62,7 @@ class ReleaseHelperHw : public ReleaseHelper { int getProductMaxPreferredSlmSize(int preferredEnumValue) const override; bool getMediaFrequencyTileIndex(uint32_t &tileIndex) const override; bool isResolvingSubDeviceIDNeeded() const override; + bool isCachingOnCpuAvailable() const override; std::optional getPreferredAllocationMethod(AllocationType allocationType) const override; private: diff --git a/shared/source/release_helper/release_helper_base.inl b/shared/source/release_helper/release_helper_base.inl index c0851fab2e..cd7cebbeb9 100644 --- a/shared/source/release_helper/release_helper_base.inl +++ b/shared/source/release_helper/release_helper_base.inl @@ -58,6 +58,11 @@ bool ReleaseHelperHw::isResolvingSubDeviceIDNeeded() const { return true; } +template +bool ReleaseHelperHw::isCachingOnCpuAvailable() const { + return true; +} + template std::optional ReleaseHelperHw::getPreferredAllocationMethod(AllocationType allocationType) const { return {}; diff --git a/shared/source/release_helper/release_helper_common_xe_lpg.inl b/shared/source/release_helper/release_helper_common_xe_lpg.inl index dd907cc708..8cfaa36eec 100644 --- a/shared/source/release_helper/release_helper_common_xe_lpg.inl +++ b/shared/source/release_helper/release_helper_common_xe_lpg.inl @@ -26,4 +26,9 @@ std::optional ReleaseHelperHw::getPreferredA } } +template <> +bool ReleaseHelperHw::isCachingOnCpuAvailable() const { + return false; +} + } // namespace NEO diff --git a/shared/source/xe_hpg_core/linux/product_helper_mtl.cpp b/shared/source/xe_hpg_core/linux/product_helper_mtl.cpp index 33675d906c..4c0ef2aa41 100644 --- a/shared/source/xe_hpg_core/linux/product_helper_mtl.cpp +++ b/shared/source/xe_hpg_core/linux/product_helper_mtl.cpp @@ -17,11 +17,6 @@ template <> bool ProductHelperHw::isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return true; } - -template <> -bool ProductHelperHw::isCachingOnCpuAvailable() const { - return false; -} } // namespace NEO template class NEO::ProductHelperHw; diff --git a/shared/source/xe_hpg_core/windows/product_helper_mtl.cpp b/shared/source/xe_hpg_core/windows/product_helper_mtl.cpp index 12bf6e8b8b..8368893a1f 100644 --- a/shared/source/xe_hpg_core/windows/product_helper_mtl.cpp +++ b/shared/source/xe_hpg_core/windows/product_helper_mtl.cpp @@ -17,11 +17,6 @@ template <> bool ProductHelperHw::isDirectSubmissionSupported(const HardwareInfo &hwInfo) const { return true; } - -template <> -bool ProductHelperHw::isCachingOnCpuAvailable() const { - return false; -} } // namespace NEO template class NEO::ProductHelperHw; diff --git a/shared/test/unit_test/gmm_helper/gmm_tests.cpp b/shared/test/unit_test/gmm_helper/gmm_tests.cpp index 1cc06b2251..275df5e284 100644 --- a/shared/test/unit_test/gmm_helper/gmm_tests.cpp +++ b/shared/test/unit_test/gmm_helper/gmm_tests.cpp @@ -8,6 +8,7 @@ #include "shared/source/gmm_helper/cache_settings_helper.h" #include "shared/source/gmm_helper/gmm.h" #include "shared/source/gmm_helper/gmm_helper.h" +#include "shared/source/release_helper/release_helper.h" #include "shared/test/common/fixtures/mock_execution_environment_gmm_fixture.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/mocks/mock_execution_environment.h" @@ -34,14 +35,15 @@ TEST_F(GmmTests, givenResourceUsageTypesCacheableWhenCreateGmmAndFlagEnableCpuCa DebugManagerStateRestore restore; DebugManager.flags.EnableCpuCacheForResources.set(0); StorageInfo storageInfo{}; - auto &productHelper = getGmmHelper()->getRootDeviceEnvironment().getHelper(); + auto releaseHelper = getGmmHelper()->getRootDeviceEnvironment().getReleaseHelper(); for (auto resourceUsageType : {GMM_RESOURCE_USAGE_OCL_IMAGE, GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER, GMM_RESOURCE_USAGE_OCL_BUFFER_CONST, GMM_RESOURCE_USAGE_OCL_BUFFER}) { auto gmm = std::make_unique(getGmmHelper(), nullptr, 0, 0, resourceUsageType, false, storageInfo, false); - EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), !CacheSettingsHelper::preferNoCpuAccess(resourceUsageType, getGmmHelper()->getRootDeviceEnvironment())); - EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), !gmm->getPreferNoCpuAccess()); + bool noCpuAccessPreference = releaseHelper ? !releaseHelper->isCachingOnCpuAvailable() : false; + EXPECT_EQ(noCpuAccessPreference, CacheSettingsHelper::preferNoCpuAccess(resourceUsageType, getGmmHelper()->getRootDeviceEnvironment())); + EXPECT_EQ(noCpuAccessPreference, gmm->getPreferNoCpuAccess()); } } @@ -77,14 +79,18 @@ HWTEST_F(GmmTests, givenVariousResourceUsageTypeWhenCreateGmmThenFlagCacheableIs DebugManagerStateRestore restore; DebugManager.flags.EnableCpuCacheForResources.set(false); StorageInfo storageInfo{}; - auto &productHelper = executionEnvironment->rootDeviceEnvironments[0]->getProductHelper(); + auto releaseHelper = executionEnvironment->rootDeviceEnvironments[0]->getReleaseHelper(); for (auto regularResourceUsageType : {GMM_RESOURCE_USAGE_OCL_IMAGE, GMM_RESOURCE_USAGE_OCL_STATE_HEAP_BUFFER, GMM_RESOURCE_USAGE_OCL_BUFFER_CONST, GMM_RESOURCE_USAGE_OCL_BUFFER}) { auto gmm = std::make_unique(getGmmHelper(), nullptr, 0, 0, regularResourceUsageType, false, storageInfo, false); - EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), gmm->resourceParams.Flags.Info.Cacheable); + if (!releaseHelper) { + EXPECT_TRUE(gmm->resourceParams.Flags.Info.Cacheable); + } else { + EXPECT_EQ(releaseHelper->isCachingOnCpuAvailable(), gmm->resourceParams.Flags.Info.Cacheable); + } } for (auto cpuAccessibleResourceUsageType : {GMM_RESOURCE_USAGE_OCL_SYSTEM_MEMORY_BUFFER}) { diff --git a/shared/test/unit_test/os_interface/product_helper_tests.cpp b/shared/test/unit_test/os_interface/product_helper_tests.cpp index 4b4badacda..9818fe2909 100644 --- a/shared/test/unit_test/os_interface/product_helper_tests.cpp +++ b/shared/test/unit_test/os_interface/product_helper_tests.cpp @@ -809,10 +809,6 @@ HWTEST_F(ProductHelperTest, whenDisableL3ForDebugCalledThenFalseIsReturned) { EXPECT_FALSE(productHelper->disableL3CacheForDebug(*defaultHwInfo)); } -HWTEST_F(ProductHelperTest, whenCheckIsCachingOnCpuAvailableThenAlwaysTrue) { - EXPECT_TRUE(productHelper->isCachingOnCpuAvailable()); -} - HWTEST_F(ProductHelperTest, givenBooleanUncachedWhenCallOverridePatIndexThenProperPatIndexIsReturned) { uint64_t patIndex = 1u; bool isUncached = true; diff --git a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp index ecf7e1432f..a51938710e 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp @@ -3150,8 +3150,12 @@ HWTEST_F(MockWddmMemoryManagerTest, givenEnabled64kbPagesWhenAllocationIsCreated EXPECT_EQ(MemoryConstants::pageSize64k, graphicsAllocation->getUnderlyingBufferSize()); EXPECT_NE(0llu, graphicsAllocation->getGpuAddress()); EXPECT_NE(nullptr, graphicsAllocation->getUnderlyingBuffer()); - auto &productHelper = executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->getHelper(); - EXPECT_EQ(productHelper.isCachingOnCpuAvailable(), graphicsAllocation->getDefaultGmm()->resourceParams.Flags.Info.Cacheable); + auto releaseHelper = executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->getReleaseHelper(); + if (releaseHelper) { + EXPECT_EQ(releaseHelper->isCachingOnCpuAvailable(), graphicsAllocation->getDefaultGmm()->resourceParams.Flags.Info.Cacheable); + } else { + EXPECT_TRUE(graphicsAllocation->getDefaultGmm()->resourceParams.Flags.Info.Cacheable); + } memoryManager.freeGraphicsMemory(graphicsAllocation); } 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 c6945072be..4c4a904ee8 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 @@ -31,6 +31,7 @@ TEST_F(ReleaseHelper1255Tests, whenGettingCapabilitiesThenCorrectPropertiesAreRe EXPECT_TRUE(releaseHelper->isSplitMatrixMultiplyAccumulateSupported()); EXPECT_TRUE(releaseHelper->isBFloat16ConversionSupported()); EXPECT_TRUE(releaseHelper->isResolvingSubDeviceIDNeeded()); + EXPECT_TRUE(releaseHelper->isCachingOnCpuAvailable()); } } 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 fb0f928d2a..9504cdee16 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 @@ -31,6 +31,7 @@ TEST_F(ReleaseHelper1256Tests, whenGettingCapabilitiesThenCorrectPropertiesAreRe EXPECT_TRUE(releaseHelper->isSplitMatrixMultiplyAccumulateSupported()); EXPECT_TRUE(releaseHelper->isBFloat16ConversionSupported()); EXPECT_TRUE(releaseHelper->isResolvingSubDeviceIDNeeded()); + EXPECT_TRUE(releaseHelper->isCachingOnCpuAvailable()); } } 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 c57dcdb820..02c766aeb1 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 @@ -31,6 +31,7 @@ TEST_F(ReleaseHelper1257Tests, whenGettingCapabilitiesThenCorrectPropertiesAreRe EXPECT_TRUE(releaseHelper->isSplitMatrixMultiplyAccumulateSupported()); EXPECT_TRUE(releaseHelper->isBFloat16ConversionSupported()); EXPECT_TRUE(releaseHelper->isResolvingSubDeviceIDNeeded()); + EXPECT_TRUE(releaseHelper->isCachingOnCpuAvailable()); } } 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 25b337a0fe..a1b8203d93 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 @@ -32,6 +32,7 @@ TEST_F(ReleaseHelper1270Tests, whenGettingCapabilitiesThenCorrectPropertiesAreRe EXPECT_FALSE(releaseHelper->isSplitMatrixMultiplyAccumulateSupported()); EXPECT_FALSE(releaseHelper->isBFloat16ConversionSupported()); EXPECT_TRUE(releaseHelper->isResolvingSubDeviceIDNeeded()); + EXPECT_FALSE(releaseHelper->isCachingOnCpuAvailable()); } } 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 ed776f30c5..b517d4a2bb 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 @@ -32,6 +32,7 @@ TEST_F(ReleaseHelper1271Tests, whenGettingCapabilitiesThenCorrectPropertiesAreRe EXPECT_FALSE(releaseHelper->isSplitMatrixMultiplyAccumulateSupported()); EXPECT_FALSE(releaseHelper->isBFloat16ConversionSupported()); EXPECT_TRUE(releaseHelper->isResolvingSubDeviceIDNeeded()); + EXPECT_FALSE(releaseHelper->isCachingOnCpuAvailable()); } } diff --git a/shared/test/unit_test/xe_hpg_core/mtl/excludes_xe_hpg_core_mtl.cpp b/shared/test/unit_test/xe_hpg_core/mtl/excludes_xe_hpg_core_mtl.cpp index 4f50b2e63a..0b5916aed9 100644 --- a/shared/test/unit_test/xe_hpg_core/mtl/excludes_xe_hpg_core_mtl.cpp +++ b/shared/test/unit_test/xe_hpg_core/mtl/excludes_xe_hpg_core_mtl.cpp @@ -20,6 +20,5 @@ HWTEST_EXCLUDE_PRODUCT(ComputeModeRequirements, givenComputeModeProgrammingWhenR HWTEST_EXCLUDE_PRODUCT(ComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNumberIsGreaterThan128ThenLargeGRFModeIsProgrammed_ForceNonCoherentSupportedMatcher, IGFX_METEORLAKE); HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenAskedIfPatIndexProgrammingSupportedThenReturnFalse, IGFX_METEORLAKE); HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenIsAdjustWalkOrderAvailableCallThenFalseReturn, IGFX_METEORLAKE); -HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, whenCheckIsCachingOnCpuAvailableThenAlwaysTrue, IGFX_METEORLAKE); HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenBooleanUncachedWhenCallOverridePatIndexThenProperPatIndexIsReturned, IGFX_METEORLAKE); HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenCheckBlitEnqueueAllowedThenReturnTrue, IGFX_METEORLAKE); \ No newline at end of file diff --git a/shared/test/unit_test/xe_hpg_core/mtl/product_helper_tests_mtl.cpp b/shared/test/unit_test/xe_hpg_core/mtl/product_helper_tests_mtl.cpp index 2a429cf227..ab2a5cd5cb 100644 --- a/shared/test/unit_test/xe_hpg_core/mtl/product_helper_tests_mtl.cpp +++ b/shared/test/unit_test/xe_hpg_core/mtl/product_helper_tests_mtl.cpp @@ -24,8 +24,4 @@ MTLTEST_F(MtlProductHelper, givenCompilerProductHelperWhenGetDefaultHwIpVersionT MTLTEST_F(MtlProductHelper, givenProductHelperWhenCheckDirectSubmissionSupportedThenTrueIsReturned) { EXPECT_TRUE(productHelper->isDirectSubmissionSupported(*defaultHwInfo)); -} - -MTLTEST_F(MtlProductHelper, whenCheckIsCachingOnCpuAvailableThenAlwaysFalse) { - EXPECT_FALSE(productHelper->isCachingOnCpuAvailable()); } \ No newline at end of file