Skip to content

Commit 684b9e5

Browse files
Fix missing submit time calculation
Related-To: NEO-5799 Signed-off-by: Konstanty Misiak <[email protected]>
1 parent b7cc75c commit 684b9e5

File tree

5 files changed

+18
-35
lines changed

5 files changed

+18
-35
lines changed

opencl/source/command_queue/enqueue_common.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,6 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
369369
completionStamp.taskLevel = taskLevel;
370370

371371
if (eventBuilder.getEvent() && isProfilingEnabled()) {
372-
TimeStampData submitTimeStamp;
373-
this->getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
374-
eventBuilder.getEvent()->setSubmitTimeStamp(&submitTimeStamp);
375372
eventBuilder.getEvent()->setSubmitTimeStamp();
376373
eventBuilder.getEvent()->setStartTimeStamp();
377374
}
@@ -818,10 +815,8 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
818815
DEBUG_BREAK_IF(device->getDeviceInfo().preemptionSupported != false);
819816
}
820817

821-
TimeStampData submitTimeStamp = {};
822818
if (isProfilingEnabled() && eventBuilder.getEvent()) {
823-
this->getDevice().getOSTime()->getCpuTime(&submitTimeStamp.CPUTimeinNS);
824-
eventBuilder.getEvent()->setSubmitTimeStamp(&submitTimeStamp);
819+
eventBuilder.getEvent()->setSubmitTimeStamp();
825820

826821
auto hwTimestampNode = eventBuilder.getEvent()->getHwTimeStampNode();
827822
if (hwTimestampNode) {
@@ -1065,10 +1060,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
10651060
}
10661061

10671062
if (eventBuilder.getEvent() && isProfilingEnabled()) {
1068-
TimeStampData submitTimeStamp;
1069-
1070-
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
1071-
eventBuilder.getEvent()->setSubmitTimeStamp(&submitTimeStamp);
1063+
eventBuilder.getEvent()->setSubmitTimeStamp();
10721064
eventBuilder.getEvent()->setStartTimeStamp();
10731065
}
10741066

opencl/source/event/event.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ cl_int Event::getEventProfilingInfo(cl_profiling_info paramName,
171171
break;
172172

173173
case CL_PROFILING_COMMAND_SUBMIT:
174+
calculateSubmitTimestampData();
174175
timestamp = getTimeInNSFromTimestampData(submitTimeStamp);
175176
src = &timestamp;
176177
srcSize = sizeof(cl_ulong);
@@ -260,6 +261,17 @@ cl_ulong Event::getDelta(cl_ulong startTime,
260261
return Delta;
261262
}
262263

264+
void Event::calculateSubmitTimestampData() {
265+
if (DebugManager.flags.EnableDeviceBasedTimestamps.get()) {
266+
auto &device = cmdQueue->getDevice();
267+
auto &hwHelper = HwHelper::get(device.getHardwareInfo().platform.eRenderCoreFamily);
268+
double resolution = device.getDeviceInfo().profilingTimerResolution;
269+
270+
int64_t timerDiff = queueTimeStamp.CPUTimeinNS - hwHelper.getGpuTimeStampInNS(queueTimeStamp.GPUTimeStamp, resolution);
271+
submitTimeStamp.GPUTimeStamp = static_cast<uint64_t>((submitTimeStamp.CPUTimeinNS - timerDiff) / resolution);
272+
}
273+
}
274+
263275
uint64_t Event::getTimeInNSFromTimestampData(const TimeStampData &timestamp) const {
264276
if (isCPUProfilingPath()) {
265277
return timestamp.CPUTimeinNS;

opencl/source/event/event.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,10 +284,6 @@ class Event : public BaseObject<_cl_event>, public IDNode<Event> {
284284
this->queueTimeStamp = *queueTimeStamp;
285285
};
286286

287-
void setSubmitTimeStamp(TimeStampData *submitTimeStamp) {
288-
this->submitTimeStamp = *submitTimeStamp;
289-
};
290-
291287
void setQueueTimeStamp();
292288
void setSubmitTimeStamp();
293289

@@ -330,6 +326,7 @@ class Event : public BaseObject<_cl_event>, public IDNode<Event> {
330326
}
331327
}
332328

329+
void calculateSubmitTimestampData();
333330
uint64_t getTimeInNSFromTimestampData(const TimeStampData &timestamp) const;
334331
bool calcProfilingData();
335332
MOCKABLE_VIRTUAL void calculateProfilingDataInternal(uint64_t contextStartTS, uint64_t contextEndTS, uint64_t *contextCompleteTS, uint64_t globalStartTS);

opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ HWTEST_F(EnqueueHandlerTimestampEnabledTest, givenProflingAndTimeStampPacketsEna
8787
EventBuilder eventBuilder;
8888
eventBuilder.create<MockEvent<Event>>(mockCmdQ.get(), CL_COMMAND_USER, CompletionStamp::notReady, CompletionStamp::notReady);
8989
auto ev = static_cast<MockEvent<UserEvent> *>(eventBuilder.getEvent());
90+
ev->setProfilingEnabled(true);
9091
Surface *surfaces[] = {surface.get()};
9192
auto blocking = true;
9293
TimestampPacketDependencies timestampPacketDependencies;
@@ -95,13 +96,11 @@ HWTEST_F(EnqueueHandlerTimestampEnabledTest, givenProflingAndTimeStampPacketsEna
9596
EnqueueProperties enqueueProperties(false, false, false, true, false, nullptr);
9697

9798
EXPECT_EQ(ev->submitTimeStamp.CPUTimeinNS, 0u);
98-
EXPECT_EQ(ev->submitTimeStamp.GPUTimeStamp, 0u);
9999

100100
mockCmdQ->enqueueCommandWithoutKernel(surfaces, 1, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies,
101101
eventsRequest, eventBuilder, 0, csrDeps, nullptr);
102102

103103
EXPECT_NE(ev->submitTimeStamp.CPUTimeinNS, 0u);
104-
EXPECT_NE(ev->submitTimeStamp.GPUTimeStamp, 0u);
105104

106105
delete ev;
107106
}
@@ -119,6 +118,7 @@ HWTEST_F(EnqueueHandlerTimestampDisabledTest, givenProflingEnabledTimeStampPacke
119118
EventBuilder eventBuilder;
120119
eventBuilder.create<MockEvent<Event>>(mockCmdQ.get(), CL_COMMAND_USER, CompletionStamp::notReady, CompletionStamp::notReady);
121120
auto ev = static_cast<MockEvent<UserEvent> *>(eventBuilder.getEvent());
121+
ev->setProfilingEnabled(true);
122122
Surface *surfaces[] = {surface.get()};
123123
auto blocking = true;
124124
TimestampPacketDependencies timestampPacketDependencies;
@@ -127,13 +127,11 @@ HWTEST_F(EnqueueHandlerTimestampDisabledTest, givenProflingEnabledTimeStampPacke
127127
EnqueueProperties enqueueProperties(false, false, false, true, false, nullptr);
128128

129129
EXPECT_EQ(ev->submitTimeStamp.CPUTimeinNS, 0u);
130-
EXPECT_EQ(ev->submitTimeStamp.GPUTimeStamp, 0u);
131130

132131
mockCmdQ->enqueueCommandWithoutKernel(surfaces, 1, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies,
133132
eventsRequest, eventBuilder, 0, csrDeps, nullptr);
134133

135134
EXPECT_NE(ev->submitTimeStamp.CPUTimeinNS, 0u);
136-
EXPECT_NE(ev->submitTimeStamp.GPUTimeStamp, 0u);
137135

138136
delete ev;
139137
}

opencl/test/unit_test/event/event_tests.cpp

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -743,9 +743,9 @@ TEST_F(InternalsEventTest, givenDeviceTimestampBaseEnabledWhenGetEventProfilingI
743743
const cl_queue_properties props[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0};
744744
MockCommandQueue cmdQ(mockContext, pClDevice, props, false);
745745
MockEvent<Event> event(&cmdQ, CL_COMMAND_MARKER, 0, 0);
746+
event.queueTimeStamp.GPUTimeStamp = MockDeviceTimeWithConstTimestamp::GPU_TIMESTAMP;
746747

747748
event.setCommand(std::unique_ptr<Command>(new CommandWithoutKernel(cmdQ)));
748-
749749
event.submitCommand(false);
750750
uint64_t submitTime = 0ULL;
751751
event.getEventProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, sizeof(uint64_t), &submitTime, 0);
@@ -1145,22 +1145,6 @@ TEST(EventCallback, WhenOverridingStatusThenEventUsesNewStatus) {
11451145
EXPECT_EQ(-1, retStatus);
11461146
}
11471147

1148-
TEST_F(EventTest, WhenSettingTimeStampThenCorrectValuesAreSet) {
1149-
MyEvent ev(this->pCmdQ, CL_COMMAND_COPY_BUFFER, 3, 0);
1150-
TimeStampData inTimeStamp = {1ULL, 2ULL};
1151-
ev.setSubmitTimeStamp(&inTimeStamp);
1152-
TimeStampData outtimeStamp = {0, 0};
1153-
outtimeStamp = ev.getSubmitTimeStamp();
1154-
EXPECT_EQ(1ULL, outtimeStamp.GPUTimeStamp);
1155-
EXPECT_EQ(2ULL, outtimeStamp.CPUTimeinNS);
1156-
inTimeStamp.GPUTimeStamp = 3;
1157-
inTimeStamp.CPUTimeinNS = 4;
1158-
ev.setQueueTimeStamp(&inTimeStamp);
1159-
outtimeStamp = ev.getQueueTimeStamp();
1160-
EXPECT_EQ(3ULL, outtimeStamp.GPUTimeStamp);
1161-
EXPECT_EQ(4ULL, outtimeStamp.CPUTimeinNS);
1162-
}
1163-
11641148
TEST_F(EventTest, WhenSettingCpuTimeStampThenCorrectTimeIsSet) {
11651149
MyEvent ev(this->pCmdQ, CL_COMMAND_COPY_BUFFER, 3, 0);
11661150

0 commit comments

Comments
 (0)