From 7d7ecd50b6bf04a96bceb97bfe283e9435c7d8c9 Mon Sep 17 00:00:00 2001 From: Dominik Dabek Date: Tue, 6 Dec 2022 13:57:38 +0000 Subject: [PATCH] DG2, Enable resolving dependecies by pipecontrol Enable resolving dependencies by pipecontrol on same CSR, IOQ on DG2 by default. Related-To: NEO-7321 Signed-off-by: Dominik Dabek --- .../dispatch_walker_tests_xehp_and_later.cpp | 13 ++++++++++--- .../helpers/timestamp_packet_1_tests.cpp | 9 ++++++++- .../dg2/os_agnostic_hw_info_config_dg2.inl | 2 +- .../dg2/excludes_xe_hpg_core_dg2.cpp | 1 + .../dg2/hw_info_config_tests_dg2.cpp | 18 ++++++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp index c08b3e1bac..4181dbd507 100644 --- a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp +++ b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp @@ -558,13 +558,20 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenTimestamp device->getUltCommandStreamReceiver().timestampPacketWriteEnabled = false; getCommandStream(cmdQ, CsrDependencies(), false, false, false, multiDispatchInfo, nullptr, 0, false, false); - auto sizeWithDisabled = cmdQ.requestedCmdStreamSize; + size_t sizeWithDisabled = cmdQ.requestedCmdStreamSize; device->getUltCommandStreamReceiver().timestampPacketWriteEnabled = true; getCommandStream(cmdQ, CsrDependencies(), false, false, false, multiDispatchInfo, nullptr, 0, false, false); - auto sizeWithEnabled = cmdQ.requestedCmdStreamSize; + size_t sizeWithEnabled = cmdQ.requestedCmdStreamSize; - EXPECT_EQ(sizeWithEnabled, sizeWithDisabled + 0); + size_t additionalSize = 0u; + const auto &hwInfo = device->getHardwareInfo(); + const auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily); + if (hwInfoConfig.isResolveDependenciesByPipeControlsSupported(hwInfo, cmdQ.isOOQEnabled())) { + additionalSize = MemorySynchronizationCommands::getSizeForSingleBarrier(false); + } + + EXPECT_EQ(sizeWithEnabled, sizeWithDisabled + additionalSize); } HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenDebugVariableEnabledWhenEnqueueingThenWritePostsyncOperationInImmWriteMode) { diff --git a/opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp b/opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp index 87040cfa1a..71b44dcb62 100644 --- a/opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp +++ b/opencl/test/unit_test/helpers/timestamp_packet_1_tests.cpp @@ -182,7 +182,14 @@ HWTEST_F(TimestampPacketTests, givenTimestampPacketWriteEnabledWhenEstimatingStr } } - size_t extendedSize = sizeWithDisabled + EnqueueOperation::getSizeRequiredForTimestampPacketWrite() + sizeForNodeDependency; + size_t sizeForPipeControl = 0; + const auto &hwInfo = device->getHardwareInfo(); + const auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily); + if (hwInfoConfig.isResolveDependenciesByPipeControlsSupported(hwInfo, mockCmdQHw->isOOQEnabled())) { + sizeForPipeControl = MemorySynchronizationCommands::getSizeForSingleBarrier(false); + } + + size_t extendedSize = sizeWithDisabled + EnqueueOperation::getSizeRequiredForTimestampPacketWrite() + sizeForNodeDependency + sizeForPipeControl; EXPECT_EQ(sizeWithEnabled, extendedSize); } diff --git a/shared/source/xe_hpg_core/dg2/os_agnostic_hw_info_config_dg2.inl b/shared/source/xe_hpg_core/dg2/os_agnostic_hw_info_config_dg2.inl index 9ea36464d2..633d1e39bb 100644 --- a/shared/source/xe_hpg_core/dg2/os_agnostic_hw_info_config_dg2.inl +++ b/shared/source/xe_hpg_core/dg2/os_agnostic_hw_info_config_dg2.inl @@ -210,7 +210,7 @@ bool HwInfoConfigHw::isStorageInfoAdjustmentRequired() const { template <> bool HwInfoConfigHw::isResolveDependenciesByPipeControlsSupported(const HardwareInfo &hwInfo, bool isOOQ) const { - const bool enabled = false; + const bool enabled = !isOOQ; if (DebugManager.flags.ResolveDependenciesViaPipeControls.get() != -1) { return DebugManager.flags.ResolveDependenciesViaPipeControls.get() == 1; } diff --git a/shared/test/unit_test/xe_hpg_core/dg2/excludes_xe_hpg_core_dg2.cpp b/shared/test/unit_test/xe_hpg_core/dg2/excludes_xe_hpg_core_dg2.cpp index 9e0e105f7a..48bb42045d 100644 --- a/shared/test/unit_test/xe_hpg_core/dg2/excludes_xe_hpg_core_dg2.cpp +++ b/shared/test/unit_test/xe_hpg_core/dg2/excludes_xe_hpg_core_dg2.cpp @@ -21,6 +21,7 @@ HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenAskedIfStorageIn HWTEST_EXCLUDE_PRODUCT(CompilerProductHelperFixture, givenAtLeastXeHpgCoreWhenGetCachingPolicyOptionsThenReturnWriteByPassPolicyOption_IsAtLeastXeHpgCore, IGFX_DG2); HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, givenProductHelperWhenGetL1CachePolicyThenReturnWriteByPass_IsAtLeastXeHpgCore, IGFX_DG2); HWTEST_EXCLUDE_PRODUCT(HwInfoConfigTest, givenAtLeastXeHpgCoreWhenGetL1CachePolicyThenReturnCorrectValue_IsAtLeastXeHpgCore, IGFX_DG2); +HWTEST_EXCLUDE_PRODUCT(HwInfoConfigTest, givenDebugFlagWhenCheckingIsResolveDependenciesByPipeControlsSupportedThenCorrectValueIsReturned, IGFX_DG2); HWTEST_EXCLUDE_PRODUCT(AILTests, whenModifyKernelIfRequiredIsCalledThenDontChangeKernelSources, IGFX_DG2); HWTEST_EXCLUDE_PRODUCT(CommandEncodeStatesTest, givenSlmTotalSizeEqualZeroWhenDispatchingKernelThenSharedMemorySizeIsSetCorrectly, IGFX_DG2); HWTEST_EXCLUDE_PRODUCT(MemoryManagerTests, givenEnabledLocalMemoryWhenAllocateInternalAllocationInDevicePoolThen32BitAllocationIsCreated, IGFX_DG2); diff --git a/shared/test/unit_test/xe_hpg_core/dg2/hw_info_config_tests_dg2.cpp b/shared/test/unit_test/xe_hpg_core/dg2/hw_info_config_tests_dg2.cpp index d271914f4f..1ef1e8b339 100644 --- a/shared/test/unit_test/xe_hpg_core/dg2/hw_info_config_tests_dg2.cpp +++ b/shared/test/unit_test/xe_hpg_core/dg2/hw_info_config_tests_dg2.cpp @@ -552,3 +552,21 @@ DG2TEST_F(HwInfoConfigTestDg2, givenHwInfoConfigWhenGettingEvictIfNecessaryFlagS const auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily); EXPECT_TRUE(hwInfoConfig.isEvictionIfNecessaryFlagSupported()); } + +DG2TEST_F(HwInfoConfigTestDg2, givenDebugFlagWhenCheckingIsResolveDependenciesByPipeControlsSupportedThenCorrectValueIsReturned) { + DebugManagerStateRestore restorer; + HardwareInfo hwInfo = *defaultHwInfo; + auto hwInfoConfig = HwInfoConfig::get(hwInfo.platform.eProductFamily); + + // ResolveDependenciesViaPipeControls = -1 (default) + EXPECT_TRUE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, false)); + EXPECT_FALSE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, true)); + + DebugManager.flags.ResolveDependenciesViaPipeControls.set(0); + EXPECT_FALSE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, false)); + EXPECT_FALSE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, true)); + + DebugManager.flags.ResolveDependenciesViaPipeControls.set(1); + EXPECT_TRUE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, false)); + EXPECT_TRUE(hwInfoConfig->isResolveDependenciesByPipeControlsSupported(hwInfo, true)); +}