From 43cc747843745ca3bed22f62690062f2e505da8a Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Mon, 20 Mar 2023 11:48:15 +0000 Subject: [PATCH] Add Unrecoverable to RelaxedOrdering path Related-To: NEO-7458 Signed-off-by: Dunajski, Bartosz --- opencl/source/command_queue/enqueue_common.h | 1 + .../command_queue/enqueue_kernel_2_tests.cpp | 28 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/opencl/source/command_queue/enqueue_common.h b/opencl/source/command_queue/enqueue_common.h index 2f94c433da..2c46b33d38 100644 --- a/opencl/source/command_queue/enqueue_common.h +++ b/opencl/source/command_queue/enqueue_common.h @@ -224,6 +224,7 @@ cl_int CommandQueueHw::enqueueHandler(Surface **surfacesForResidency, auto commandStreamStart = commandStream.getUsed(); if (canUsePipeControlInsteadOfSemaphoresForOnCsrDependencies) { + UNRECOVERABLE_IF(relaxedOrderingForGpgpuAllowed(1)); // IOQ has >=1 dependencies PipeControlArgs args; args.csStallOnly = true; MemorySynchronizationCommands::addSingleBarrier(commandStream, args); diff --git a/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp index b2b1138c97..fb0d52c25c 100644 --- a/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp @@ -1069,6 +1069,7 @@ struct RelaxedOrderingEnqueueKernelTests : public EnqueueKernelTest { DebugManager.flags.DirectSubmissionRelaxedOrdering.set(1); DebugManager.flags.UpdateTaskCountFromWait.set(1); + DebugManager.flags.CsrDispatchMode.set(static_cast(DispatchMode::ImmediateDispatch)); ultHwConfig.csrBaseCallDirectSubmissionAvailable = true; @@ -1099,7 +1100,6 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueKernelWhenProgrammingDe MockKernelWithInternals mockKernel(*pClDevice); mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, &outEvent); - mockCmdQueueHw.flush(); EXPECT_FALSE(ultCsr.recordedDispatchFlags.hasStallingCmds); EXPECT_FALSE(ultCsr.recordedDispatchFlags.hasRelaxedOrderingDependencies); @@ -1107,7 +1107,6 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueKernelWhenProgrammingDe auto cmdsOffset = mockCmdQueueHw.getCS(0).getUsed(); mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 1, &outEvent, nullptr); - mockCmdQueueHw.flush(); EXPECT_FALSE(ultCsr.recordedDispatchFlags.hasStallingCmds); EXPECT_TRUE(ultCsr.recordedDispatchFlags.hasRelaxedOrderingDependencies); @@ -1126,7 +1125,6 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueKernelWhenProgrammingDe EXPECT_TRUE(RelaxedOrderingCommandsHelper::verifyConditionalDataMemBbStart(++lrrCmd, 0, compareAddress, 1, CompareOperation::Equal, true)); mockCmdQueueHw.enqueueBarrierWithWaitList(1, &outEvent, nullptr); - mockCmdQueueHw.flush(); EXPECT_TRUE(ultCsr.recordedDispatchFlags.hasStallingCmds); EXPECT_FALSE(ultCsr.recordedDispatchFlags.hasRelaxedOrderingDependencies); @@ -1134,6 +1132,27 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueKernelWhenProgrammingDe clReleaseEvent(outEvent); } +HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenPipeControlForIoqDependencyResolvingEnabledWhenDispatchingRelaxedOrderingThenThrow, IsAtLeastXeHpcCore) { + DebugManager.flags.ResolveDependenciesViaPipeControls.set(1); + + auto &ultCsr = pDevice->getUltCommandStreamReceiver(); + auto directSubmission = new MockDirectSubmissionHw>(ultCsr); + ultCsr.directSubmission.reset(directSubmission); + ultCsr.registerClient(); + ultCsr.registerClient(); + + MockKernelWithInternals mockKernel(*pClDevice); + + MockCommandQueueHw mockCmdQueueHw{context, pClDevice, nullptr}; + + // First dispatch without dependencies + mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); + + EXPECT_FALSE(ultCsr.recordedDispatchFlags.hasRelaxedOrderingDependencies); + + EXPECT_ANY_THROW(mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr)); +} + HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueWithPipeControlWhenSendingBbThenMarkAsStallingDispatch, IsAtLeastXeHpcCore) { auto &ultCsr = pDevice->getUltCommandStreamReceiver(); @@ -1149,16 +1168,13 @@ HWTEST2_F(RelaxedOrderingEnqueueKernelTests, givenEnqueueWithPipeControlWhenSend // warmup mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); - mockCmdQueueHw.flush(); mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); - mockCmdQueueHw.flush(); EXPECT_FALSE(ultCsr.latestFlushedBatchBuffer.hasStallingCmds); ultCsr.heapStorageRequiresRecyclingTag = true; mockCmdQueueHw.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, nullptr); - mockCmdQueueHw.flush(); EXPECT_TRUE(ultCsr.latestFlushedBatchBuffer.hasStallingCmds); }