Skip to content

Commit 2d6fb1a

Browse files
fix: in-order relaxed ordering handling for signalEvent
Related-To: NEO-13082 Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 64c02c9 commit 2d6fb1a

21 files changed

+98
-48
lines changed

level_zero/api/core/ze_event_api_entrypoints.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ ze_result_t zeEventPoolCloseIpcHandle(
5858
ze_result_t zeCommandListAppendSignalEvent(
5959
ze_command_list_handle_t hCommandList,
6060
ze_event_handle_t hEvent) {
61-
return L0::CommandList::fromHandle(hCommandList)->appendSignalEvent(hEvent);
61+
return L0::CommandList::fromHandle(hCommandList)->appendSignalEvent(hEvent, false);
6262
}
6363

6464
ze_result_t zeCommandListAppendWaitOnEvents(

level_zero/core/source/cmdlist/cmdlist.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ struct CommandList : _ze_command_list_handle_t {
133133
size_t patternSize, size_t size, ze_event_handle_t hSignalEvent,
134134
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) = 0;
135135
virtual ze_result_t appendMemoryPrefetch(const void *ptr, size_t count) = 0;
136-
virtual ze_result_t appendSignalEvent(ze_event_handle_t hEvent) = 0;
136+
virtual ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) = 0;
137137
virtual ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent, CommandToPatchContainer *outWaitCmds,
138138
bool relaxedOrderingAllowed, bool trackDependencies, bool apiRequest, bool skipAddingWaitEventsToResidency, bool skipFlush, bool copyOffloadOperation) = 0;
139139
virtual ze_result_t appendWriteGlobalTimestamp(uint64_t *dstptr, ze_event_handle_t hSignalEvent,

level_zero/core/source/cmdlist/cmdlist_hw.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ struct CommandListCoreFamily : public CommandListImp {
179179
uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override;
180180
ze_result_t hostSynchronize(uint64_t timeout) override;
181181

182-
ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override;
182+
ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) override;
183183
ze_result_t appendWaitOnEvents(uint32_t numEvents, ze_event_handle_t *phEvent, CommandToPatchContainer *outWaitCmds,
184184
bool relaxedOrderingAllowed, bool trackDependencies, bool apiRequest, bool skipAddingWaitEventsToResidency, bool skipFlush, bool copyOffloadOperation) override;
185185
void appendWaitOnInOrderDependency(std::shared_ptr<NEO::InOrderExecInfo> &inOrderExecInfo, CommandToPatchContainer *outListCommands,

level_zero/core/source/cmdlist/cmdlist_hw.inl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2466,9 +2466,9 @@ inline ze_result_t CommandListCoreFamily<gfxCoreFamily>::addEventsToCmdList(uint
24662466
}
24672467

24682468
template <GFXCORE_FAMILY gfxCoreFamily>
2469-
ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hEvent) {
2469+
ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) {
24702470
if (this->isInOrderExecutionEnabled()) {
2471-
handleInOrderImplicitDependencies(isRelaxedOrderingDispatchAllowed(0, false), false);
2471+
handleInOrderImplicitDependencies(relaxedOrderingDispatch, false);
24722472
}
24732473

24742474
auto event = Event::fromHandle(hEvent);

level_zero/core/source/cmdlist/cmdlist_hw_immediate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ struct CommandListCoreFamilyImmediate : public CommandListCoreFamily<gfxCoreFami
9797
uint32_t numWaitEvents,
9898
ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch) override;
9999

100-
ze_result_t appendSignalEvent(ze_event_handle_t hEvent) override;
100+
ze_result_t appendSignalEvent(ze_event_handle_t hEvent, bool relaxedOrderingDispatch) override;
101101

102102
ze_result_t appendEventReset(ze_event_handle_t hEvent) override;
103103

level_zero/core/source/cmdlist/cmdlist_hw_immediate.inl

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -722,13 +722,16 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendMemoryFill(void
722722
}
723723

724724
template <GFXCORE_FAMILY gfxCoreFamily>
725-
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hSignalEvent) {
725+
ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendSignalEvent(ze_event_handle_t hSignalEvent, bool relaxedOrderingDispatch) {
726726
using GfxFamily = typename NEO::GfxFamilyMapper<gfxCoreFamily>::GfxFamily;
727727
ze_result_t ret = ZE_RESULT_SUCCESS;
728728

729+
relaxedOrderingDispatch = isRelaxedOrderingDispatchAllowed(0, false);
730+
bool hasStallingCmds = !Event::fromHandle(hSignalEvent)->isCounterBased() || hasStallingCmdsForRelaxedOrdering(0, relaxedOrderingDispatch);
731+
729732
checkAvailableSpace(0, false, commonImmediateCommandSize);
730-
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent);
731-
return flushImmediate(ret, true, true, false, false, false, hSignalEvent, false);
733+
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent, relaxedOrderingDispatch);
734+
return flushImmediate(ret, true, hasStallingCmds, relaxedOrderingDispatch, false, false, hSignalEvent, false);
732735
}
733736

