Skip to content

Commit a35e3b7

Browse files
Return valid TaskLevel for UserEvent and GlSyncEvent
Change-Id: Ic2bcb64e92e07b94c1af47b109af1274bf6c8c3e Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
1 parent 2ca3e4c commit a35e3b7

File tree

7 files changed

+60
-15
lines changed

7 files changed

+60
-15
lines changed

runtime/event/event.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ inline void Event::unblockEventBy(Event &event, uint32_t taskLevel, int32_t tran
544544
DBG_LOG(EventsDebugEnable, "Event", this, "is unblocked by", &event);
545545

546546
if (this->taskLevel == Event::eventNotReady) {
547-
this->taskLevel = taskLevel;
547+
this->taskLevel = std::max(cmdQueue->getCommandStreamReceiver().peekTaskLevel(), taskLevel);
548548
} else {
549549
this->taskLevel = std::max(this->taskLevel.load(), taskLevel);
550550
}

runtime/event/user_event.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,10 @@ bool UserEvent::wait(bool blocking, bool useQuickKmdSleep) {
3232
}
3333

3434
uint32_t UserEvent::getTaskLevel() {
35-
uint32_t taskLevel = 0;
36-
if (ctx != nullptr) {
37-
Device *pDevice = ctx->getDevice(0);
38-
auto csr = pDevice->getDefaultEngine().commandStreamReceiver;
39-
taskLevel = csr->peekTaskLevel();
35+
if (peekExecutionStatus() == CL_COMPLETE) {
36+
return 0;
4037
}
41-
return taskLevel;
38+
return Event::eventNotReady;
4239
}
4340

4441
bool UserEvent::isInitialEventStatus() const {

runtime/sharings/gl/gl_sync_event.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ void GlSyncEvent::updateExecutionStatus() {
5353
}
5454

5555
uint32_t GlSyncEvent::getTaskLevel() {
56-
auto csr = ctx->getDevice(0)->getDefaultEngine().commandStreamReceiver;
57-
return csr->peekTaskLevel();
56+
if (peekExecutionStatus() == CL_COMPLETE) {
57+
return 0;
58+
}
59+
return Event::eventNotReady;
5860
}
5961
} // namespace OCLRT

unit_tests/event/event_tests.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,7 +1344,7 @@ TEST(EventCallback, GivenEventWithCallbacksOnPeekHasCallbacksReturnsTrue) {
13441344
}
13451345

13461346
TEST_F(EventTest, addChildForEventUncompleted) {
1347-
VirtualEvent virtualEvent;
1347+
VirtualEvent virtualEvent(pCmdQ, &mockContext);
13481348
{
13491349
Event event(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, 0, 0);
13501350
event.addChild(virtualEvent);
@@ -1366,8 +1366,29 @@ TEST(Event, whenCreatingRegularEventsThenExternalSynchronizationIsNotRequired) {
13661366
virtualEvent->release();
13671367
}
13681368

1369+
HWTEST_F(EventTest, givenEventWithNotReadyTaskLevelWhenUnblockedThenGetTaskLevelFromCsrIfGreaterThanParent) {
1370+
uint32_t initialTaskLevel = 10;
1371+
Event parentEventWithGreaterTaskLevel(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, initialTaskLevel + 5, 0);
1372+
Event parentEventWithLowerTaskLevel(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, initialTaskLevel - 5, 0);
1373+
1374+
Event childEvent0(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, Event::eventNotReady);
1375+
Event childEvent1(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, Event::eventNotReady, Event::eventNotReady);
1376+
1377+
auto &csr = reinterpret_cast<UltCommandStreamReceiver<FamilyType> &>(pCmdQ->getCommandStreamReceiver());
1378+
csr.taskLevel = initialTaskLevel;
1379+
1380+
parentEventWithGreaterTaskLevel.addChild(childEvent0);
1381+
parentEventWithLowerTaskLevel.addChild(childEvent1);
1382+
1383+
parentEventWithGreaterTaskLevel.setStatus(CL_COMPLETE);
1384+
parentEventWithLowerTaskLevel.setStatus(CL_COMPLETE);
1385+
1386+
EXPECT_EQ(parentEventWithGreaterTaskLevel.getTaskLevel() + 1, childEvent0.getTaskLevel());
1387+
EXPECT_EQ(csr.taskLevel, childEvent1.getTaskLevel());
1388+
}
1389+
13691390
TEST_F(EventTest, addChildForEventCompleted) {
1370-
VirtualEvent virtualEvent;
1391+
VirtualEvent virtualEvent(pCmdQ, &mockContext);
13711392
{
13721393
Event event(pCmdQ, CL_COMMAND_NDRANGE_KERNEL, 0, 0);
13731394
event.setStatus(CL_COMPLETE);

unit_tests/event/event_tracker_tests.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ TEST(EventsTracker, givenSubmittedUserEventThenDumpingWithProperLabel) {
291291
EventsTracker::dumpNode(&uEvent, stream, map);
292292

293293
expected << "e0[label=\"{------USER_EVENT ptr=" << &uEvent
294-
<< "------||CL_SUBMITTED|task count=NOT_READY, level=0|CALLBACKS=FALSE}\",color=red];\n";
294+
<< "------||CL_SUBMITTED|task count=NOT_READY, level=NOT_READY|CALLBACKS=FALSE}\",color=red];\n";
295295

296296
EXPECT_STREQ(expected.str().c_str(), stream.str().c_str());
297297
}
@@ -431,6 +431,9 @@ TEST(EventsTracker, givenTwoEventsWithCommonParentEventThenDumpingProperGraph) {
431431

432432
EXPECT_STREQ(expected.str().c_str(), stream.str().c_str());
433433

434+
uEventChild1.updateCompletionStamp(0, 0, 0);
435+
uEventChild2.updateCompletionStamp(0, 0, 0);
436+
uEvent.updateCompletionStamp(0, 0, 0);
434437
uEvent.setStatus(0);
435438
}
436439

@@ -605,6 +608,10 @@ TEST(EventsTracker, givenEventsWithDependenciesBetweenThemThenDumpingProperGraph
605608

606609
EXPECT_STREQ(expected.str().c_str(), evTrackerMock.streamMock.c_str());
607610

611+
uEventChild1.updateCompletionStamp(0, 0, 0);
612+
uEventChild2.updateCompletionStamp(0, 0, 0);
613+
uEvent2.updateCompletionStamp(0, 0, 0);
614+
uEvent1.updateCompletionStamp(0, 0, 0);
608615
uEvent2.setStatus(0);
609616
uEvent1.setStatus(0);
610617
}

unit_tests/event/user_events_tests.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,22 @@ TEST(UserEvent, userEventAfterSetingStatusIsReadyForSubmission) {
147147
EXPECT_TRUE(uEvent.isReadyForSubmission());
148148
}
149149

150+
TEST(UserEvent, givenUserEventWhenStatusIsCompletedThenReturnZeroTaskLevel) {
151+
UserEvent uEvent;
152+
153+
uEvent.setStatus(CL_QUEUED);
154+
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
155+
156+
uEvent.setStatus(CL_SUBMITTED);
157+
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
158+
159+
uEvent.setStatus(CL_RUNNING);
160+
EXPECT_EQ(Event::eventNotReady, uEvent.getTaskLevel());
161+
162+
uEvent.setStatus(CL_COMPLETE);
163+
EXPECT_EQ(0u, uEvent.getTaskLevel());
164+
}
165+
150166
typedef HelloWorldTest<HelloWorldFixtureFactory> EventTests;
151167

152168
TEST_F(EventTests, blockedUserEventPassedToEnqueueNdRangeWithoutReturnEventIsNotSubmittedToCSR) {
@@ -519,7 +535,7 @@ TEST_F(EventTests, enqueueWithAbortedUserEventDoesntFlushToCSR) {
519535
EXPECT_EQ(taskCount, taskCountAfter);
520536

521537
Event *pChildEvent = (Event *)retEvent;
522-
EXPECT_EQ(Event::eventNotReady, pChildEvent->taskLevel);
538+
EXPECT_EQ(Event::eventNotReady, pChildEvent->getTaskLevel());
523539

524540
cl_int eventStatus = 0;
525541
retVal = clGetEventInfo(retEvent, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(cl_int), &eventStatus, NULL);

unit_tests/sharings/gl/gl_sharing_tests.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -972,13 +972,15 @@ HWTEST_F(glSharingTests, givenSyncObjectWhenCreateEventIsCalledThenCreateGLSyncO
972972

973973
auto &csr = reinterpret_cast<MockDevice *>(context.getDevice(0))->getUltCommandStreamReceiver<FamilyType>();
974974
csr.taskLevel = 123;
975-
auto csrTaskLevel = csr.peekTaskLevel();
976975
auto eventObj = castToObject<Event>(event);
977976
EXPECT_TRUE(eventObj->getCommandType() == CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR);
978977
EXPECT_TRUE(eventObj->peekExecutionStatus() == CL_SUBMITTED);
979978
EXPECT_EQ(Event::eventNotReady, eventObj->taskLevel);
980-
EXPECT_EQ(csrTaskLevel, eventObj->getTaskLevel());
979+
EXPECT_EQ(Event::eventNotReady, eventObj->getTaskLevel());
981980
EXPECT_EQ(1, GLRetainSyncCalled);
981+
982+
eventObj->setStatus(CL_COMPLETE);
983+
EXPECT_EQ(0u, eventObj->getTaskLevel());
982984
clReleaseEvent(event);
983985
EXPECT_EQ(1, GLReleaseSyncCalled);
984986
}

0 commit comments

Comments
 (0)