fix: improve CB event completion writes

Related-To: NEO-11925

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2024-09-30 10:35:33 +00:00
committed by Compute-Runtime-Automation
parent dd2e843599
commit f02b518674
4 changed files with 22 additions and 1 deletions

View File

@@ -3867,7 +3867,7 @@ void CommandListCoreFamily<gfxCoreFamily>::dispatchEventPostSyncOperation(Event
template <GFXCORE_FAMILY gfxCoreFamily>
void CommandListCoreFamily<gfxCoreFamily>::dispatchEventRemainingPacketsPostSyncOperation(Event *event, bool copyOperation) {
if (this->signalAllEventPackets && event->getPacketsInUse() < event->getMaxPacketsCount()) {
if (this->signalAllEventPackets && !event->isCounterBased() && event->getPacketsInUse() < event->getMaxPacketsCount()) {
uint32_t packets = event->getMaxPacketsCount() - event->getPacketsInUse();
CmdListEventOperation remainingPacketsOperation = estimateEventPostSync(event, packets);

View File

@@ -295,6 +295,7 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
if (this->isInOrderExecutionEnabled() && !launchParams.isKernelSplitOperation) {
NEO::PipeControlArgs args;
args.dcFlushEnable = getDcFlushRequired(true);
NEO::MemorySynchronizationCommands<GfxFamily>::addSingleBarrier(*commandContainer.getCommandStream(), args);
appendSignalInOrderDependencyCounter(event, false);

View File

@@ -199,6 +199,7 @@ struct WhiteBox<L0::CommandListCoreFamilyImmediate<gfxCoreFamily>>
using BaseClass::dcFlushSupport;
using BaseClass::device;
using BaseClass::disablePatching;
using BaseClass::dispatchEventRemainingPacketsPostSyncOperation;
using BaseClass::doubleSbaWa;
using BaseClass::enablePatching;
using BaseClass::engineGroupType;

View File

@@ -2621,6 +2621,23 @@ HWTEST2_F(InOrderCmdListTests, givenMultipleAllocationsForWriteWhenAskingForNonW
EXPECT_FALSE(immCmdList2->isInOrderNonWalkerSignalingRequired(nullptr));
}
HWTEST2_F(InOrderCmdListTests, givenSignalAllPacketsSetWhenProgrammingRemainingPacketsThenSkip, MatchAny) {
auto immCmdList = createImmCmdList<gfxCoreFamily>();
immCmdList->signalAllEventPackets = true;
auto eventPool = createEvents<FamilyType>(1, false);
events[0]->maxPacketCount = 2;
events[0]->setPacketsInUse(1);
auto cmdStream = immCmdList->getCmdContainer().getCommandStream();
auto offset = cmdStream->getUsed();
immCmdList->dispatchEventRemainingPacketsPostSyncOperation(events[0].get(), false);
immCmdList->dispatchEventRemainingPacketsPostSyncOperation(events[0].get(), true);
EXPECT_EQ(offset, cmdStream->getUsed());
}
HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenProgrammingWalkerThenProgramPipeControlWithSignalAllocation, IsGen12LP) {
using WALKER = typename FamilyType::DefaultWalkerType;
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
@@ -2646,6 +2663,8 @@ HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenProgrammingWalkerThenProgramP
auto pcCmd = genCmdCast<PIPE_CONTROL *>(*pcItor);
ASSERT_NE(nullptr, pcCmd);
EXPECT_EQ(immCmdList->getDcFlushRequired(true), pcCmd->getDcFlushEnable());
EXPECT_EQ(PIPE_CONTROL::POST_SYNC_OPERATION::POST_SYNC_OPERATION_NO_WRITE, pcCmd->getPostSyncOperation());
auto sdiItor = find<MI_STORE_DATA_IMM *>(pcItor, cmdList.end());