From 9b3acc88fd5c0958005e5fa922ca5898b992b871 Mon Sep 17 00:00:00 2001 From: Krzysztof Gibala Date: Tue, 21 Sep 2021 09:33:42 +0000 Subject: [PATCH] Remove dependency on sharedHandles when program SCM Related-To: NEO-6056 Signed-off-by: Krzysztof Gibala --- .../state_compute_mode_helper_gen12lp.cpp | 10 +++-- .../state_compute_mode_helper_xe_hp_core.cpp | 4 +- .../compute_mode_tests_xehp_and_later.cpp | 41 +++++++------------ ...and_stream_receiver_hw_tgllp_and_later.inl | 3 +- 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/opencl/source/gen12lp/state_compute_mode_helper_gen12lp.cpp b/opencl/source/gen12lp/state_compute_mode_helper_gen12lp.cpp index 5b5a79c23f..5ae0acdf89 100644 --- a/opencl/source/gen12lp/state_compute_mode_helper_gen12lp.cpp +++ b/opencl/source/gen12lp/state_compute_mode_helper_gen12lp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019-2020 Intel Corporation + * Copyright (C) 2019-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -8,6 +8,10 @@ #include "shared/source/helpers/state_compute_mode_helper.h" namespace NEO { + template <> -bool StateComputeModeHelper::isStateComputeModeRequired(const CsrSizeRequestFlags &csrSizeRequestFlags, bool isThreadArbitionPolicyProgrammed) { return false; } -} // namespace NEO \ No newline at end of file +bool StateComputeModeHelper::isStateComputeModeRequired(const CsrSizeRequestFlags &csrSizeRequestFlags, bool isThreadArbitionPolicyProgrammed) { + return csrSizeRequestFlags.coherencyRequestChanged || csrSizeRequestFlags.hasSharedHandles || csrSizeRequestFlags.numGrfRequiredChanged; +} + +} // namespace NEO diff --git a/opencl/source/xe_hp_core/state_compute_mode_helper_xe_hp_core.cpp b/opencl/source/xe_hp_core/state_compute_mode_helper_xe_hp_core.cpp index 3ed1181c4d..c69e9d5b50 100644 --- a/opencl/source/xe_hp_core/state_compute_mode_helper_xe_hp_core.cpp +++ b/opencl/source/xe_hp_core/state_compute_mode_helper_xe_hp_core.cpp @@ -8,8 +8,10 @@ #include "shared/source/helpers/state_compute_mode_helper.h" namespace NEO { + template <> bool StateComputeModeHelper::isStateComputeModeRequired(const CsrSizeRequestFlags &csrSizeRequestFlags, bool isThreadArbitionPolicyProgrammed) { - return false; + return csrSizeRequestFlags.coherencyRequestChanged || csrSizeRequestFlags.numGrfRequiredChanged; } + } // namespace NEO diff --git a/opencl/test/unit_test/command_stream/compute_mode_tests_xehp_and_later.cpp b/opencl/test/unit_test/command_stream/compute_mode_tests_xehp_and_later.cpp index f10c56cfc9..3bba5732f3 100644 --- a/opencl/test/unit_test/command_stream/compute_mode_tests_xehp_and_later.cpp +++ b/opencl/test/unit_test/command_stream/compute_mode_tests_xehp_and_later.cpp @@ -47,7 +47,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, ComputeModeRequirements, givenCoherencyWithSharedHa using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; - auto cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL); + auto cmdsSize = 0u; overrideComputeModeRequest(false, false, true); auto retSize = getCsrHw()->getCmdSizeForComputeMode(); @@ -57,6 +57,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, ComputeModeRequirements, givenCoherencyWithSharedHa retSize = getCsrHw()->getCmdSizeForComputeMode(); EXPECT_EQ(cmdsSize, retSize); + cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL); + overrideComputeModeRequest(true, true, true); retSize = getCsrHw()->getCmdSizeForComputeMode(); EXPECT_EQ(cmdsSize, retSize); @@ -214,7 +216,7 @@ HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithoutSharedHandles csr->getMemoryManager()->freeGraphicsMemory(graphicAlloc); } -HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithSharedHandlesWhenFlushTaskCalledThenAlwaysProgramCmds, ForceNonCoherentSupportedMatcher) { +HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithSharedHandlesWhenFlushTaskCalledThenProgramCmdsWhenNeeded, ForceNonCoherentSupportedMatcher) { SetUpImpl(); using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; @@ -232,7 +234,7 @@ HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithSharedHandlesWhe csr->flushTask(stream, 0, stream, stream, stream, 0, flags, *device); }; - auto flushTaskAndFindCmds = [&](bool expectCoherent) { + auto flushTaskAndFindCmds = [&](bool expectCoherent, bool areCommandsProgrammed) { flushTask(expectCoherent); HardwareParse hwParser; hwParser.parseCommands(getCsrHw()->commandStream, startOffset); @@ -252,20 +254,20 @@ HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithSharedHandlesWhe EXPECT_NE(nullptr, pc); } } - EXPECT_TRUE(foundOne); + EXPECT_EQ(foundOne, areCommandsProgrammed); }; - flushTaskAndFindCmds(false); // first time - flushTaskAndFindCmds(false); // not changed - flushTaskAndFindCmds(true); // changed - flushTaskAndFindCmds(true); // not changed - flushTaskAndFindCmds(false); // changed - flushTaskAndFindCmds(false); // not changed + flushTaskAndFindCmds(false, true); // first time + flushTaskAndFindCmds(false, false); // not changed + flushTaskAndFindCmds(true, true); // changed + flushTaskAndFindCmds(true, false); // not changed + flushTaskAndFindCmds(false, true); // changed + flushTaskAndFindCmds(false, false); // not changed csr->getMemoryManager()->freeGraphicsMemory(graphicsAlloc); } -HWTEST2_F(ComputeModeRequirements, givenFlushWithoutSharedHandlesWhenPreviouslyUsedThenProgramPcAndSCM, ForceNonCoherentSupportedMatcher) { +HWTEST2_F(ComputeModeRequirements, givenFlushWithoutSharedHandlesWhenPreviouslyUsedThenPcAndSCMAreNotProgrammed, ForceNonCoherentSupportedMatcher) { SetUpImpl(); using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; @@ -284,22 +286,7 @@ HWTEST2_F(ComputeModeRequirements, givenFlushWithoutSharedHandlesWhenPreviouslyU HardwareParse hwParser; hwParser.parseCommands(getCsrHw()->commandStream, startOffset); - typename STATE_COMPUTE_MODE::FORCE_NON_COHERENT expectedCoherentValue = STATE_COMPUTE_MODE::FORCE_NON_COHERENT_FORCE_GPU_NON_COHERENT; - uint32_t expectedCoherentMask = FamilyType::stateComputeModeForceNonCoherentMask | FamilyType::stateComputeModeLargeGrfModeMask; - - bool foundOne = false; - for (auto it = hwParser.cmdList.begin(); it != hwParser.cmdList.end(); it++) { - auto cmd = genCmdCast(*it); - if (cmd) { - EXPECT_EQ(expectedCoherentValue, cmd->getForceNonCoherent()); - EXPECT_TRUE(isValueSet(cmd->getMaskBits(), expectedCoherentMask)); - EXPECT_FALSE(foundOne); - foundOne = true; - auto pc = genCmdCast(*(++it)); - EXPECT_NE(nullptr, pc); - } - } - EXPECT_TRUE(foundOne); + EXPECT_EQ(0u, hwParser.cmdList.size()); csr->getMemoryManager()->freeGraphicsMemory(graphicAlloc); } diff --git a/shared/source/command_stream/command_stream_receiver_hw_tgllp_and_later.inl b/shared/source/command_stream/command_stream_receiver_hw_tgllp_and_later.inl index fd288dc16f..6435899e2c 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_tgllp_and_later.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_tgllp_and_later.inl @@ -53,8 +53,7 @@ void CommandStreamReceiverHw::programComputeMode(LinearStream &stream template <> inline bool CommandStreamReceiverHw::isComputeModeNeeded() const { - return csrSizeRequestFlags.coherencyRequestChanged || csrSizeRequestFlags.hasSharedHandles || csrSizeRequestFlags.numGrfRequiredChanged || - StateComputeModeHelper::isStateComputeModeRequired(csrSizeRequestFlags, this->lastSentThreadArbitrationPolicy != this->requiredThreadArbitrationPolicy); + return StateComputeModeHelper::isStateComputeModeRequired(csrSizeRequestFlags, this->lastSentThreadArbitrationPolicy != this->requiredThreadArbitrationPolicy); } template <>