From 577de9770d99bfc251a4017e4abcf0271c10c6fc Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Wed, 29 Oct 2025 13:52:17 +0000 Subject: [PATCH] performance: Set L1 cache policy to WB on PTL Resolves: NEO-16378 Signed-off-by: Lukasz Jobczyk --- .../unit_tests/sources/debugger/test_l0_debugger_1.cpp | 2 ++ .../core/test/unit_tests/sources/module/test_module.cpp | 2 ++ opencl/test/unit_test/program/program_tests.cpp | 2 ++ .../unit_test/xe3_core/test_cmds_programming_xe3_core.cpp | 7 ++++--- .../xe3_core/definitions/enable_xe3_core_products.inl | 7 +++++++ shared/test/unit_test/helpers/cache_policy_tests.cpp | 4 +++- .../test/unit_test/xe3_core/ptl/excludes_xe3_core_ptl.cpp | 3 +++ .../unit_test/xe3_core/ptl/product_helper_tests_ptl.cpp | 5 +++++ shared/test/unit_test/xe3_core/test_encode_xe3_core.cpp | 2 +- 9 files changed, 29 insertions(+), 5 deletions(-) diff --git a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp index 45fc0ae6a4..75e67b8372 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger_1.cpp @@ -34,6 +34,8 @@ namespace L0 { namespace ult { +HWTEST_EXCLUDE_PRODUCT(L0DebuggerTest, givenDebuggerEnabledAndL1CachePolicyWBWhenAppendingThenDebugSurfaceHasCachePolicyWBP_IsAtLeastXeCore, IGFX_PTL); + using L0DebuggerTest = Test; using L0DebuggerParameterizedTests = L0DebuggerHwParameterizedFixture; using L0DebuggerGlobalStatelessTest = Test; diff --git a/level_zero/core/test/unit_tests/sources/module/test_module.cpp b/level_zero/core/test/unit_tests/sources/module/test_module.cpp index ed5a30e872..d7edbf5379 100644 --- a/level_zero/core/test/unit_tests/sources/module/test_module.cpp +++ b/level_zero/core/test/unit_tests/sources/module/test_module.cpp @@ -54,6 +54,8 @@ namespace L0 { namespace ult { +HWTEST_EXCLUDE_PRODUCT(ModuleTranslationUnitTest, givenAtLeastXeHpgCoreWhenGetInternalOptionsThenCorrectBuildOptionIsSet_IsAtLeastXeCore, IGFX_PTL); + using ModuleTest = Test; TEST_F(ModuleTest, GivenGeneralRegisterFileDescriptorWhenGetKernelPropertiesIsCalledThenDescriptorIsCorrectlySet) { diff --git a/opencl/test/unit_test/program/program_tests.cpp b/opencl/test/unit_test/program/program_tests.cpp index 700e4e158c..b40a6f915a 100644 --- a/opencl/test/unit_test/program/program_tests.cpp +++ b/opencl/test/unit_test/program/program_tests.cpp @@ -71,6 +71,8 @@ using namespace NEO; +HWTEST_EXCLUDE_PRODUCT(ProgramTests, givenAtLeastXeHpgCoreWhenGetInternalOptionsThenCorrectBuildOptionIsSet_IsAtLeastXeCore, IGFX_PTL); + void ProgramTests::SetUp() { ClDeviceFixture::setUp(); cl_device_id device = pClDevice; diff --git a/opencl/test/unit_test/xe3_core/test_cmds_programming_xe3_core.cpp b/opencl/test/unit_test/xe3_core/test_cmds_programming_xe3_core.cpp index 825fa8e7b2..91b6adfcad 100644 --- a/opencl/test/unit_test/xe3_core/test_cmds_programming_xe3_core.cpp +++ b/opencl/test/unit_test/xe3_core/test_cmds_programming_xe3_core.cpp @@ -44,7 +44,7 @@ XE3_CORETEST_F(CmdsProgrammingTestsXe3Core, givenL3ToL1DebugFlagWhenStatelessMoc auto actualL1CachePolocy = static_cast(stateBaseAddress->getL1CacheControlCachePolicy()); - const uint8_t expectedL1CachePolicy = 0; + const uint8_t expectedL1CachePolicy = pDevice->getHardwareInfo().platform.eProductFamily == IGFX_PTL ? 2 : 0; EXPECT_EQ(expectedL1CachePolicy, actualL1CachePolocy); } @@ -75,7 +75,8 @@ XE3_CORETEST_F(CmdsProgrammingTestsXe3Core, whenAppendingRssThenProgramWtL1Cache EncodeSurfaceState::encodeBuffer(args); - EXPECT_EQ(FamilyType::RENDER_SURFACE_STATE::L1_CACHE_CONTROL_WBP, rssCmd.getL1CacheControlCachePolicy()); + const uint8_t expectedL1CachePolicy = pDevice->getHardwareInfo().platform.eProductFamily == IGFX_PTL ? 2 : 0; + EXPECT_EQ(expectedL1CachePolicy, rssCmd.getL1CacheControlCachePolicy()); } XE3_CORETEST_F(CmdsProgrammingTestsXe3Core, givenAlignedCacheableReadOnlyBufferThenChoseOclBufferConstPolicy) { @@ -102,7 +103,7 @@ XE3_CORETEST_F(CmdsProgrammingTestsXe3Core, givenAlignedCacheableReadOnlyBufferT auto actualL1CachePolocy = static_cast(surfaceState.getL1CacheControlCachePolicy()); - const uint8_t expectedL1CachePolicy = 0; + const uint8_t expectedL1CachePolicy = pDevice->getHardwareInfo().platform.eProductFamily == IGFX_PTL ? 2 : 0; EXPECT_EQ(expectedL1CachePolicy, actualL1CachePolocy); alignedFree(ptr); diff --git a/shared/source/xe3_core/definitions/enable_xe3_core_products.inl b/shared/source/xe3_core/definitions/enable_xe3_core_products.inl index 41f851da54..afd264babb 100644 --- a/shared/source/xe3_core/definitions/enable_xe3_core_products.inl +++ b/shared/source/xe3_core/definitions/enable_xe3_core_products.inl @@ -6,6 +6,13 @@ */ #ifdef SUPPORT_PTL + +template <> +uint32_t L1CachePolicyHelper::getDefaultL1CachePolicy(bool isDebuggerActive) { + using GfxFamily = HwMapper::GfxFamily; + return GfxFamily::STATE_BASE_ADDRESS::L1_CACHE_CONTROL_WB; +} + template struct L1CachePolicyHelper; static EnableGfxProductHw enableGfxProductHwPTL; #endif diff --git a/shared/test/unit_test/helpers/cache_policy_tests.cpp b/shared/test/unit_test/helpers/cache_policy_tests.cpp index b4b202c5e1..a5a50e9ef1 100644 --- a/shared/test/unit_test/helpers/cache_policy_tests.cpp +++ b/shared/test/unit_test/helpers/cache_policy_tests.cpp @@ -26,7 +26,9 @@ HWTEST2_F(ProductHelperTest, givenL1CachePolicyHelperWhenUnsupportedL1PoliciesAn HWTEST2_F(ProductHelperTest, givenAtLeastXeHpgCoreWhenGetL1CachePolicyThenReturnCorrectValue, IsAtLeastXeCore) { using GfxFamily = typename HwMapper::GfxFamily; auto policy = [&]() -> uint32_t { - if constexpr (GfxFamily::isHeaplessRequired()) { + if constexpr (productFamily == IGFX_PTL) { + return GfxFamily::RENDER_SURFACE_STATE::L1_CACHE_CONTROL_WB; + } else if constexpr (GfxFamily::isHeaplessRequired()) { return GfxFamily::RENDER_SURFACE_STATE::L1_CACHE_CONTROL_WBP; } else { return GfxFamily::STATE_BASE_ADDRESS::L1_CACHE_CONTROL_WBP; diff --git a/shared/test/unit_test/xe3_core/ptl/excludes_xe3_core_ptl.cpp b/shared/test/unit_test/xe3_core/ptl/excludes_xe3_core_ptl.cpp index 9760b54128..442f16510e 100644 --- a/shared/test/unit_test/xe3_core/ptl/excludes_xe3_core_ptl.cpp +++ b/shared/test/unit_test/xe3_core/ptl/excludes_xe3_core_ptl.cpp @@ -8,3 +8,6 @@ #include "shared/test/common/test_macros/hw_test_base.h" HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, whenGettingPreferredAllocationMethodThenNoPreferenceIsReturned, IGFX_PTL); +HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenGetL1CachePolicyThenReturnWriteByPass_IsSbaRequiredAndAtLeastXeCore, IGFX_PTL); +HWTEST_EXCLUDE_PRODUCT(CompilerProductHelperFixture, givenAtLeastXeHpgCoreWhenGetCachingPolicyOptionsThenReturnWriteByPassPolicyOption_IsAtLeastXeCore, IGFX_PTL); +HWTEST_EXCLUDE_PRODUCT(SbaTest, givenStateBaseAddressAndDebugFlagSetWhenAppendExtraCacheSettingsThenProgramCorrectL1CachePolicy_IsSbaRequiredAndAtLeastXeCore, IGFX_PTL); diff --git a/shared/test/unit_test/xe3_core/ptl/product_helper_tests_ptl.cpp b/shared/test/unit_test/xe3_core/ptl/product_helper_tests_ptl.cpp index 047337a686..0f8106bcf1 100644 --- a/shared/test/unit_test/xe3_core/ptl/product_helper_tests_ptl.cpp +++ b/shared/test/unit_test/xe3_core/ptl/product_helper_tests_ptl.cpp @@ -75,6 +75,11 @@ PTLTEST_F(PtlProductHelper, givenProductHelperWhenCheckingIsBufferPoolAllocatorS EXPECT_TRUE(productHelper->isBufferPoolAllocatorSupported()); } +PTLTEST_F(ProductHelperTest, givenProductHelperWhenGetL1CachePolicyThenReturnWriteByPass) { + EXPECT_EQ(2u, productHelper->getL1CachePolicy(false)); + EXPECT_EQ(2u, productHelper->getL1CachePolicy(true)); +} + PTLTEST_F(PtlProductHelper, givenDebugFlagWhenCheckingIsResolveDependenciesByPipeControlsSupportedThenTheFlagDerivedValueIsReturned) { DebugManagerStateRestore restorer; diff --git a/shared/test/unit_test/xe3_core/test_encode_xe3_core.cpp b/shared/test/unit_test/xe3_core/test_encode_xe3_core.cpp index 86276a4a31..bc121e5590 100644 --- a/shared/test/unit_test/xe3_core/test_encode_xe3_core.cpp +++ b/shared/test/unit_test/xe3_core/test_encode_xe3_core.cpp @@ -593,7 +593,7 @@ XE3_CORETEST_F(Xe3SbaTest, givenSpecificProductFamilyWhenAppendingSbaThenProgram StateBaseAddressHelper::appendStateBaseAddressParameters(args); - EXPECT_EQ(FamilyType::STATE_BASE_ADDRESS::L1_CACHE_CONTROL_WBP, sbaCmd.getL1CacheControlCachePolicy()); + EXPECT_EQ(pDevice->getHardwareInfo().platform.eProductFamily == IGFX_PTL ? 2 : 0, sbaCmd.getL1CacheControlCachePolicy()); } XE3_CORETEST_F(Xe3SbaTest, givenL1CachingOverrideWhenStateBaseAddressIsProgrammedThenItMatchesTheOverrideValue) {