From 151aecc8bd40921892df5c35516131bb8e2cbd1c Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Mon, 20 Mar 2023 15:33:57 +0000 Subject: [PATCH] Disable RelaxedOrdering if UpdateTagFromWait is disabled Related-To: NEO-7458 Signed-off-by: Dunajski, Bartosz --- .../xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp | 1 + opencl/test/unit_test/kernel/kernel_tests.cpp | 2 +- .../command_stream/command_stream_receiver.h | 4 ++-- .../command_stream_receiver_hw.h | 2 +- .../command_stream_receiver_hw_base.inl | 2 +- .../direct_submission_hw.cpp | 3 ++- .../direct_submission/direct_submission_hw.h | 1 + .../direct_submission_hw.inl | 2 +- .../mocks/mock_command_stream_receiver.h | 2 +- .../direct_submission_tests_1.cpp | 7 +++---- .../direct_submission_tests_2.cpp | 21 +++++++++++++++++++ .../windows/wddm_direct_submission_tests.cpp | 14 ++++++------- .../windows/mock_wddm_direct_submission.h | 3 ++- 13 files changed, 43 insertions(+), 21 deletions(-) diff --git a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp index 4c07217dbc..1d15f2faa2 100644 --- a/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp +++ b/level_zero/core/test/unit_tests/xe_hpc_core/test_cmdqueue_xe_hpc_core.cpp @@ -548,6 +548,7 @@ HWTEST2_F(CommandQueueCommandsXeHpc, givenFlushTaskSubmissionEnabledAndSplitBcsC DebugManagerStateRestore restorer; DebugManager.flags.SplitBcsCopy.set(1); + DebugManager.flags.UpdateTaskCountFromWait.set(3); ze_result_t returnValue; auto hwInfo = *NEO::defaultHwInfo; diff --git a/opencl/test/unit_test/kernel/kernel_tests.cpp b/opencl/test/unit_test/kernel/kernel_tests.cpp index fac2848628..b67a8251d4 100644 --- a/opencl/test/unit_test/kernel/kernel_tests.cpp +++ b/opencl/test/unit_test/kernel/kernel_tests.cpp @@ -509,7 +509,7 @@ class CommandStreamReceiverMock : public CommandStreamReceiver { SubmissionStatus flushTagUpdate() override { return SubmissionStatus::SUCCESS; }; void updateTagFromWait() override{}; - bool isUpdateTagFromWaitEnabled() override { return false; }; + bool isUpdateTagFromWaitEnabled() const override { return false; }; void createKernelArgsBufferAllocation() override {} bool isMultiOsContextCapable() const override { return false; } diff --git a/shared/source/command_stream/command_stream_receiver.h b/shared/source/command_stream/command_stream_receiver.h index dd033890ed..684674c079 100644 --- a/shared/source/command_stream/command_stream_receiver.h +++ b/shared/source/command_stream/command_stream_receiver.h @@ -250,7 +250,7 @@ class CommandStreamReceiver { virtual SubmissionStatus flushTagUpdate() = 0; virtual void updateTagFromWait() = 0; - virtual bool isUpdateTagFromWaitEnabled() = 0; + virtual bool isUpdateTagFromWaitEnabled() const = 0; ScratchSpaceController *getScratchSpaceController() const { return scratchSpaceController.get(); @@ -269,7 +269,7 @@ class CommandStreamReceiver { void startControllingDirectSubmissions(); - bool isAnyDirectSubmissionEnabled() { + bool isAnyDirectSubmissionEnabled() const { return this->isDirectSubmissionEnabled() || isBlitterDirectSubmissionEnabled(); } diff --git a/shared/source/command_stream/command_stream_receiver_hw.h b/shared/source/command_stream/command_stream_receiver_hw.h index f681ac8a60..620985c5db 100644 --- a/shared/source/command_stream/command_stream_receiver_hw.h +++ b/shared/source/command_stream/command_stream_receiver_hw.h @@ -105,7 +105,7 @@ class CommandStreamReceiverHw : public CommandStreamReceiver { size_t commandStreamStartTask); SubmissionStatus flushHandler(BatchBuffer &batchBuffer, ResidencyContainer &allocationsForResidency); - bool isUpdateTagFromWaitEnabled() override; + bool isUpdateTagFromWaitEnabled() const override; void updateTagFromWait() override; bool isMultiOsContextCapable() const override; diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index ad637ce5e6..2418f7014d 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -1456,7 +1456,7 @@ inline SubmissionStatus CommandStreamReceiverHw::flushHandler(BatchBu } template -inline bool CommandStreamReceiverHw::isUpdateTagFromWaitEnabled() { +inline bool CommandStreamReceiverHw::isUpdateTagFromWaitEnabled() const { auto &gfxCoreHelper = getGfxCoreHelper(); auto enabled = gfxCoreHelper.isUpdateTaskCountFromWaitSupported(); enabled &= this->isAnyDirectSubmissionEnabled(); diff --git a/shared/source/direct_submission/direct_submission_hw.cpp b/shared/source/direct_submission/direct_submission_hw.cpp index 176c0c4042..7b5277b310 100644 --- a/shared/source/direct_submission/direct_submission_hw.cpp +++ b/shared/source/direct_submission/direct_submission_hw.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Intel Corporation + * Copyright (C) 2022-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -16,6 +16,7 @@ DirectSubmissionInputParams::DirectSubmissionInputParams(const CommandStreamRece globalFenceAllocation = commandStreamReceiver.getGlobalFenceAllocation(); workPartitionAllocation = commandStreamReceiver.getWorkPartitionAllocation(); completionFenceAllocation = commandStreamReceiver.getTagAllocation(); + isUpdateTagFromWaitEnabled = commandStreamReceiver.isUpdateTagFromWaitEnabled(); } } // namespace NEO diff --git a/shared/source/direct_submission/direct_submission_hw.h b/shared/source/direct_submission/direct_submission_hw.h index 5545fa6eee..05e0cfc721 100644 --- a/shared/source/direct_submission/direct_submission_hw.h +++ b/shared/source/direct_submission/direct_submission_hw.h @@ -70,6 +70,7 @@ struct DirectSubmissionInputParams : NonCopyableClass { GraphicsAllocation *workPartitionAllocation = nullptr; GraphicsAllocation *completionFenceAllocation = nullptr; const uint32_t rootDeviceIndex; + bool isUpdateTagFromWaitEnabled = false; }; template diff --git a/shared/source/direct_submission/direct_submission_hw.inl b/shared/source/direct_submission/direct_submission_hw.inl index 350e82c8d4..f39d3c4062 100644 --- a/shared/source/direct_submission/direct_submission_hw.inl +++ b/shared/source/direct_submission/direct_submission_hw.inl @@ -85,7 +85,7 @@ DirectSubmissionHw::DirectSubmissionHw(const DirectSubmis dcFlushRequired = MemorySynchronizationCommands::getDcFlushEnable(true, inputParams.rootDeviceEnvironment); auto &gfxCoreHelper = inputParams.rootDeviceEnvironment.getHelper(); - relaxedOrderingEnabled = gfxCoreHelper.isRelaxedOrderingSupported(); + relaxedOrderingEnabled = gfxCoreHelper.isRelaxedOrderingSupported() && inputParams.isUpdateTagFromWaitEnabled; this->currentRelaxedOrderingQueueSize = RelaxedOrderingHelper::queueSizeMultiplier; diff --git a/shared/test/common/mocks/mock_command_stream_receiver.h b/shared/test/common/mocks/mock_command_stream_receiver.h index 1949a80982..063f581f52 100644 --- a/shared/test/common/mocks/mock_command_stream_receiver.h +++ b/shared/test/common/mocks/mock_command_stream_receiver.h @@ -71,7 +71,7 @@ class MockCommandStreamReceiver : public CommandStreamReceiver { SubmissionStatus flushTagUpdate() override { return SubmissionStatus::SUCCESS; }; void updateTagFromWait() override{}; - bool isUpdateTagFromWaitEnabled() override { return false; }; + bool isUpdateTagFromWaitEnabled() const override { return false; }; bool isMultiOsContextCapable() const override { return multiOsContextCapable; } diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp index da6cb82871..c0ce6325ee 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp @@ -134,8 +134,8 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithoutCompletionFenceAlloca EXPECT_EQ(nullptr, directSubmission.completionFenceAllocation); size_t expectedAllocationsCnt = 3; - auto &gfxCoreHelper = pDevice->getGfxCoreHelper(); - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + + if (directSubmission.isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } @@ -166,8 +166,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWithCompletionFenceAllocatio EXPECT_EQ(&completionFenceAllocation, directSubmission.completionFenceAllocation); size_t expectedAllocationsCnt = 4; - auto &gfxCoreHelper = pDevice->getGfxCoreHelper(); - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + if (directSubmission.isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp index edb1ad1b12..f38061cefc 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_2.cpp @@ -1017,6 +1017,7 @@ HWTEST_F(DirectSubmissionDispatchBufferTest, givenDebugFlagSetWhenStoppingRingbu struct DirectSubmissionRelaxedOrderingTests : public DirectSubmissionDispatchBufferTest { void SetUp() override { DebugManager.flags.DirectSubmissionRelaxedOrdering.set(1); + DebugManager.flags.UpdateTaskCountFromWait.set(3); DirectSubmissionDispatchBufferTest::SetUp(); } @@ -2704,4 +2705,24 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenNumClientsWhenAskingIfRelax ultCsr->registerClient(); EXPECT_EQ(4u, ultCsr->getNumClients()); EXPECT_TRUE(NEO::RelaxedOrderingHelper::isRelaxedOrderingDispatchAllowed(*ultCsr, 1)); +} + +HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenUpdateTagFromWaitDisabledWhenCreatingDirectSubmissionThenDisableRelaxedOrdering, IsAtLeastXeHpcCore) { + DebugManager.flags.DirectSubmissionRelaxedOrdering.set(-1); + auto csr = pDevice->getDefaultEngine().commandStreamReceiver; + + DebugManager.flags.UpdateTaskCountFromWait.set(0); + { + MockDirectSubmissionHw> directSubmission(*csr); + + EXPECT_FALSE(directSubmission.isRelaxedOrderingEnabled()); + } + + DebugManager.flags.DirectSubmissionRelaxedOrdering.set(1); + { + + MockDirectSubmissionHw> directSubmission(*csr); + + EXPECT_TRUE(directSubmission.isRelaxedOrderingEnabled()); + } } \ No newline at end of file diff --git a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp index 2777da5dfa..5981939d88 100644 --- a/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/windows/wddm_direct_submission_tests.cpp @@ -62,9 +62,8 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenDirectIsInitializedAndStartedThe EXPECT_NE(nullptr, wddmDirectSubmission->ringBuffers[1].ringBuffer); EXPECT_NE(nullptr, wddmDirectSubmission->semaphores); - auto &gfxCoreHelper = device->getGfxCoreHelper(); size_t expectedAllocationsCnt = 3; - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + if (wddmDirectSubmission->isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } @@ -99,9 +98,8 @@ HWTEST_F(WddmDirectSubmissionNoPreemptionTest, givenWddmWhenDirectIsInitializedA EXPECT_NE(nullptr, wddmDirectSubmission->ringBuffers[1].ringBuffer); EXPECT_NE(nullptr, wddmDirectSubmission->semaphores); - auto &gfxCoreHelper = device->getGfxCoreHelper(); size_t expectedAllocationsCnt = 3; - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + if (wddmDirectSubmission->isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } @@ -142,9 +140,9 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesThenExpectRin bool ret = wddmDirectSubmission.allocateResources(); EXPECT_TRUE(ret); - auto &gfxCoreHelper = device->getGfxCoreHelper(); + size_t expectedAllocationsCnt = 3; - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + if (wddmDirectSubmission.isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } @@ -186,9 +184,9 @@ HWTEST_F(WddmDirectSubmissionTest, givenWddmWhenAllocateOsResourcesResidencyFail bool ret = wddmDirectSubmission.allocateResources(); EXPECT_FALSE(ret); - auto &gfxCoreHelper = device->getGfxCoreHelper(); + size_t expectedAllocationsCnt = 3; - if (gfxCoreHelper.isRelaxedOrderingSupported()) { + if (wddmDirectSubmission.isRelaxedOrderingEnabled()) { expectedAllocationsCnt += 2; } diff --git a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h index bf6764e47c..249a478d9a 100644 --- a/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h +++ b/shared/test/unit_test/mocks/windows/mock_wddm_direct_submission.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2022 Intel Corporation + * Copyright (C) 2020-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -26,6 +26,7 @@ struct MockWddmDirectSubmission : public WddmDirectSubmission