From 5790a624e1ed91afafb7efa32ae49487234992e1 Mon Sep 17 00:00:00 2001 From: Szymon Morek Date: Mon, 24 Nov 2025 14:15:49 +0000 Subject: [PATCH] performance: dont wait on already waited counter Related-To: GSD-11996 Signed-off-by: Szymon Morek --- .../core/source/cmdlist/cmdlist_hw_immediate.inl | 4 ++-- .../sources/cmdlist/test_in_order_cmdlist_1.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl index 587e21ebd9..3324026c5d 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl @@ -1222,9 +1222,9 @@ ze_result_t CommandListCoreFamilyImmediate::hostSynchronize(uint6 uint64_t inOrderSyncValue = this->inOrderExecInfo.get() ? inOrderExecInfo->getCounterValue() : 0; - if (inOrderWaitAllowed) { + if (inOrderWaitAllowed && !inOrderExecInfo->isCounterAlreadyDone(inOrderExecInfo->getCounterValue())) { status = synchronizeInOrderExecution(timeout, (waitQueue == this->cmdQImmediateCopyOffload)); - } else { + } else if (!inOrderWaitAllowed) { const auto indefinitelyPoll = timeout == std::numeric_limits::max(); auto waitStatus = NEO::WaitStatus::notReady; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp index f465384df1..8cf14c8791 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp @@ -3260,6 +3260,10 @@ HWTEST_F(InOrderCmdListTests, givenHostVisibleEventOnLatestFlushWhenCallingSynch EXPECT_EQ(0u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); } + auto currSyncInOrderCalls = immCmdList->synchronizeInOrderExecutionCalled; + immCmdList->hostSynchronize(0, false); + EXPECT_EQ(currSyncInOrderCalls, immCmdList->synchronizeInOrderExecutionCalled); + events[0]->signalScope = ZE_EVENT_SCOPE_FLAG_HOST; immCmdList->appendLaunchKernel(kernel->toHandle(), groupCount, events[0]->toHandle(), 0, nullptr, launchParams); EXPECT_TRUE(immCmdList->latestFlushIsHostVisible); @@ -3268,10 +3272,10 @@ HWTEST_F(InOrderCmdListTests, givenHostVisibleEventOnLatestFlushWhenCallingSynch if (!immCmdList->isHeaplessModeEnabled() && immCmdList->latestOperationHasOptimizedCbEvent) { EXPECT_EQ(0u, immCmdList->synchronizeInOrderExecutionCalled); - EXPECT_EQ(2u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); + EXPECT_EQ(3u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); } else if (immCmdList->dcFlushSupport) { EXPECT_EQ(1u, immCmdList->synchronizeInOrderExecutionCalled); - EXPECT_EQ(1u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); + EXPECT_EQ(2u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); } else { EXPECT_EQ(2u, immCmdList->synchronizeInOrderExecutionCalled); EXPECT_EQ(0u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); @@ -3282,10 +3286,10 @@ HWTEST_F(InOrderCmdListTests, givenHostVisibleEventOnLatestFlushWhenCallingSynch if (!immCmdList->isHeaplessModeEnabled() && immCmdList->latestOperationHasOptimizedCbEvent) { EXPECT_EQ(0u, immCmdList->synchronizeInOrderExecutionCalled); - EXPECT_EQ(3u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); + EXPECT_EQ(4u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); } else if (immCmdList->dcFlushSupport) { EXPECT_EQ(1u, immCmdList->synchronizeInOrderExecutionCalled); - EXPECT_EQ(2u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); + EXPECT_EQ(3u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled); } else { EXPECT_EQ(2u, immCmdList->synchronizeInOrderExecutionCalled); EXPECT_EQ(1u, ultCsr->waitForCompletionWithTimeoutTaskCountCalled);