mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 16:24:18 +08:00
Fix event submit time for enqueue without kernel
Change-Id: Ibb9ee7312a2c9618d91ebca03b0e0eb98cc551ee Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
4e53e4e257
commit
ffc218d8a2
@@ -932,6 +932,13 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
|
||||
flushGpgpuCsr = false;
|
||||
}
|
||||
|
||||
if (eventBuilder.getEvent() && isProfilingEnabled()) {
|
||||
TimeStampData submitTimeStamp;
|
||||
|
||||
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
|
||||
eventBuilder.getEvent()->setSubmitTimeStamp(&submitTimeStamp);
|
||||
}
|
||||
|
||||
if (flushGpgpuCsr) {
|
||||
if (timestampPacketContainer) {
|
||||
timestampPacketContainer->makeResident(getGpgpuCommandStreamReceiver());
|
||||
@@ -943,13 +950,6 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
|
||||
surface->makeResident(getGpgpuCommandStreamReceiver());
|
||||
}
|
||||
|
||||
TimeStampData submitTimeStamp;
|
||||
if (eventBuilder.getEvent() && isProfilingEnabled() && getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) {
|
||||
this->getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
|
||||
eventBuilder.getEvent()->setSubmitTimeStamp(&submitTimeStamp);
|
||||
eventBuilder.getEvent()->getTimestampPacketNodes()->makeResident(getGpgpuCommandStreamReceiver());
|
||||
}
|
||||
|
||||
DispatchFlags dispatchFlags(
|
||||
{}, //csrDependencies
|
||||
×tampPacketDependencies.barrierNodes, //barrierTimestampPacketNodes
|
||||
|
||||
@@ -1243,6 +1243,36 @@ HWTEST_TEMPLATED_F(BlitEnqueueWithDisabledGpgpuSubmissionTests, givenCacheFlushR
|
||||
EXPECT_EQ(2u, gpgpuCsr->peekTaskCount());
|
||||
}
|
||||
|
||||
HWTEST_TEMPLATED_F(BlitEnqueueWithDisabledGpgpuSubmissionTests, givenProfilingEnabledWhenSubmittingWithoutFlushToGpgpuThenSetSubmitTime) {
|
||||
auto mockCommandQueue = static_cast<MockCommandQueueHw<FamilyType> *>(commandQueue.get());
|
||||
EXPECT_EQ(EnqueueProperties::Operation::None, mockCommandQueue->latestSentEnqueueType);
|
||||
|
||||
DebugManager.flags.ForceGpgpuSubmissionForBcsEnqueue.set(-1);
|
||||
|
||||
mockCommandQueue->overrideIsCacheFlushForBcsRequired.enabled = true;
|
||||
mockCommandQueue->overrideIsCacheFlushForBcsRequired.returnValue = true;
|
||||
mockCommandQueue->setProfilingEnabled();
|
||||
|
||||
auto buffer = createBuffer(1, false);
|
||||
buffer->forceDisallowCPUCopy = true;
|
||||
int hostPtr = 0;
|
||||
|
||||
cl_event clEvent;
|
||||
|
||||
commandQueue->enqueueWriteBuffer(buffer.get(), false, 0, 1, &hostPtr, nullptr, 0, nullptr, &clEvent);
|
||||
EXPECT_EQ(EnqueueProperties::Operation::Blit, mockCommandQueue->latestSentEnqueueType);
|
||||
EXPECT_EQ(0u, gpgpuCsr->peekTaskCount());
|
||||
|
||||
auto event = castToObject<Event>(clEvent);
|
||||
|
||||
uint64_t submitTime = 0;
|
||||
event->getEventProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, sizeof(submitTime), &submitTime, nullptr);
|
||||
|
||||
EXPECT_NE(0u, submitTime);
|
||||
|
||||
clReleaseEvent(clEvent);
|
||||
}
|
||||
|
||||
HWTEST_TEMPLATED_F(BlitEnqueueWithDisabledGpgpuSubmissionTests, givenCacheFlushNotRequiredWhenDoingBcsCopyThenDontSubmitToGpgpu) {
|
||||
auto mockCommandQueue = static_cast<MockCommandQueueHw<FamilyType> *>(commandQueue.get());
|
||||
EXPECT_EQ(EnqueueProperties::Operation::None, mockCommandQueue->latestSentEnqueueType);
|
||||
|
||||
@@ -100,7 +100,7 @@ HWTEST_F(EnqueueHandlerTimestampEnabledTest, givenProflingAndTimeStampPacketsEna
|
||||
|
||||
using EnqueueHandlerTimestampDisabledTest = EnqueueHandlerTimestampTest<false>;
|
||||
|
||||
HWTEST_F(EnqueueHandlerTimestampDisabledTest, givenProflingEnabledTimeStampPacketsDisabledWhenEnqueueCommandWithoutKernelThenSubmitTimeStampIsNotSet) {
|
||||
HWTEST_F(EnqueueHandlerTimestampDisabledTest, givenProflingEnabledTimeStampPacketsDisabledWhenEnqueueCommandWithoutKernelThenSubmitTimeStampIsSet) {
|
||||
cl_queue_properties properties[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0};
|
||||
std::unique_ptr<MockCommandQueueHw<FamilyType>> mockCmdQ(new MockCommandQueueHw<FamilyType>(context, pClDevice, properties));
|
||||
|
||||
@@ -122,8 +122,8 @@ HWTEST_F(EnqueueHandlerTimestampDisabledTest, givenProflingEnabledTimeStampPacke
|
||||
mockCmdQ->enqueueCommandWithoutKernel(surfaces, 1, mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies,
|
||||
eventsRequest, eventBuilder, 0);
|
||||
|
||||
EXPECT_EQ(ev->submitTimeStamp.CPUTimeinNS, 0u);
|
||||
EXPECT_EQ(ev->submitTimeStamp.GPUTimeStamp, 0u);
|
||||
EXPECT_NE(ev->submitTimeStamp.CPUTimeinNS, 0u);
|
||||
EXPECT_NE(ev->submitTimeStamp.GPUTimeStamp, 0u);
|
||||
|
||||
delete ev;
|
||||
}
|
||||
|
||||
@@ -209,6 +209,10 @@ class MockCommandQueueHw : public CommandQueueHw<GfxFamily> {
|
||||
commandQueueProperties |= CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE;
|
||||
}
|
||||
|
||||
void setProfilingEnabled() {
|
||||
commandQueueProperties |= CL_QUEUE_PROFILING_ENABLE;
|
||||
}
|
||||
|
||||
LinearStream &getCS(size_t minRequiredSize) override {
|
||||
requestedCmdStreamSize = minRequiredSize;
|
||||
return CommandQueue::getCS(minRequiredSize);
|
||||
|
||||
Reference in New Issue
Block a user