mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Do not noop pipe controls if call is returning event on IOQ.
-For in order queue application can have fine grain granularity of completion -For out of order queue application wants to execute workloads concurrently -This change disables pipe control nooping for ioq calls when event returned. Change-Id: Iaeaf677f768f7434b2efa1842b50653ab80777ad
This commit is contained in:
@ -1443,6 +1443,56 @@ HWTEST_F(EnqueueKernelTest, givenInOrderCommandQueueWhenEnqueueKernelIsMadeThenP
|
||||
clReleaseCommandQueue(inOrderQueue);
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueKernelTest, givenInOrderCommandQueueWhenEnqueueKernelReturningEventIsMadeThenPipeControlPositionIsRecorded) {
|
||||
const cl_queue_properties props[] = {0};
|
||||
auto inOrderQueue = clCreateCommandQueueWithProperties(context, pDevice, props, nullptr);
|
||||
|
||||
auto mockCsr = new MockCsrHw2<FamilyType>(pDevice->getHardwareInfo());
|
||||
mockCsr->overrideDispatchPolicy(CommandStreamReceiver::DispatchMode::BatchedDispatch);
|
||||
pDevice->resetCommandStreamReceiver(mockCsr);
|
||||
|
||||
auto mockedSubmissionsAggregator = new mockSubmissionsAggregator();
|
||||
mockCsr->overrideSubmissionAggregator(mockedSubmissionsAggregator);
|
||||
|
||||
MockKernelWithInternals mockKernel(*pDevice);
|
||||
size_t gws[3] = {1, 0, 0};
|
||||
cl_event event;
|
||||
|
||||
clEnqueueNDRangeKernel(inOrderQueue, mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, &event);
|
||||
|
||||
EXPECT_FALSE(mockedSubmissionsAggregator->peekCmdBufferList().peekIsEmpty());
|
||||
auto cmdBuffer = mockedSubmissionsAggregator->peekCmdBufferList().peekHead();
|
||||
EXPECT_EQ(nullptr, cmdBuffer->pipeControlLocation);
|
||||
|
||||
clReleaseCommandQueue(inOrderQueue);
|
||||
clReleaseEvent(event);
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueKernelTest, givenOutOfOrderCommandQueueWhenEnqueueKernelReturningEventIsMadeThenPipeControlPositionIsRecorded) {
|
||||
const cl_queue_properties props[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0};
|
||||
auto inOrderQueue = clCreateCommandQueueWithProperties(context, pDevice, props, nullptr);
|
||||
|
||||
auto mockCsr = new MockCsrHw2<FamilyType>(pDevice->getHardwareInfo());
|
||||
mockCsr->overrideDispatchPolicy(CommandStreamReceiver::DispatchMode::BatchedDispatch);
|
||||
pDevice->resetCommandStreamReceiver(mockCsr);
|
||||
|
||||
auto mockedSubmissionsAggregator = new mockSubmissionsAggregator();
|
||||
mockCsr->overrideSubmissionAggregator(mockedSubmissionsAggregator);
|
||||
|
||||
MockKernelWithInternals mockKernel(*pDevice);
|
||||
size_t gws[3] = {1, 0, 0};
|
||||
cl_event event;
|
||||
|
||||
clEnqueueNDRangeKernel(inOrderQueue, mockKernel.mockKernel, 1, nullptr, gws, nullptr, 0, nullptr, &event);
|
||||
|
||||
EXPECT_FALSE(mockedSubmissionsAggregator->peekCmdBufferList().peekIsEmpty());
|
||||
auto cmdBuffer = mockedSubmissionsAggregator->peekCmdBufferList().peekHead();
|
||||
EXPECT_NE(nullptr, cmdBuffer->pipeControlLocation);
|
||||
|
||||
clReleaseCommandQueue(inOrderQueue);
|
||||
clReleaseEvent(event);
|
||||
}
|
||||
|
||||
HWTEST_F(EnqueueKernelTest, givenCsrInBatchingModeWhenBlockingCallIsMadeThenEventAssociatedWithCommandHasProperFlushStamp) {
|
||||
DebugManagerStateRestore stateRestore;
|
||||
DebugManager.flags.MakeEachEnqueueBlocking.set(true);
|
||||
|
Reference in New Issue
Block a user