734737
template <GFXCORE_FAMILY gfxCoreFamily>
@@ -763,7 +766,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendPageFaultCopy(N
763766
this->appendMemoryCopyBlit(dstAddressParam, dstAllocation, 0u,
764767
srcAddressParam, srcAllocation, 0u,
765768
sizeParam);
766-
return CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEventParam);
769+
return CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEventParam, false);
767770
});
768771
} else {
769772
ret = CommandListCoreFamily<gfxCoreFamily>::appendPageFaultCopy(dstAllocation, srcAllocation, size, flushHost);
@@ -1527,7 +1530,7 @@ ze_result_t CommandListCoreFamilyImmediate<gfxCoreFamily>::appendCommandLists(ui
15271530

15281531
bool relaxedOrderingDispatch = isRelaxedOrderingDispatchAllowed(numWaitEvents, false);
15291532
if (hSignalEvent) {
1530-
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent);
1533+
ret = CommandListCoreFamily<gfxCoreFamily>::appendSignalEvent(hSignalEvent, false);
15311534
}
15321535

15331536
if (ret != ZE_RESULT_SUCCESS) {

level_zero/core/source/device/bcs_split.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ struct BcsSplit {
8585

8686
auto barrierRequired = !cmdList->isInOrderExecutionEnabled() && cmdList->isBarrierRequired();
8787
if (barrierRequired) {
88-
cmdList->appendSignalEvent(this->events.barrier[markerEventIndex]->toHandle());
88+
cmdList->appendSignalEvent(this->events.barrier[markerEventIndex]->toHandle(), false);
8989
}
9090

9191
auto subcopyEventIndex = markerEventIndex * this->cmdQs.size();

level_zero/core/test/unit_tests/fixtures/cmdlist_fixture.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ void ImmediateCmdListSharedHeapsFlushTaskFixtureInit::appendNonKernelOperation(L
353353
result = currentCmdList->appendBarrier(nullptr, 0, nullptr, false);
354354
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
355355
} else if (operation == NonKernelOperation::SignalEvent) {
356-
result = currentCmdList->appendSignalEvent(event->toHandle());
356+
result = currentCmdList->appendSignalEvent(event->toHandle(), false);
357357
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
358358
} else if (operation == NonKernelOperation::ResetEvent) {
359359
result = currentCmdList->appendEventReset(event->toHandle());

level_zero/core/test/unit_tests/mocks/mock_cmdlist.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ struct MockCommandList : public CommandList {
473473
ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch));
474474

475475
ADDMETHOD_NOBASE(appendSignalEvent, ze_result_t, ZE_RESULT_SUCCESS,
476-
(ze_event_handle_t hEvent));
476+
(ze_event_handle_t hEvent, bool relaxedOrderingDispatch));
477477

478478
ADDMETHOD_NOBASE(appendWaitOnEvents, ze_result_t, ZE_RESULT_SUCCESS,
479479
(uint32_t numEvents,

level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@ TEST_F(CommandListCreate, whenCreatingImmCmdListWithSyncModeAndAppendSignalEvent
10731073
ASSERT_NE(nullptr, eventObject->csrs[0]);
10741074
ASSERT_EQ(device->getNEODevice()->getDefaultEngine().commandStreamReceiver, eventObject->csrs[0]);
10751075

1076-
commandList->appendSignalEvent(event);
1076+
commandList->appendSignalEvent(event, false);
10771077

10781078
auto result = eventObject->hostSignal(false);
10791079
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
@@ -1195,7 +1195,7 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingTh
11951195

11961196
verifyFlags(commandList->appendEventReset(event), true, true);
11971197

1198-
verifyFlags(commandList->appendSignalEvent(event), true, true);
1198+
verifyFlags(commandList->appendSignalEvent(event, false), true, true);
11991199

12001200
verifyFlags(commandList->appendPageFaultCopy(kernel.getIsaAllocation(), kernel.getIsaAllocation(), 1, false), false, false);
12011201

@@ -1597,7 +1597,7 @@ HWTEST2_F(CommandListCreate, givenDirectSubmissionAndImmCmdListWhenDispatchingTh
15971597

15981598
verifyFlags(commandList->appendEventReset(event), false, false);
15991599

1600-
verifyFlags(commandList->appendSignalEvent(event), false, false);
1600+
verifyFlags(commandList->appendSignalEvent(event, false), false, false);
16011601

16021602
verifyFlags(commandList->appendPageFaultCopy(kernel.getIsaAllocation(), kernel.getIsaAllocation(), 1, false),
16031603
false, false);
@@ -2006,7 +2006,7 @@ HWTEST_F(CommandListCreate, GivenGpuHangWhenCreatingImmediateCommandListAndAppen
20062006
const auto oldCsr = queue->csr;
20072007
queue->csr = &mockCommandStreamReceiver;
20082008

2009-
returnValue = commandList->appendSignalEvent(event);
2009+
returnValue = commandList->appendSignalEvent(event, false);
20102010
EXPECT_EQ(ZE_RESULT_ERROR_DEVICE_LOST, returnValue);
20112011

20122012
queue->csr = oldCsr;
@@ -2113,7 +2113,7 @@ HWTEST_F(CommandListCreate, GivenGpuHangWhenCreatingImmediateCommandListAndAppen
21132113
returnValue = commandList->appendBarrier(nullptr, 1, &event, false);
21142114
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
21152115

2116-
returnValue = commandList->appendSignalEvent(event);
2116+
returnValue = commandList->appendSignalEvent(event, false);
21172117
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
21182118

21192119
returnValue = eventObject->hostSignal(false);
@@ -2283,7 +2283,7 @@ TEST_F(CommandListCreate, whenCreatingImmCmdListWithASyncModeAndAppendSignalEven
22832283
ASSERT_NE(nullptr, eventObject->csrs[0]);
22842284
ASSERT_EQ(device->getNEODevice()->getDefaultEngine().commandStreamReceiver, eventObject->csrs[0]);
22852285

2286-
commandList->appendSignalEvent(event);
2286+
commandList->appendSignalEvent(event, false);
22872287

22882288
auto result = eventObject->hostSignal(false);
22892289
ASSERT_EQ(ZE_RESULT_SUCCESS, result);

0 commit comments

Comments
 (0)