fix: set start TS on cpu if TS packet write disabled

Signed-off-by: Szymon Morek <szymon.morek@intel.com>
This commit is contained in:
Szymon Morek
2024-07-01 16:24:13 +00:00
committed by Compute-Runtime-Automation
parent 51fc9059c2
commit 53f9a48fce
2 changed files with 46 additions and 3 deletions

View File

@@ -1121,7 +1121,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
if (eventBuilder.getEvent() && isProfilingEnabled() && !isBcsSplitInitialized()) { if (eventBuilder.getEvent() && isProfilingEnabled() && !isBcsSplitInitialized()) {
auto event = eventBuilder.getEvent(); auto event = eventBuilder.getEvent();
event->setSubmitTimeStamp(); event->setSubmitTimeStamp();
if (enqueueProperties.isStartTimestampOnCpuRequired()) { if (enqueueProperties.isStartTimestampOnCpuRequired() || !getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) {
event->setStartTimeStamp(); event->setStartTimeStamp();
} }
} }

View File

@@ -373,7 +373,7 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationWhenEnqueueCommandWithoutKern
EXPECT_TRUE(mockCsr->passedDispatchFlags.isStallingCommandsOnNextFlushRequired); EXPECT_TRUE(mockCsr->passedDispatchFlags.isStallingCommandsOnNextFlushRequired);
} }
HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueueCommandWithoutKernelThenStartTimeStampNotSet) { HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledAndTimeStampPacketsEnabledWhenEnqueueCommandWithoutKernelThenStartTimeStampNotSet) {
using CsrType = MockCsrHw2<FamilyType>; using CsrType = MockCsrHw2<FamilyType>;
setUpImpl<CsrType>(); setUpImpl<CsrType>();
REQUIRE_FULL_BLITTER_OR_SKIP(device->getRootDeviceEnvironment()); REQUIRE_FULL_BLITTER_OR_SKIP(device->getRootDeviceEnvironment());
@@ -400,7 +400,8 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueu
EXPECT_EQ(ev->startTimeStamp.cpuTimeInNs, 0u); EXPECT_EQ(ev->startTimeStamp.cpuTimeInNs, 0u);
EXPECT_EQ(ev->startTimeStamp.gpuTimeInNs, 0u); EXPECT_EQ(ev->startTimeStamp.gpuTimeInNs, 0u);
EXPECT_EQ(ev->startTimeStamp.gpuTimeStamp, 0u); EXPECT_EQ(ev->startTimeStamp.gpuTimeStamp, 0u);
auto &csr = device->getUltCommandStreamReceiver<FamilyType>();
csr.timestampPacketWriteEnabled = true;
mockCmdQ->enqueueCommandWithoutKernel(nullptr, 0, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies, mockCmdQ->enqueueCommandWithoutKernel(nullptr, 0, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies,
eventsRequest, eventBuilder, 0, csrDeps, &bcsCsr, false); eventsRequest, eventBuilder, 0, csrDeps, &bcsCsr, false);
@@ -414,6 +415,48 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueu
delete ev; delete ev;
} }
HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledAndTimeStampPacketsDisabledWhenEnqueueCommandWithoutKernelThenStartTimeStampIsSet) {
using CsrType = MockCsrHw2<FamilyType>;
setUpImpl<CsrType>();
REQUIRE_FULL_BLITTER_OR_SKIP(device->getRootDeviceEnvironment());
cl_queue_properties properties[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0};
auto mockCmdQ = std::make_unique<MockCommandQueueHw<FamilyType>>(context.get(), device.get(), properties);
auto &bcsCsr = *mockCmdQ->bcsEngines[0]->commandStreamReceiver;
auto blocking = true;
TimestampPacketDependencies timestampPacketDependencies;
EventsRequest eventsRequest(0, nullptr, nullptr);
EventBuilder eventBuilder;
eventBuilder.create<MockEvent<Event>>(mockCmdQ.get(), CL_COMMAND_USER, CompletionStamp::notReady, CompletionStamp::notReady);
auto ev = static_cast<MockEvent<UserEvent> *>(eventBuilder.getEvent());
ev->setProfilingEnabled(true);
CsrDependencies csrDeps;
BlitPropertiesContainer blitPropertiesContainer;
EnqueueProperties enqueueProperties(true, false, false, false, false, false, &blitPropertiesContainer);
EXPECT_EQ(ev->submitTimeStamp.cpuTimeInNs, 0u);
EXPECT_EQ(ev->submitTimeStamp.gpuTimeInNs, 0u);
EXPECT_EQ(ev->submitTimeStamp.gpuTimeStamp, 0u);
EXPECT_EQ(ev->startTimeStamp.cpuTimeInNs, 0u);
EXPECT_EQ(ev->startTimeStamp.gpuTimeInNs, 0u);
EXPECT_EQ(ev->startTimeStamp.gpuTimeStamp, 0u);
auto &csr = device->getUltCommandStreamReceiver<FamilyType>();
csr.timestampPacketWriteEnabled = false;
mockCmdQ->enqueueCommandWithoutKernel(nullptr, 0, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies,
eventsRequest, eventBuilder, 0, csrDeps, &bcsCsr, false);
EXPECT_NE(ev->submitTimeStamp.cpuTimeInNs, 0u);
EXPECT_NE(ev->submitTimeStamp.gpuTimeInNs, 0u);
EXPECT_NE(ev->submitTimeStamp.gpuTimeStamp, 0u);
EXPECT_NE(ev->startTimeStamp.cpuTimeInNs, 0u);
EXPECT_NE(ev->startTimeStamp.gpuTimeInNs, 0u);
EXPECT_NE(ev->startTimeStamp.gpuTimeStamp, 0u);
delete ev;
}
HWTEST_F(DispatchFlagsBlitTests, givenN1EnabledWhenDispatchingWithoutKernelThenAllowOutOfOrderExecution) { HWTEST_F(DispatchFlagsBlitTests, givenN1EnabledWhenDispatchingWithoutKernelThenAllowOutOfOrderExecution) {
using CsrType = MockCsrHw2<FamilyType>; using CsrType = MockCsrHw2<FamilyType>;
debugManager.flags.EnableTimestampPacket.set(1); debugManager.flags.EnableTimestampPacket.set(1);