mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 06:23:01 +08:00
feature: skip Events from previous append in in-order CL path
Related-To: NEO-7966 Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
808ff8c2e4
commit
fb7fff7442
@@ -2176,6 +2176,15 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendWaitOnEvents(uint32_t nu
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isInOrderExecutionEnabled() && event->isInOrderExecEvent()) {
|
||||
auto const cmdListNode = this->timestampPacketContainer->peekNodes()[0];
|
||||
auto const eventNode = event->getInOrderTimestampPacket()->peekNodes()[0];
|
||||
|
||||
if (cmdListNode == eventNode) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
commandContainer.addToResidencyContainer(&event->getAllocation(this->device));
|
||||
gpuAddr = event->getCompletionFieldGpuAddress(this->device);
|
||||
uint32_t packetsToWait = event->getPacketsInUse();
|
||||
|
||||
@@ -205,6 +205,8 @@ struct Event : _ze_event_handle_t {
|
||||
this->metricStreamer = metricStreamer;
|
||||
}
|
||||
void enableInOrderExecMode(const NEO::TimestampPacketContainer &inOrderSyncNodes);
|
||||
bool isInOrderExecEvent() const { return inOrderExecEvent; }
|
||||
const NEO::TimestampPacketContainer *getInOrderTimestampPacket() const { return inOrderTimestampPacket.get(); }
|
||||
|
||||
protected:
|
||||
Event(EventPool *eventPool, int index, Device *device) : device(device), eventPool(eventPool), index(index) {}
|
||||
|
||||
@@ -806,6 +806,69 @@ HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenSubmittingThenProgramSemaphor
|
||||
EXPECT_EQ(MI_SEMAPHORE_WAIT::COMPARE_OPERATION::COMPARE_OPERATION_SAD_NOT_EQUAL_SDD, semaphoreCmd->getCompareOperation());
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenWaitingForEventFromPreviousAppendThenSkip, IsAtLeastXeHpCore) {
|
||||
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
|
||||
|
||||
auto immCmdList = createImmCmdList<gfxCoreFamily>();
|
||||
|
||||
auto eventPool = createEvents<FamilyType>(1, false);
|
||||
auto eventHandle = events[0]->toHandle();
|
||||
|
||||
auto cmdStream = immCmdList->getCmdContainer().getCommandStream();
|
||||
|
||||
immCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, eventHandle, 0, nullptr, launchParams, false);
|
||||
|
||||
auto offset = cmdStream->getUsed();
|
||||
|
||||
immCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 1, &eventHandle, launchParams, false);
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(
|
||||
cmdList,
|
||||
ptrOffset(cmdStream->getCpuBase(), offset),
|
||||
cmdStream->getUsed() - offset));
|
||||
|
||||
auto itor = find<typename FamilyType::MI_SEMAPHORE_WAIT *>(cmdList.begin(), cmdList.end());
|
||||
|
||||
ASSERT_NE(cmdList.end(), itor); // implicit dependency
|
||||
|
||||
itor = find<typename FamilyType::MI_SEMAPHORE_WAIT *>(++itor, cmdList.end());
|
||||
|
||||
EXPECT_EQ(cmdList.end(), itor);
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenWaitingForEventFromAfterResetThenDontSkip, IsAtLeastXeHpCore) {
|
||||
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
|
||||
|
||||
auto immCmdList = createImmCmdList<gfxCoreFamily>();
|
||||
|
||||
auto eventPool = createEvents<FamilyType>(1, false);
|
||||
auto eventHandle = events[0]->toHandle();
|
||||
|
||||
auto cmdStream = immCmdList->getCmdContainer().getCommandStream();
|
||||
|
||||
immCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, eventHandle, 0, nullptr, launchParams, false);
|
||||
events[0]->reset();
|
||||
|
||||
auto offset = cmdStream->getUsed();
|
||||
|
||||
immCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 1, &eventHandle, launchParams, false);
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(
|
||||
cmdList,
|
||||
ptrOffset(cmdStream->getCpuBase(), offset),
|
||||
cmdStream->getUsed() - offset));
|
||||
|
||||
auto itor = find<typename FamilyType::MI_SEMAPHORE_WAIT *>(cmdList.begin(), cmdList.end());
|
||||
|
||||
ASSERT_NE(cmdList.end(), itor); // implicit dependency
|
||||
|
||||
itor = find<typename FamilyType::MI_SEMAPHORE_WAIT *>(++itor, cmdList.end());
|
||||
|
||||
EXPECT_NE(cmdList.end(), itor);
|
||||
}
|
||||
|
||||
HWTEST2_F(InOrderCmdListTests, givenInOrderEventModeWhenSubmittingThenProgramSemaphoreForEvent, IsAtLeastXeHpCore) {
|
||||
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user