Skip to content

Commit 7c256a6

Browse files
fix: use tpause in Event::hostSynchronize()
Related-To: NEO-9737 Signed-off-by: Mateusz Hoppe <[email protected]>
1 parent 811ed06 commit 7c256a6

File tree

15 files changed

+103
-81
lines changed

15 files changed

+103
-81
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
@@ -96,7 +96,7 @@ ze_result_t ZE_APICALL zeEventHostSynchronize(
9696

9797
ze_result_t ZE_APICALL zeEventQueryStatus(
9898
ze_event_handle_t hEvent) {
99-
return L0::Event::fromHandle(hEvent)->queryStatus();
99+
return L0::Event::fromHandle(hEvent)->queryStatus(0);
100100
}
101101

102102
ze_result_t ZE_APICALL zeCommandListAppendEventReset(

level_zero/core/source/device/bcs_split.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ BcsSplit::CmdListsForSplitContainer BcsSplit::getCmdListsForSplit(NEO::TransferD
149149

150150
size_t BcsSplitEvents::obtainAggregatedEventsForSplit(Context *context) {
151151
for (size_t i = 0; i < this->marker.size(); i++) {
152-
if (this->marker[i]->queryStatus() == ZE_RESULT_SUCCESS) {
152+
if (this->marker[i]->queryStatus(0) == ZE_RESULT_SUCCESS) {
153153
resetAggregatedEventState(i, false);
154154
return i;
155155
}
@@ -166,7 +166,7 @@ std::optional<size_t> BcsSplitEvents::obtainForSplit(Context *context, size_t ma
166166
}
167167

168168
for (size_t i = 0; i < this->marker.size(); i++) {
169-
auto ret = this->marker[i]->queryStatus();
169+
auto ret = this->marker[i]->queryStatus(0);
170170
if (ret == ZE_RESULT_SUCCESS) {
171171
this->resetEventPackage(i);
172172
return i;

level_zero/core/source/event/event.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ struct Event : _ze_event_handle_t {
112112
virtual ze_result_t destroy();
113113
virtual ze_result_t hostSignal(bool allowCounterBased) = 0;
114114
virtual ze_result_t hostSynchronize(uint64_t timeout) = 0;
115-
virtual ze_result_t queryStatus() = 0;
115+
virtual ze_result_t queryStatus(int64_t timeSinceWait) = 0;
116116
virtual ze_result_t reset() = 0;
117117
virtual ze_result_t queryKernelTimestamp(ze_kernel_timestamp_result_t *dstptr) = 0;
118118
virtual ze_result_t queryTimestampsExp(Device *device, uint32_t *count, ze_kernel_timestamp_result_t *timestamps) = 0;

level_zero/core/source/event/event_imp.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ struct EventImp : public Event {
3434

3535
ze_result_t hostSynchronize(uint64_t timeout) override;
3636

37-
ze_result_t queryStatus() override;
37+
ze_result_t queryStatus(int64_t timeSinceWait) override;
3838

3939
ze_result_t reset() override;
4040

@@ -68,8 +68,8 @@ struct EventImp : public Event {
6868
TaskCountType getTaskCount(const NEO::CommandStreamReceiver &csr) const;
6969

7070
ze_result_t calculateProfilingData();
71-
ze_result_t queryStatusEventPackets();
72-
ze_result_t queryCounterBasedEventStatus();
71+
ze_result_t queryStatusEventPackets(int64_t timeSinceWait);
72+
ze_result_t queryCounterBasedEventStatus(int64_t timeSinceWait);
7373
void handleSuccessfulHostSynchronization();
7474
MOCKABLE_VIRTUAL ze_result_t hostEventSetValueTimestamps(State eventState);
7575
void clearTimestampTagData(uint32_t partitionCount, NEO::TagNodeBase *newNode) override;

level_zero/core/source/event/event_impl.inl

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ void EventImp<TagSizeT>::assignKernelEventCompletionData(void *address) {
291291
}
292292

293293
template <typename TagSizeT>
294-
ze_result_t EventImp<TagSizeT>::queryCounterBasedEventStatus() {
294+
ze_result_t EventImp<TagSizeT>::queryCounterBasedEventStatus(int64_t timeSinceWait) {
295295
if (!this->inOrderExecInfo.get()) {
296296
return reportEmptyCbEventAsReady ? ZE_RESULT_SUCCESS : ZE_RESULT_NOT_READY;
297297
}
@@ -308,7 +308,7 @@ ze_result_t EventImp<TagSizeT>::queryCounterBasedEventStatus() {
308308
} else {
309309
const uint64_t *hostAddress = ptrOffset(inOrderExecInfo->getBaseHostAddress(), this->inOrderAllocationOffset);
310310
for (uint32_t i = 0; i < inOrderExecInfo->getNumHostPartitionsToWait(); i++) {
311-
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>(), 0)) {
311+
if (!NEO::WaitUtils::waitFunctionWithPredicate<const uint64_t>(hostAddress, waitValue, std::greater_equal<uint64_t>(), timeSinceWait)) {
312312
signaled = false;
313313
break;
314314
}
@@ -391,10 +391,11 @@ void EventImp<TagSizeT>::handleSuccessfulHostSynchronization() {
391391
}
392392

393393
template <typename TagSizeT>
394-
ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
394+
ze_result_t EventImp<TagSizeT>::queryStatusEventPackets(int64_t timeSinceWait) {
395395
assignKernelEventCompletionData(getHostAddress());
396396
uint32_t queryVal = Event::STATE_CLEARED;
397397
uint32_t packets = 0;
398+
398399
for (uint32_t i = 0; i < this->kernelCount; i++) {
399400
uint32_t packetsToCheck = kernelEventCompletionData[i].getPacketsUsed();
400401
for (uint32_t packetId = 0; packetId < packetsToCheck; packetId++, packets++) {
@@ -405,7 +406,7 @@ ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
405406
static_cast<TagSizeT const *>(queryAddress),
406407
queryVal,
407408
std::not_equal_to<TagSizeT>(),
408-
0);
409+
timeSinceWait);
409410
if (!ready) {
410411
return ZE_RESULT_NOT_READY;
411412
}
@@ -422,7 +423,7 @@ ze_result_t EventImp<TagSizeT>::queryStatusEventPackets() {
422423
static_cast<TagSizeT const *>(queryAddress),
423424
queryVal,
424425
std::not_equal_to<TagSizeT>(),
425-
0);
426+
timeSinceWait);
426427
if (!ready) {
427428
return ZE_RESULT_NOT_READY;
428429
}
@@ -512,15 +513,15 @@ bool EventImp<TagSizeT>::handlePreQueryStatusOperationsAndCheckCompletion() {
512513
}
513514

514515
template <typename TagSizeT>
515-
ze_result_t EventImp<TagSizeT>::queryStatus() {
516+
ze_result_t EventImp<TagSizeT>::queryStatus(int64_t timeSinceWait) {
516517
if (handlePreQueryStatusOperationsAndCheckCompletion()) {
517518
return ZE_RESULT_SUCCESS;
518519
}
519520

520521
if (isCounterBased() || this->inOrderExecInfo.get()) {
521-
return queryCounterBasedEventStatus();
522+
return queryCounterBasedEventStatus(timeSinceWait);
522523
} else {
523-
return queryStatusEventPackets();
524+
return queryStatusEventPackets(timeSinceWait);
524525
}
525526
}
526527

@@ -772,7 +773,7 @@ ze_result_t EventImp<TagSizeT>::hostSynchronize(uint64_t timeout) {
772773
if (fenceWait) {
773774
ret = waitForUserFence(timeout);
774775
} else {
775-
ret = queryStatus();
776+
ret = queryStatus(timeDiff);
776777
}
777778
}
778779
if (ret == ZE_RESULT_SUCCESS) {
@@ -835,7 +836,7 @@ ze_result_t EventImp<TagSizeT>::reset() {
835836
}
836837

837838
if (NEO::debugManager.flags.SynchronizeEventBeforeReset.get() != -1) {
838-
if (NEO::debugManager.flags.SynchronizeEventBeforeReset.get() == 2 && queryStatus() != ZE_RESULT_SUCCESS) {
839+
if (NEO::debugManager.flags.SynchronizeEventBeforeReset.get() == 2 && queryStatus(0) != ZE_RESULT_SUCCESS) {
839840
printf("\nzeEventHostReset: Event %p not ready. Calling zeEventHostSynchronize.", this);
840841
}
841842

@@ -884,7 +885,7 @@ ze_result_t EventImp<TagSizeT>::queryKernelTimestamp(ze_kernel_timestamp_result_
884885
ze_kernel_timestamp_result_t &result = *dstptr;
885886

886887
if (!this->isCounterBased() || this->inOrderTimestampNode.empty()) {
887-
if (queryStatus() != ZE_RESULT_SUCCESS) {
888+
if (queryStatus(0) != ZE_RESULT_SUCCESS) {
888889
return ZE_RESULT_NOT_READY;
889890
}
890891
}
@@ -1051,7 +1052,7 @@ ze_result_t EventImp<TagSizeT>::queryKernelTimestampsExt(Device *device, uint32_
10511052
return queryTimestampsExp(device, pCount, nullptr);
10521053
}
10531054

1054-
if (queryStatus() != ZE_RESULT_SUCCESS) {
1055+
if (queryStatus(0) != ZE_RESULT_SUCCESS) {
10551056
return ZE_RESULT_NOT_READY;
10561057
}
10571058

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct Mock<Event> : public Event {
9191
ADDMETHOD_NOBASE(destroy, ze_result_t, ZE_RESULT_SUCCESS, ());
9292
ADDMETHOD_NOBASE(hostSignal, ze_result_t, ZE_RESULT_SUCCESS, (bool allowCounterBased));
9393
ADDMETHOD_NOBASE(hostSynchronize, ze_result_t, ZE_RESULT_SUCCESS, (uint64_t timeout));
94-
ADDMETHOD_NOBASE(queryStatus, ze_result_t, ZE_RESULT_SUCCESS, ());
94+
ADDMETHOD_NOBASE(queryStatus, ze_result_t, ZE_RESULT_SUCCESS, (int64_t timeDiff));
9595
ADDMETHOD_NOBASE(reset, ze_result_t, ZE_RESULT_SUCCESS, ());
9696
ADDMETHOD_NOBASE(queryKernelTimestamp, ze_result_t, ZE_RESULT_SUCCESS, (ze_kernel_timestamp_result_t * dstptr));
9797
ADDMETHOD_NOBASE(queryTimestampsExp, ze_result_t, ZE_RESULT_SUCCESS, (::L0::Device * device, uint32_t *count, ze_kernel_timestamp_result_t *timestamps));
@@ -174,7 +174,7 @@ class MockEvent : public ::L0::Event {
174174
ze_result_t hostSynchronize(uint64_t timeout) override {
175175
return ZE_RESULT_SUCCESS;
176176
}
177-
ze_result_t queryStatus() override {
177+
ze_result_t queryStatus(int64_t timeDiff) override {
178178
return ZE_RESULT_SUCCESS;
179179
}
180180
ze_result_t reset() override {

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithSyncModeAndAppendSignal
13061306
auto result = eventObject->hostSignal(false);
13071307
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
13081308

1309-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
1309+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
13101310
}
13111311

13121312
TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithSyncModeAndAppendBarrierThenUpdateTaskCountNeededFlagIsDisabled) {
@@ -1346,7 +1346,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithSyncModeAndAppendBarrie
13461346
auto result = eventObject->hostSignal(false);
13471347
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
13481348

1349-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
1349+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
13501350

13511351
commandList->appendBarrier(nullptr, 0, nullptr, false);
13521352
}
@@ -2602,7 +2602,7 @@ HWTEST_F(CommandListCreateTests, GivenGpuHangWhenCreatingImmediateCommandListAnd
26022602

26032603
returnValue = eventObject->hostSignal(false);
26042604
ASSERT_EQ(ZE_RESULT_SUCCESS, returnValue);
2605-
EXPECT_EQ(ZE_RESULT_SUCCESS, eventObject->queryStatus());
2605+
EXPECT_EQ(ZE_RESULT_SUCCESS, eventObject->queryStatus(0));
26062606

26072607
MockCommandStreamReceiver mockCommandStreamReceiver(*neoDevice->executionEnvironment, neoDevice->getRootDeviceIndex(), neoDevice->getDeviceBitfield());
26082608
mockCommandStreamReceiver.waitForCompletionWithTimeoutReturnValue = WaitStatus::gpuHang;
@@ -2725,7 +2725,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithSyncModeAndAppendResetE
27252725
auto result = eventObject->hostSignal(false);
27262726
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
27272727

2728-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
2728+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
27292729
}
27302730

27312731
TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendSignalEventThenUpdateTaskCountNeededFlagIsEnabled) {
@@ -2766,7 +2766,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendSigna
27662766
auto result = eventObject->hostSignal(false);
27672767
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
27682768

2769-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
2769+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
27702770
}
27712771

27722772
TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendBarrierThenUpdateTaskCountNeededFlagIsEnabled) {
@@ -2807,7 +2807,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendBarri
28072807
auto result = eventObject->hostSignal(false);
28082808
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
28092809

2810-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
2810+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
28112811

28122812
commandList->appendBarrier(nullptr, 0, nullptr, false);
28132813
}
@@ -2851,7 +2851,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndCopyEngineA
28512851
auto result = eventObject->hostSignal(false);
28522852
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
28532853

2854-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
2854+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
28552855

28562856
commandList->appendBarrier(nullptr, 0, nullptr, false);
28572857
}
@@ -2894,7 +2894,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendEvent
28942894
auto result = eventObject->hostSignal(false);
28952895
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
28962896

2897-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
2897+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
28982898
}
28992899

29002900
TEST_F(CommandListCreateTests, whenInvokingAppendMemoryCopyFromContextForImmediateCommandListWithSyncModeThenSuccessIsReturned) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,7 +1229,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendSigna
12291229
auto result = eventObject->hostSignal(false);
12301230
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
12311231

1232-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
1232+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
12331233
}
12341234

12351235
TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendBarrierThenUpdateTaskCountNeededFlagIsDisabled) {
@@ -1270,7 +1270,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendBarri
12701270
auto result = eventObject->hostSignal(false);
12711271
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
12721272

1273-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
1273+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
12741274

12751275
commandList->appendBarrier(event, 0, nullptr, false);
12761276
}
@@ -1313,7 +1313,7 @@ TEST_F(CommandListCreateTests, whenCreatingImmCmdListWithASyncModeAndAppendEvent
13131313
auto result = eventObject->hostSignal(false);
13141314
ASSERT_EQ(ZE_RESULT_SUCCESS, result);
13151315

1316-
EXPECT_EQ(eventObject->queryStatus(), ZE_RESULT_SUCCESS);
1316+
EXPECT_EQ(eventObject->queryStatus(0), ZE_RESULT_SUCCESS);
13171317
}
13181318

13191319
TEST_F(CommandListCreateWithBcs, givenQueueDescriptionwhenCreatingImmediateCommandListForCopyEnigneThenItHasImmediateCommandQueueCreated) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -901,11 +901,11 @@ HWTEST_F(AppendMemoryLockedCopyTest, givenImmediateCommandListAndSignalEventAndN
901901
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
902902
auto event = std::unique_ptr<L0::Event>(Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device, returnValue));
903903

904-
EXPECT_EQ(event->queryStatus(), ZE_RESULT_NOT_READY);
904+
EXPECT_EQ(event->queryStatus(0), ZE_RESULT_NOT_READY);
905905
auto res = cmdList.appendMemoryCopy(devicePtr, nonUsmHostPtr, 1024, event->toHandle(), 0, nullptr, copyParams);
906906
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
907907

908-
EXPECT_EQ(event->queryStatus(), ZE_RESULT_SUCCESS);
908+
EXPECT_EQ(event->queryStatus(0), ZE_RESULT_SUCCESS);
909909
}
910910

911911
HWTEST_F(AppendMemoryLockedCopyTest, givenImmediateCommandListAndSignalEventAndCpuMemcpyWhenGpuHangThenDontSynchronizeEvent) {
@@ -932,12 +932,12 @@ HWTEST_F(AppendMemoryLockedCopyTest, givenImmediateCommandListAndSignalEventAndC
932932
EXPECT_EQ(ZE_RESULT_SUCCESS, returnValue);
933933
auto event = std::unique_ptr<L0::Event>(Event::create<typename FamilyType::TimestampPacketType>(eventPool.get(), &eventDesc, device, returnValue));
934934

935-
EXPECT_EQ(event->queryStatus(), ZE_RESULT_NOT_READY);
935+
EXPECT_EQ(event->queryStatus(0), ZE_RESULT_NOT_READY);
936936
cmdList.appendBarrier(nullptr, 0, nullptr, false);
937937
auto res = cmdList.appendMemoryCopy(devicePtr, nonUsmHostPtr, 1024, event->toHandle(), 0, nullptr, copyParams);
938938
EXPECT_EQ(res, ZE_RESULT_ERROR_DEVICE_LOST);
939939

940-
EXPECT_EQ(event->queryStatus(), ZE_RESULT_NOT_READY);
940+
EXPECT_EQ(event->queryStatus(0), ZE_RESULT_NOT_READY);
941941
}
942942

943943
HWTEST_F(AppendMemoryLockedCopyTest, givenImmediateCommandListWhenCpuMemcpyWithoutBarrierThenDontWaitForTagUpdate) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ HWTEST_F(CommandListAppendLaunchKernel, givenKernelWithPrintfAndEventAppendedToC
462462
EXPECT_EQ(1u, commandList->getPrintfKernelContainer().size());
463463
EXPECT_EQ(nullptr, commandList->getPrintfKernelContainer()[0].lock().get());
464464
EXPECT_EQ(nullptr, event->getKernelForPrintf().lock().get());
465-
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus());
465+
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus(0));
466466
EXPECT_EQ(ZE_RESULT_SUCCESS, event->hostSynchronize(std::numeric_limits<uint64_t>::max()));
467467
EXPECT_EQ(nullptr, event->getKernelWithPrintfDeviceMutex());
468468

@@ -610,7 +610,7 @@ HWTEST_F(CommandListAppendLaunchKernel, givenKernelWithPrintfAndEventAppendedToI
610610
EXPECT_EQ(ZE_RESULT_SUCCESS, kernel->destroy());
611611
EXPECT_EQ(nullptr, static_cast<ModuleImp *>(module.get())->getPrintfKernelContainer()[0].get());
612612
EXPECT_EQ(nullptr, event->getKernelForPrintf().lock().get());
613-
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus());
613+
EXPECT_EQ(ZE_RESULT_SUCCESS, event->queryStatus(0));
614614
EXPECT_EQ(ZE_RESULT_SUCCESS, event->hostSynchronize(std::numeric_limits<uint64_t>::max()));
615615
EXPECT_EQ(nullptr, event->getKernelWithPrintfDeviceMutex());
616616
}

0 commit comments

Comments
 (0)