Skip to content

Commit 54fb82f

Browse files
fix: improve event timestamp completion tracking
Related-To: HSD-18041011542 Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 6aeb8df commit 54fb82f

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

level_zero/core/source/event/event_imp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ struct EventImp : public Event {
7878
const uint32_t count, const ze_kernel_timestamp_result_t *pKernelTimestampsBuffer);
7979
void copyDataToEventAlloc(void *dstHostAddr, uint64_t dstGpuVa, size_t copySize, const void *copyData);
8080
void copyTbxData(uint64_t dstGpuVa, size_t copySize);
81+
bool isTimestampPopulated() const { return (contextEndTS != Event::STATE_CLEARED || globalEndTS != Event::STATE_CLEARED); }
8182
void synchronizeCounterBasedTimestampCompletionWithTimeout();
8283
};
8384

level_zero/core/source/event/event_impl.inl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -772,8 +772,8 @@ void EventImp<TagSizeT>::synchronizeCounterBasedTimestampCompletionWithTimeout()
772772
calculateProfilingData();
773773

774774
timeDiff = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - startTime).count();
775-
} while ((contextEndTS == Event::STATE_CLEARED || contextEndTS == 0) && (timeDiff < timeoutMs));
776-
DEBUG_BREAK_IF(contextEndTS == Event::STATE_CLEARED || contextEndTS == 0);
775+
} while (!isTimestampPopulated() && (timeDiff < timeoutMs));
776+
DEBUG_BREAK_IF(!isTimestampPopulated());
777777
}
778778

779779
template <typename TagSizeT>
@@ -787,7 +787,7 @@ ze_result_t EventImp<TagSizeT>::queryKernelTimestamp(ze_kernel_timestamp_result_
787787
assignKernelEventCompletionData(getHostAddress());
788788
calculateProfilingData();
789789

790-
if (isCounterBased() && (contextEndTS == Event::STATE_CLEARED || contextEndTS == 0)) {
790+
if (isCounterBased() && !isTimestampPopulated()) {
791791
synchronizeCounterBasedTimestampCompletionWithTimeout();
792792
}
793793

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -457,10 +457,12 @@ HWTEST2_F(InOrderCmdListTests, givenCounterBasedTimestampEventWhenQueryingTimest
457457

458458
uint32_t assignKernelEventCompletionDataCalled = 0;
459459
uint32_t assignKernelEventCompletionDataFailCounter = 0;
460-
uint64_t notReadyData = Event::STATE_CLEARED;
460+
const uint64_t notReadyData = Event::STATE_CLEARED;
461+
bool useContextEndForVerification = true;
461462

462463
void assignKernelEventCompletionData(void *address) override {
463-
auto completionAddress = reinterpret_cast<uint64_t *>(getCompletionFieldHostAddress());
464+
auto offset = useContextEndForVerification ? NEO::TimestampPackets<uint64_t, 1>::getContextEndOffset() : NEO::TimestampPackets<uint64_t, 1>::getGlobalEndOffset();
465+
auto completionAddress = reinterpret_cast<uint64_t *>(ptrOffset(getHostAddress(), offset));
464466
assignKernelEventCompletionDataCalled++;
465467
if (assignKernelEventCompletionDataCalled <= assignKernelEventCompletionDataFailCounter) {
466468
*completionAddress = notReadyData;
@@ -481,17 +483,21 @@ HWTEST2_F(InOrderCmdListTests, givenCounterBasedTimestampEventWhenQueryingTimest
481483
event1->enableCounterBasedMode(true, ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE);
482484
event1->assignKernelEventCompletionDataFailCounter = 2;
483485
event1->setUsingContextEndOffset(true);
486+
event1->setEventTimestampFlag(true);
487+
event1->useContextEndForVerification = true;
484488

485489
event2->enableCounterBasedMode(true, ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE);
486490
event2->assignKernelEventCompletionDataFailCounter = 2;
487491
event2->setUsingContextEndOffset(true);
488-
event2->notReadyData = 0;
492+
event2->setEventTimestampFlag(true);
493+
event2->useContextEndForVerification = false;
489494

490495
cmdList->appendLaunchKernel(kernel->toHandle(), groupCount, event1->toHandle(), 0, nullptr, launchParams, false);
496+
event1->hostEventSetValue(Event::STATE_CLEARED);
497+
491498
cmdList->appendLaunchKernel(kernel->toHandle(), groupCount, event2->toHandle(), 0, nullptr, launchParams, false);
499+
event2->hostEventSetValue(Event::STATE_CLEARED);
492500

493-
*reinterpret_cast<uint64_t *>(event1->getCompletionFieldHostAddress()) = Event::STATE_CLEARED;
494-
*reinterpret_cast<uint64_t *>(event2->getCompletionFieldHostAddress()) = 0;
495501
event1->getInOrderExecInfo()->setLastWaitedCounterValue(2);
496502
event2->getInOrderExecInfo()->setLastWaitedCounterValue(2);
497503

@@ -500,8 +506,8 @@ HWTEST2_F(InOrderCmdListTests, givenCounterBasedTimestampEventWhenQueryingTimest
500506

501507
ze_kernel_timestamp_result_t kernelTimestamps = {};
502508

503-
EXPECT_EQ(0u, event1->assignKernelEventCompletionDataCalled);
504-
EXPECT_EQ(0u, event2->assignKernelEventCompletionDataCalled);
509+
event1->assignKernelEventCompletionDataCalled = 0;
510+
event2->assignKernelEventCompletionDataCalled = 0;
505511
event1->queryKernelTimestamp(&kernelTimestamps);
506512
event2->queryKernelTimestamp(&kernelTimestamps);
507513

0 commit comments

Comments
 (0)