Don't appendWaitOnEvents on already signaled event

Related-To: NEO-7534

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2022-11-22 11:52:58 +00:00
committed by Compute-Runtime-Automation
parent 6040923c80
commit 8a2a12393d
4 changed files with 45 additions and 2 deletions

View File

@ -436,6 +436,13 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendPageFaultCopy(N
template <GFXCORE_FAMILY gfxCoreFamily>
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phWaitEvents) {
bool allSignaled = true;
for (auto i = 0u; i < numEvents; i++) {
allSignaled &= (!this->dcFlushSupport && Event::fromHandle(phWaitEvents[i])->isAlreadyCompleted());
}
if (allSignaled) {
return ZE_RESULT_SUCCESS;
}
if (this->isFlushTaskSubmissionEnabled) {
checkAvailableSpace();
}

View File

@ -505,6 +505,7 @@ class MockCommandListImmediateHw : public WhiteBox<::L0::CommandListCoreFamilyIm
using BaseClass = WhiteBox<::L0::CommandListCoreFamilyImmediate<gfxCoreFamily>>;
MockCommandListImmediateHw() : BaseClass() {}
using BaseClass::applyMemoryRangesBarrier;
using BaseClass::dcFlushSupport;
using BaseClass::dependenciesPresent;
using BaseClass::isFlushTaskSubmissionEnabled;
using BaseClass::isSyncModeQueue;

View File

@ -545,5 +545,31 @@ HWTEST2_F(MultTileCommandListAppendWaitOnEvent,
EXPECT_EQ(2u, semaphoreWaitsFound);
}
HWTEST2_F(CommandListAppendWaitOnEvent, givenImmediateCommandListWhenAppendWaitOnNotSignaledEventThenWait, IsAtLeastSkl) {
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
ze_event_handle_t eventHandle = event->toHandle();
EXPECT_FALSE(cmdList.dependenciesPresent);
EXPECT_EQ(ZE_RESULT_SUCCESS, cmdList.appendWaitOnEvents(1, &eventHandle));
EXPECT_TRUE(cmdList.dependenciesPresent);
}
HWTEST2_F(CommandListAppendWaitOnEvent, givenImmediateCommandListWhenAppendWaitOnAlreadySignaledEventThenDontWait, IsAtLeastSkl) {
MockCommandListImmediateHw<gfxCoreFamily> cmdList;
cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u);
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
cmdList.dcFlushSupport = false;
event->hostSignal();
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus());
ze_event_handle_t eventHandle = event->toHandle();
EXPECT_FALSE(cmdList.dependenciesPresent);
EXPECT_EQ(ZE_RESULT_SUCCESS, cmdList.appendWaitOnEvents(1, &eventHandle));
EXPECT_FALSE(cmdList.dependenciesPresent);
}
} // namespace ult
} // namespace L0

View File

@ -1124,8 +1124,17 @@ HWTEST2_F(AppendMemoryLockedCopyTest, givenImmediateCommandListWhenAppendWaitOnE
cmdList.csr = device->getNEODevice()->getInternalEngine().commandStreamReceiver;
EXPECT_FALSE(cmdList.dependenciesPresent);
cmdList.appendWaitOnEvents(0, nullptr);
ze_event_pool_desc_t eventPoolDesc = {};
eventPoolDesc.count = 1;
eventPoolDesc.flags = ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP;
ze_event_desc_t eventDesc = {};
eventDesc.index = 0;
ze_result_t returnValue = ZE_RESULT_SUCCESS;
auto eventPool = std::unique_ptr<EventPool>(EventPool::create(driverHandle.get(), context, 0, nullptr, &eventPoolDesc, returnValue));
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
auto event = std::unique_ptr<Event>(Event::create<uint32_t>(eventPool.get(), &eventDesc, device));
auto eventHandle = event->toHandle();
cmdList.appendWaitOnEvents(1, &eventHandle);
EXPECT_TRUE(cmdList.dependenciesPresent);