fix: in-order relaxed ordering handling for signalEvent

Related-To: NEO-13082

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2024-10-25 13:51:36 +00:00
committed by Compute-Runtime-Automation
parent 64c02c904a
commit 2d6fb1af4b
21 changed files with 98 additions and 48 deletions

View File

@@ -58,7 +58,7 @@ ze_result_t zeEventPoolCloseIpcHandle(
ze_result_t zeCommandListAppendSignalEvent(
ze_command_list_handle_t hCommandList,
ze_event_handle_t hEvent) {
return L0::CommandList::fromHandle(hCommandList)->appendSignalEvent(hEvent);
return L0::CommandList::fromHandle(hCommandList)->appendSignalEvent(hEvent, false);
}
ze_result_t zeCommandListAppendWaitOnEvents(

View File

@@ -133,7 +133,7 @@ struct CommandList : _ze_command_list_handle_t {
size_t patternSize, size_t size, ze_event_handle_t hSignalEvent,
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) = 0;
virtual ze_result_t appendMemoryPrefetch(const void *ptr, size_t count) = 0;
virtual ze_result_t appendSignalEvent(ze_event_handle_t hEvent) = 0;
virtual ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) = 0;
virtual ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent, CommandToPatchContainer *outWaitCmds,
bool relaxedOrderingAllowed, bool trackDependencies, bool apiRequest, bool skipAddingWaitEventsToResidency, bool skipFlush, bool copyOffloadOperation) = 0;
virtual ze_result_t appendWriteGlobalTimestamp(uint64_t *dstptr, ze_event_handle_t hSignalEvent,

View File

@@ -179,7 +179,7 @@ struct CommandListCoreFamily : public CommandListImp {
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
ze_result_t hostSynchronize(uint64_t timeout) override;
ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override;
ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) override;
ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent, CommandToPatchContainer *outWaitCmds,
bool relaxedOrderingAllowed, bool trackDependencies, bool apiRequest, bool skipAddingWaitEventsToResidency, bool skipFlush, bool copyOffloadOperation) override;
void appendWaitOnInOrderDependency(std::shared_ptr<NEO::InOrderExecInfo> &inOrderExecInfo, CommandToPatchContainer *outListCommands,

View File

@@ -2466,9 +2466,9 @@ inline ze_result_t CommandListCoreFamily<gfxCoreFamily>::addEventsToCmdList(uint
}
template <GFXCORE_FAMILY gfxCoreFamily>
ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hEvent) {
ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) {
if (this->isInOrderExecutionEnabled()) {
handleInOrderImplicitDependencies(isRelaxedOrderingDispatchAllowed(0, false), false);
handleInOrderImplicitDependencies(relaxedOrderingDispatch, false);
}
auto event = Event::fromHandle(hEvent);

View File

@@ -97,7 +97,7 @@ struct CommandListCoreFamilyImmediate : public CommandListCoreFamily<gfxCoreFami
uint32_t numWaitEvents,
ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) override;
ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override;
ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) override;
ze_result_t appendEventReset(ze_event_handle_t hEvent) override;

View File

