From 7f3d09b287e65d92e162caaa11526b10d2008b77 Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Tue, 20 Jun 2023 09:37:39 +0000 Subject: [PATCH] feature: limit relaxed ordering max queue size Related-To: NEO-7458 Signed-off-by: Dunajski, Bartosz --- shared/source/direct_submission/direct_submission_hw.inl | 3 +++ .../source/direct_submission/relaxed_ordering_helper.h | 1 + .../direct_submission/direct_submission_tests_2.cpp | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/shared/source/direct_submission/direct_submission_hw.inl b/shared/source/direct_submission/direct_submission_hw.inl index 5e6ebdbdc1..5e9824e8d8 100644 --- a/shared/source/direct_submission/direct_submission_hw.inl +++ b/shared/source/direct_submission/direct_submission_hw.inl @@ -34,6 +34,7 @@ #include "create_direct_submission_hw.inl" +#include #include namespace NEO { @@ -745,6 +746,8 @@ void *DirectSubmissionHw::dispatchWorkloadSection(BatchBu dispatchTaskStoreSection(batchBuffer.taskStartAddress); uint32_t expectedQueueSize = batchBuffer.numCsrClients * RelaxedOrderingHelper::queueSizeMultiplier; + expectedQueueSize = std::min(expectedQueueSize, RelaxedOrderingHelper::maxQueueSize); + if (expectedQueueSize > this->currentRelaxedOrderingQueueSize && DebugManager.flags.DirectSubmissionRelaxedOrderingQueueSizeLimit.get() == -1) { updateRelaxedOrderingQueueSize(expectedQueueSize); } diff --git a/shared/source/direct_submission/relaxed_ordering_helper.h b/shared/source/direct_submission/relaxed_ordering_helper.h index 40eb735837..b2d316c789 100644 --- a/shared/source/direct_submission/relaxed_ordering_helper.h +++ b/shared/source/direct_submission/relaxed_ordering_helper.h @@ -17,6 +17,7 @@ namespace RelaxedOrderingHelper { bool isRelaxedOrderingDispatchAllowed(const CommandStreamReceiver &csr, uint32_t numWaitEvents); static constexpr uint32_t queueSizeMultiplier = 4; +static constexpr uint32_t maxQueueSize = 16; template void encodeRegistersBeforeDependencyCheckers(LinearStream &cmdStream) { 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 6572973748..b991788e30 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 @@ -1609,6 +1609,15 @@ HWTEST2_F(DirectSubmissionRelaxedOrderingTests, givenNewNumberOfClientsWhenDispa EXPECT_EQ(1u, directSubmission.dispatchStaticRelaxedOrderingSchedulerCalled); EXPECT_EQ(RelaxedOrderingHelper::queueSizeMultiplier * batchBuffer.numCsrClients, directSubmission.currentRelaxedOrderingQueueSize); EXPECT_TRUE(findStaticSchedulerUpdate(directSubmission.ringCommandStream, offset, RelaxedOrderingHelper::queueSizeMultiplier * batchBuffer.numCsrClients)); + + offset = directSubmission.ringCommandStream.getUsed(); + batchBuffer.numCsrClients = 5; + directSubmission.dispatchCommandBuffer(batchBuffer, flushStamp); + + EXPECT_EQ(1u, directSubmission.dispatchStaticRelaxedOrderingSchedulerCalled); + EXPECT_TRUE((RelaxedOrderingHelper::queueSizeMultiplier * batchBuffer.numCsrClients) > RelaxedOrderingHelper::maxQueueSize); + EXPECT_EQ(RelaxedOrderingHelper::maxQueueSize, directSubmission.currentRelaxedOrderingQueueSize); + EXPECT_FALSE(findStaticSchedulerUpdate(directSubmission.ringCommandStream, offset, RelaxedOrderingHelper::queueSizeMultiplier * batchBuffer.numCsrClients)); } HWTEST2_F(DirectSubmissionRelaxedOrderingTests, whenInitializingThenDispatchStaticScheduler, IsAtLeastXeHpcCore) {