fix: in-order compact events handling

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski 2024-03-25 14:14:34 +00:00 committed by Compute-Runtime-Automation
parent 87022c31d3
commit 1377437b3f
2 changed files with 14 additions and 5 deletions

View File

@ -77,7 +77,11 @@ void programEventL3Flush(Event *event,
template <GFXCORE_FAMILY gfxCoreFamily>
bool CommandListCoreFamily<gfxCoreFamily>::isInOrderNonWalkerSignalingRequired(const Event *event) const {
return (!this->duplicatedInOrderCounterStorageEnabled && event && (event->isUsingContextEndOffset() || !event->isCounterBased() || compactL3FlushEvent(getDcFlushRequired(event->isSignalScope()))));
if (event && compactL3FlushEvent(getDcFlushRequired(event->isSignalScope()))) {
return true;
}
return (!this->duplicatedInOrderCounterStorageEnabled && event && (event->isUsingContextEndOffset() || !event->isCounterBased()));
}
template <GFXCORE_FAMILY gfxCoreFamily>
@ -352,6 +356,9 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
syncCmdBuffer = &launchParams.outSyncCommand->pDestination;
}
appendEventForProfilingAllWalkers(compactEvent, syncCmdBuffer, launchParams.outListCommands, false, true, launchParams.omitAddingEventResidency);
if (compactEvent->isInterruptModeEnabled()) {
NEO::EnodeUserInterrupt<GfxFamily>::encode(*commandContainer.getCommandStream());
}
} else if (event) {
event->setPacketsInUse(partitionCount);
if (l3FlushEnable) {

View File

@ -2189,7 +2189,9 @@ HWTEST2_F(InOrderCmdListTests, givenMultipleAllocationsForWriteWhenAskingForNonW
auto eventPool2 = createEvents<FamilyType>(1, false);
events[2]->makeCounterBasedInitiallyDisabled();
bool isCompactEvent0 = immCmdList->compactL3FlushEvent(immCmdList->getDcFlushRequired(events[0]->isSignalScope()));
bool isCompactEvent1 = immCmdList->compactL3FlushEvent(immCmdList->getDcFlushRequired(events[1]->isSignalScope()));
bool isCompactEvent2 = immCmdList->compactL3FlushEvent(immCmdList->getDcFlushRequired(events[2]->isSignalScope()));
EXPECT_TRUE(immCmdList->isInOrderNonWalkerSignalingRequired(events[0].get()));
EXPECT_EQ(isCompactEvent1, immCmdList->isInOrderNonWalkerSignalingRequired(events[1].get()));
@ -2199,9 +2201,9 @@ HWTEST2_F(InOrderCmdListTests, givenMultipleAllocationsForWriteWhenAskingForNonW
debugManager.flags.InOrderDuplicatedCounterStorageEnabled.set(1);
auto immCmdList2 = createImmCmdList<gfxCoreFamily>();
EXPECT_FALSE(immCmdList2->isInOrderNonWalkerSignalingRequired(events[0].get()));
EXPECT_FALSE(immCmdList2->isInOrderNonWalkerSignalingRequired(events[1].get()));
EXPECT_FALSE(immCmdList2->isInOrderNonWalkerSignalingRequired(events[2].get()));
EXPECT_EQ(isCompactEvent0, immCmdList2->isInOrderNonWalkerSignalingRequired(events[0].get()));
EXPECT_EQ(isCompactEvent1, immCmdList2->isInOrderNonWalkerSignalingRequired(events[1].get()));
EXPECT_EQ(isCompactEvent2, immCmdList2->isInOrderNonWalkerSignalingRequired(events[2].get()));
EXPECT_FALSE(immCmdList2->isInOrderNonWalkerSignalingRequired(nullptr));
}
@ -4460,7 +4462,7 @@ HWTEST2_F(MultiTileInOrderCmdListTests, givenMultiTileInOrderModeWhenProgramming
ASSERT_NE(nullptr, semaphoreCmd);
EXPECT_EQ(static_cast<uint32_t>(Event::State::STATE_CLEARED), semaphoreCmd->getSemaphoreDataDword());
EXPECT_EQ(gpuAddress + sizeof(uint64_t), semaphoreCmd->getSemaphoreGraphicsAddress());
EXPECT_EQ(gpuAddress + events[0]->getSinglePacketSize(), semaphoreCmd->getSemaphoreGraphicsAddress());
}
}