@@ -722,13 +722,16 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryFill(void
}
template <GFXCORE_FAMILY gfxCoreFamily>
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hSignalEvent) {
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hSignalEvent, bool relaxedOrderingDispatch) {
using GfxFamily = typename NEO::GfxFamilyMapper<gfxCoreFamily>::GfxFamily;
ze_result_t ret = ZE_RESULT_SUCCESS;
relaxedOrderingDispatch = isRelaxedOrderingDispatchAllowed(0, false);
bool hasStallingCmds = !Event::fromHandle(hSignalEvent)->isCounterBased() || hasStallingCmdsForRelaxedOrdering(0, relaxedOrderingDispatch);
checkAvailableSpace(0, false, commonImmediateCommandSize);
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent);
return flushImmediate(ret, true, true, false, false, false, hSignalEvent, false);
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent, relaxedOrderingDispatch);
return flushImmediate(ret, true, hasStallingCmds, relaxedOrderingDispatch, false, false, hSignalEvent, false);
}
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -763,7 +766,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendPageFaultCopy(N
this->appendMemoryCopyBlit(dstAddressParam, dstAllocation, 0u,
srcAddressParam, srcAllocation, 0u,
sizeParam);
return CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEventParam);
return CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEventParam, false);
});
} else {
ret = CommandListCoreFamily<gfxCoreFamily>::appendPageFaultCopy(dstAllocation, srcAllocation, size, flushHost);
@@ -1527,7 +1530,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendCommandLists(ui
bool relaxedOrderingDispatch = isRelaxedOrderingDispatchAllowed(numWaitEvents, false);
if (hSignalEvent) {
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent);
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent, false);
}
if (ret != ZE_RESULT_SUCCESS) {

View File

@@ -85,7 +85,7 @@ struct BcsSplit {
auto barrierRequired = !cmdList->isInOrderExecutionEnabled() && cmdList->isBarrierRequired();
if (barrierRequired) {
cmdList->appendSignalEvent(this->events.barrier[markerEventIndex]->toHandle());
cmdList->appendSignalEvent(this->events.barrier[markerEventIndex]->toHandle(), false);
}
auto subcopyEventIndex = markerEventIndex * this->cmdQs.size();

View File

@@ -353,7 +353,7 @@ void ImmediateCmdListSharedHeapsFlushTaskFixtureInit::appendNonKernelOperation(L
result = currentCmdList->appendBarrier(nullptr, 0, nullptr, false);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
} else if (operation == NonKernelOperation::SignalEvent) {
result = currentCmdList->appendSignalEvent(event->toHandle());
result = currentCmdList->appendSignalEvent(event->toHandle(), false);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
} else if (operation == NonKernelOperation::ResetEvent) {
result = currentCmdList->appendEventReset(event->toHandle());

View File

@@ -473,7 +473,7 @@ struct MockCommandList : public CommandList {
ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch));
ADDMETHOD_NOBASE(appendSignalEvent, ze_result_t, ZE_RESULT_SUCCESS,
(ze_event_handle_t hEvent));
(ze_event_handle_t hEvent, bool relaxedOrderingDispatch));
ADDMETHOD_NOBASE(appendWaitOnEvents, ze_result_t, ZE_RESULT_SUCCESS,
(uint32_t numEvents,

View File

@@ -1073,7 +1073,7 @@ TEST_F(CommandListCreate, whenCreatingImmCmdListWithSyncModeAndAppendSignalEvent
ASSERT_NE(nullptr, eventObject->csrs[0]);
ASSERT_EQ(device->getNEODevice()->getDefaultEngine().commandStreamReceiver, eventObject->csrs[0]);
commandList->appendSignalEvent(event);
commandList->appendSignalEvent(event, false);
auto result = eventObject->hostSignal(false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
@@ -1195,7 +1195,7 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingTh
verifyFlags(commandList->appendEventReset(event), true, true);
verifyFlags(commandList->appendSignalEvent(event), true, true);
verifyFlags(commandList->appendSignalEvent(event, false), true, true);
verifyFlags(commandList->appendPageFaultCopy(kernel.getIsaAllocation(), kernel.getIsaAllocation(), 1, false), false, false);
@@ -1597,7 +1597,7 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingTh
verifyFlags(commandList->appendEventReset(event), false, false);
verifyFlags(commandList->appendSignalEvent(event), false, false);
verifyFlags(commandList->appendSignalEvent(event, false), false, false);
verifyFlags(commandList->appendPageFaultCopy(kernel.getIsaAllocation(), kernel.getIsaAllocation(), 1, false),
false, false);
@@ -2006,7 +2006,7 @@ HWTEST_F(CommandListCreate, GivenGpuHangWhenCreatingImmediateCommandListAndAppen
const auto oldCsr = queue->csr;
queue->csr = &mockCommandStreamReceiver;
returnValue = commandList->appendSignalEvent(event);
returnValue = commandList->appendSignalEvent(event, false);
EXPECT_EQ(ZE_RESULT_ERROR_DEVICE_LOST, returnValue);
queue->csr = oldCsr;
@@ -2113,7 +2113,7 @@ HWTEST_F(CommandListCreate, GivenGpuHangWhenCreatingImmediateCommandListAndAppen
returnValue = commandList->appendBarrier(nullptr, 1, &event, false);
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
returnValue = commandList->appendSignalEvent(event);
returnValue = commandList->appendSignalEvent(event, false);
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
returnValue = eventObject->hostSignal(false);
@@ -2283,7 +2283,7 @@ TEST_F(CommandListCreate, whenCreatingImmCmdListWithASyncModeAndAppendSignalEven
ASSERT_NE(nullptr, eventObject->csrs[0]);
ASSERT_EQ(device->getNEODevice()->getDefaultEngine().commandStreamReceiver, eventObject->csrs[0]);
commandList->appendSignalEvent(event);
commandList->appendSignalEvent(event, false);
auto result = eventObject->hostSignal(false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);

View File

@@ -1234,7 +1234,7 @@ TEST_F(CommandListCreate, whenCreatingImmCmdListWithASyncModeAndAppendSignalEven
ASSERT_NE(nullptr, eventObject->csrs[0]);
ASSERT_EQ(device->getNEODevice()->getDefaultEngine().commandStreamReceiver, eventObject->csrs[0]);
commandList->appendSignalEvent(event);
commandList->appendSignalEvent(event, false);
auto result = eventObject->hostSignal(false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);

View File

@@ -547,7 +547,7 @@ HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenUseCsrImmediateSubmissi
ze_result_t returnValue = ZE_RESULT_SUCCESS;
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::compute, returnValue));
result = commandList->appendSignalEvent(event->toHandle());
result = commandList->appendSignalEvent(event->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
context->destroy();
@@ -579,7 +579,7 @@ HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenUseCsrImmediateSubmissi
ze_result_t returnValue = ZE_RESULT_SUCCESS;
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::compute, returnValue));
result = commandList->appendSignalEvent(event->toHandle());
result = commandList->appendSignalEvent(event->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
context->destroy();
@@ -611,7 +611,7 @@ HWTEST_F(CommandListImmediateFlushTaskComputeTests, givenUseCsrImmediateSubmissi
ze_result_t returnValue = ZE_RESULT_SUCCESS;
std::unique_ptr<L0::CommandList> commandList(CommandList::createImmediate(productFamily, device, &queueDesc, false, NEO::EngineGroupType::compute, returnValue));
result = commandList->appendSignalEvent(event->toHandle());
result = commandList->appendSignalEvent(event->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
context->destroy();

View File

@@ -566,7 +566,7 @@ HWTEST_F(CommandListCreate, givenCommandListWithCopyOnlyWhenAppendSignalEventThe
MockEvent event;
event.waitScope = ZE_EVENT_SCOPE_FLAG_HOST;
event.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
commandList->appendSignalEvent(event.toHandle());
commandList->appendSignalEvent(event.toHandle(), false);
GenCmdList cmdList;
ASSERT_TRUE(FamilyType::Parse::parseCommandBuffer(
cmdList, ptrOffset(commandContainer.getCommandStream()->getCpuBase(), 0), commandContainer.getCommandStream()->getUsed()));
@@ -583,7 +583,7 @@ HWTEST_F(CommandListCreate, givenCommandListWhenAppendSignalEventWithScopeThenPi
MockEvent event;
event.waitScope = ZE_EVENT_SCOPE_FLAG_HOST;
event.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
commandList->appendSignalEvent(event.toHandle());
commandList->appendSignalEvent(event.toHandle(), false);
GenCmdList cmdList;
ASSERT_TRUE(FamilyType::Parse::parseCommandBuffer(
cmdList, ptrOffset(commandContainer.getCommandStream()->getCpuBase(), 0), commandContainer.getCommandStream()->getUsed()));

View File

@@ -572,7 +572,7 @@ HWTEST_F(CommandListAppendLaunchKernelSWTags, givenEnableSWTagsWhenAppendSignalE
eventPool->createEvent(&eventDesc, &hEvent);
auto result = commandList->appendSignalEvent(hEvent);
auto result = commandList->appendSignalEvent(hEvent, false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
auto usedSpaceAfter = cmdStream->getUsed();

View File

@@ -33,7 +33,7 @@ HWTEST_F(CommandListAppendSignalEvent, WhenAppendingSignalEventWithoutScopeThenM
using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
auto usedSpaceBefore = commandList->getCmdContainer().getCommandStream()->getUsed();
auto result = commandList->appendSignalEvent(event->toHandle());
auto result = commandList->appendSignalEvent(event->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
auto usedSpaceAfter = commandList->getCmdContainer().getCommandStream()->getUsed();
@@ -51,7 +51,7 @@ HWTEST_F(CommandListAppendSignalEvent, WhenAppendingSignalEventWithoutScopeThenM
}
HWTEST_F(CommandListAppendSignalEvent, givenCmdlistWhenAppendingSignalEventThenEventPoolGraphicsAllocationIsAddedToResidencyContainer) {
auto result = commandList->appendSignalEvent(event->toHandle());
auto result = commandList->appendSignalEvent(event->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
auto &residencyContainer = commandList->getCmdContainer().getResidencyContainer();
@@ -81,7 +81,7 @@ HWTEST_F(CommandListAppendSignalEvent, givenEventWithScopeFlagDeviceWhenAppendin
auto eventHostVisible = std::unique_ptr<L0::Event>(Event::create<typename FamilyType::TimestampPacketType>(eventPoolHostVisible.get(), &eventDesc, device));
auto usedSpaceBefore = commandList->getCmdContainer().getCommandStream()->getUsed();
result = commandList->appendSignalEvent(eventHostVisible->toHandle());
result = commandList->appendSignalEvent(eventHostVisible->toHandle(), false);
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
auto usedSpaceAfter = commandList->getCmdContainer().getCommandStream()->getUsed();
@@ -365,7 +365,7 @@ HWTEST2_F(CommandListAppendSignalEvent, givenTimestampEventUsedInSignalThenPipeC
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
auto event = std::unique_ptr<L0::Event>(L0::Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device));
commandList->appendSignalEvent(event->toHandle());
commandList->appendSignalEvent(event->toHandle(), false);
auto contextOffset = event->getContextEndOffset();
auto baseAddr = event->getGpuAddress(device);
auto gpuAddress = ptrOffset(baseAddr, contextOffset);
@@ -410,7 +410,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent,
event->signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
commandList->partitionCount = packets;
ze_result_t returnValue = commandList->appendSignalEvent(event->toHandle());
ze_result_t returnValue = commandList->appendSignalEvent(event->toHandle(), false);
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
EXPECT_EQ(packets, event->getPacketsInUse());
@@ -455,7 +455,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent, givenMultiTileAndDynamicPostSy
event->setEventTimestampFlag(true);
commandList->partitionCount = 2;
EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendSignalEvent(event->toHandle()));
EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendSignalEvent(event->toHandle(), false));
size_t expectedSize = NEO::MemorySynchronizationCommands<FamilyType>::getSizeForBarrierWithPostSyncOperation(device->getNEODevice()->getRootDeviceEnvironment(), false);
@@ -510,7 +510,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent, givenMultiTileAndDynamicPostSy
offset = cmdStream->getUsed();
EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendSignalEvent(event->toHandle()));
EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendSignalEvent(event->toHandle(), false));
expectedSize = sizeof(MI_STORE_DATA_IMM);
usedSize = cmdStream->getUsed() - offset;
@@ -547,7 +547,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent,
event->signalScope = 0;
commandList->partitionCount = packets;
ze_result_t returnValue = commandList->appendSignalEvent(event->toHandle());
ze_result_t returnValue = commandList->appendSignalEvent(event->toHandle(), false);
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
EXPECT_EQ(packets, event->getPacketsInUse());
@@ -885,7 +885,7 @@ HWTEST2_F(CommandListAppendUsedPacketSignalEvent,
event->setEventTimestampFlag(false);
commandList->appendSignalEvent(event->toHandle());
commandList->appendSignalEvent(event->toHandle(), false);
size_t usedAfterSize = cmdStream->getUsed();
GenCmdList cmdList;

View File

@@ -261,12 +261,12 @@ class MockCommandListImmediateHwWithWaitEventFail : public WhiteBox<::L0::Comman
return BaseClass::appendWaitOnEvents(numEvents, phEvent, outWaitCmds, relaxedOrderingAllowed, trackDependencies, apiRequest, skipAddingWaitEventsToResidency, skipFlush, copyOffloadOperation);
};
ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override {
ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) override {
if (forceSignalEventError) {
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
}
appendSignalEventCalled++;
return BaseClass::appendSignalEvent(hEvent);
return BaseClass::appendSignalEvent(hEvent, relaxedOrderingDispatch);
}
ze_result_t executeCommandListImmediate(bool performMigration) override {

View File

@@ -737,7 +737,7 @@ struct CommandListSignalAllEventPacketFixture : public ModuleFixture {
ASSERT_NE(nullptr, event.get());
size_t sizeBefore = cmdStream->getUsed();
result = commandList->appendSignalEvent(event->toHandle());
result = commandList->appendSignalEvent(event->toHandle(), false);
size_t sizeAfter = cmdStream->getUsed();
EXPECT_EQ(ZE_RESULT_SUCCESS, result);

View File

@@ -1512,7 +1512,7 @@ HWTEST2_F(InOrderCmdListTests, givenImmediateCmdListWhenDispatchingWithRegularEv
}
events[0]->makeCounterBasedInitiallyDisabled(eventPool->getAllocation());
immCmdList->appendSignalEvent(eventHandle);
immCmdList->appendSignalEvent(eventHandle, false);
if (dcFlushRequired) {
EXPECT_EQ(Event::CounterBasedMode::initiallyDisabled, events[0]->counterBasedMode);
} else {
@@ -1639,7 +1639,7 @@ HWTEST2_F(InOrderCmdListTests, givenNonInOrderCmdListWhenPassingCounterBasedEven
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, copyOnlyCmdList->appendBlitFill(alloc, &copyData, 1, 16, events[0].get(), 0, nullptr, false));
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, immCmdList->appendSignalEvent(eventHandle));
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, immCmdList->appendSignalEvent(eventHandle, false));
EXPECT_EQ(ZE_RESULT_ERROR_INVALID_ARGUMENT, immCmdList->appendWriteGlobalTimestamp(reinterpret_cast<uint64_t *>(copyData), eventHandle, 0, nullptr));
@@ -1892,6 +1892,53 @@ HWTEST2_F(InOrderCmdListTests, givenCmdsChainingWhenDispatchingKernelWithRelaxed
findConditionalBbStarts(1); // implicit dependency
}
HWTEST2_F(InOrderCmdListTests, givenRelaxedOrderingEnabledWhenSignalEventCalledThenPassStallingCmdsInfo, IsAtLeastXeHpcCore) {
using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
debugManager.flags.DirectSubmissionRelaxedOrdering.set(1);
auto ultCsr = static_cast<UltCommandStreamReceiver<FamilyType> *>(device->getNEODevice()->getDefaultEngine().commandStreamReceiver);
ultCsr->recordFlushedBatchBuffer = true;
auto directSubmission = new MockDirectSubmissionHw<FamilyType, RenderDispatcher<FamilyType>>(*ultCsr);
ultCsr->directSubmission.reset(directSubmission);
auto verifyFlags = [&ultCsr](bool relaxedOrderingExpected, bool stallingCmdsExpected) {
EXPECT_EQ(stallingCmdsExpected, ultCsr->recordedImmediateDispatchFlags.hasStallingCmds);
EXPECT_EQ(stallingCmdsExpected, ultCsr->latestFlushedBatchBuffer.hasStallingCmds);
EXPECT_EQ(relaxedOrderingExpected, ultCsr->latestFlushedBatchBuffer.hasRelaxedOrderingDependencies);
};
auto immCmdList0 = createImmCmdList<gfxCoreFamily>();
immCmdList0->appendLaunchKernel(kernel->toHandle(), groupCount, nullptr, 0, nullptr, launchParams, false); // NP state init
auto immCmdList1 = createImmCmdList<gfxCoreFamily>();
auto immCmdList2 = createImmCmdList<gfxCoreFamily>();
auto eventPool = createEvents<FamilyType>(2, false);
events[1]->makeCounterBasedInitiallyDisabled(eventPool->getAllocation());
auto nonCbEvent = events[1]->toHandle();
immCmdList1->appendSignalEvent(events[0]->toHandle(), true);
verifyFlags(false, false); // no dependencies
immCmdList2->appendSignalEvent(events[0]->toHandle(), false);
verifyFlags(false, false); // no dependencies
immCmdList1->appendSignalEvent(events[0]->toHandle(), true);
verifyFlags(true, false); // relaxed ordering with implicit dependency
immCmdList1->appendSignalEvent(nonCbEvent, true);
verifyFlags(true, true); // relaxed ordering with implicit dependency
immCmdList1->cmdQImmediate->unregisterCsrClient();
immCmdList2->cmdQImmediate->unregisterCsrClient();
immCmdList1->appendSignalEvent(events[0]->toHandle(), false);
verifyFlags(false, true); // relaxed ordering disabled == stalling semaphore
}
HWTEST2_F(InOrderCmdListTests, givenInOrderEventModeWhenWaitingForEventFromPreviousAppendThenSkip, IsAtLeastXeHpCore) {
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
@@ -2798,7 +2845,7 @@ HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenProgrammingAppendSignalEventT
auto offset = cmdStream->getUsed();
immCmdList->appendSignalEvent(events[0]->toHandle());
immCmdList->appendSignalEvent(events[0]->toHandle(), false);
auto inOrderExecInfo = immCmdList->inOrderExecInfo;
uint64_t sdiSyncVa = 0;

View File

@@ -1405,7 +1405,7 @@ HWTEST2_F(InOrderRegularCmdListTests, givenInOrderModeWhenDispatchingRegularCmdL
regularCmdList->appendMemoryFill(data, data, 1, size, nullptr, 0, nullptr, false);
regularCmdList->appendSignalEvent(eventHandle);
regularCmdList->appendSignalEvent(eventHandle, false);
regularCmdList->appendBarrier(nullptr, 1, &eventHandle, false);
@@ -1685,7 +1685,7 @@ HWTEST2_F(StandaloneInOrderTimestampAllocationTests, givenSignalScopeEventWhenSi
size_t offset = cmdStream->getUsed();
{
cmdList->appendSignalEvent(events[1]->toHandle());
cmdList->appendSignalEvent(events[1]->toHandle(), false);
GenCmdList hwCmdList;
EXPECT_TRUE(FamilyType::Parse::parseCommandBuffer(hwCmdList, ptrOffset(cmdStream->getCpuBase(), offset), (cmdStream->getUsed() - offset)));
@@ -1697,7 +1697,7 @@ HWTEST2_F(StandaloneInOrderTimestampAllocationTests, givenSignalScopeEventWhenSi
offset = cmdStream->getUsed();
{
cmdList->appendSignalEvent(events[0]->toHandle());
cmdList->appendSignalEvent(events[0]->toHandle(), false);
GenCmdList hwCmdList;
EXPECT_TRUE(FamilyType::Parse::parseCommandBuffer(hwCmdList, ptrOffset(cmdStream->getCpuBase(), offset), (cmdStream->getUsed() - offset)));

View File

@@ -383,7 +383,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenUseCsrImmediateSubmissionEnabledWithImmediat
returnValue = commandList->appendBarrier(nullptr, 1, &event, false);
EXPECT_EQ(returnValue, ZE_RESULT_SUCCESS);
returnValue = commandList->appendSignalEvent(event);
returnValue = commandList->appendSignalEvent(event, false);
EXPECT_EQ(returnValue, ZE_RESULT_SUCCESS);
returnValue = eventObject->hostSignal(false);
@@ -447,7 +447,7 @@ HWTEST_F(L0DebuggerSimpleTest, givenUseCsrImmediateSubmissionDisabledWithImmedia
returnValue = commandList->appendBarrier(nullptr, 1, &event, false);
EXPECT_EQ(returnValue, ZE_RESULT_SUCCESS);
returnValue = commandList->appendSignalEvent(event);
returnValue = commandList->appendSignalEvent(event, false);
EXPECT_EQ(returnValue, ZE_RESULT_SUCCESS);
returnValue = eventObject->hostSignal(false);

View File

@@ -901,7 +901,7 @@ ze_result_t OaMetricQueryImp::writeMetricQuery(CommandList &commandList, ze_even
// Write completion event.
if (result && writeCompletionEvent) {
result = commandList.appendSignalEvent(hSignalEvent) == ZE_RESULT_SUCCESS;
result = commandList.appendSignalEvent(hSignalEvent, false) == ZE_RESULT_SUCCESS;
}
return result ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNKNOWN;