From fcdfcb3fc4dbf728f4785a3b1e885a49a4a109f3 Mon Sep 17 00:00:00 2001 From: "Koska, Andrzej" Date: Fri, 8 Mar 2019 10:53:26 +0100 Subject: [PATCH] Pass enqueued values to enqueueHandler Change-Id: I991818657c7cafaf8911ce711a87a6c7b4531517 Signed-off-by: Koska, Andrzej --- runtime/command_queue/command_queue_hw.h | 1 + runtime/command_queue/enqueue_common.h | 5 +++-- runtime/command_queue/enqueue_kernel.h | 3 +++ unit_tests/command_queue/command_queue_hw_tests.cpp | 2 +- unit_tests/command_queue/enqueue_handler_tests.cpp | 10 +++++++++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/runtime/command_queue/command_queue_hw.h b/runtime/command_queue/command_queue_hw.h index 6a8c74f6f0..09194e8b8c 100644 --- a/runtime/command_queue/command_queue_hw.h +++ b/runtime/command_queue/command_queue_hw.h @@ -307,6 +307,7 @@ class CommandQueueHw : public CommandQueue { const size_t globalOffsets[3], const size_t workItems[3], const size_t *localWorkSizesIn, + const size_t *enqueuedWorkSizes, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event); diff --git a/runtime/command_queue/enqueue_common.h b/runtime/command_queue/enqueue_common.h index b8e5427e5e..185a82ba3c 100644 --- a/runtime/command_queue/enqueue_common.h +++ b/runtime/command_queue/enqueue_common.h @@ -48,6 +48,7 @@ void CommandQueueHw::enqueueHandler(Surface *(&surfaces)[surfaceCount const size_t globalOffsets[3], const size_t workItems[3], const size_t *localWorkSizesIn, + const size_t *enqueuedWorkSizes, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event) { @@ -69,12 +70,12 @@ void CommandQueueHw::enqueueHandler(Surface *(&surfaces)[surfaceCount if (kernel->getKernelInfo().builtinDispatchBuilder == nullptr) { DispatchInfoBuilder builder; - builder.setDispatchGeometry(workDim, workItems, localWorkSizesIn, globalOffsets); + builder.setDispatchGeometry(workDim, workItems, enqueuedWorkSizes, globalOffsets, Vec3{0, 0, 0}, localWorkSizesIn); builder.setKernel(kernel); builder.bake(multiDispatchInfo); } else { auto builder = kernel->getKernelInfo().builtinDispatchBuilder; - builder->buildDispatchInfos(multiDispatchInfo, kernel, workDim, workItems, localWorkSizesIn, globalOffsets); + builder->buildDispatchInfos(multiDispatchInfo, kernel, workDim, workItems, enqueuedWorkSizes, globalOffsets); if (multiDispatchInfo.size() == 0) { return; diff --git a/runtime/command_queue/enqueue_kernel.h b/runtime/command_queue/enqueue_kernel.h index c7845c8ade..70a3d1d372 100644 --- a/runtime/command_queue/enqueue_kernel.h +++ b/runtime/command_queue/enqueue_kernel.h @@ -35,6 +35,7 @@ cl_int CommandQueueHw::enqueueKernel( size_t region[3] = {1, 1, 1}; size_t globalWorkOffset[3] = {0, 0, 0}; size_t workGroupSize[3] = {1, 1, 1}; + size_t enqueuedLocalWorkSize[3] = {0, 0, 0}; auto &kernel = *castToObject(clKernel); const auto &kernelInfo = kernel.getKernelInfo(); @@ -81,6 +82,7 @@ cl_int CommandQueueHw::enqueueKernel( } else { workGroupSize[i] = localWorkSizeIn[i]; } + enqueuedLocalWorkSize[i] = localWorkSizeIn[i]; totalWorkItems *= localWorkSizeIn[i]; } @@ -134,6 +136,7 @@ cl_int CommandQueueHw::enqueueKernel( globalWorkOffset, region, localWkgSizeToPass, + enqueuedLocalWorkSize, numEventsInWaitList, eventWaitList, event); diff --git a/unit_tests/command_queue/command_queue_hw_tests.cpp b/unit_tests/command_queue/command_queue_hw_tests.cpp index 0900670fac..a3c0312812 100644 --- a/unit_tests/command_queue/command_queue_hw_tests.cpp +++ b/unit_tests/command_queue/command_queue_hw_tests.cpp @@ -766,7 +766,7 @@ HWTEST_F(CommandQueueHwTest, GivenBuiltinKernelWhenBuiltinDispatchInfoBuilderIsP EXPECT_FALSE(builder.wasBuildDispatchInfosWithBuiltinOpParamsCalled); EXPECT_FALSE(builder.wasBuildDispatchInfosWithKernelParamsCalled); - cmdQHw->template enqueueHandler(surfaces, false, mockKernelToSend.mockKernel, 1, off, gws, lws, 0, nullptr, nullptr); + cmdQHw->template enqueueHandler(surfaces, false, mockKernelToSend.mockKernel, 1, off, gws, lws, lws, 0, nullptr, nullptr); EXPECT_FALSE(builder.wasBuildDispatchInfosWithBuiltinOpParamsCalled); EXPECT_TRUE(builder.wasBuildDispatchInfosWithKernelParamsCalled); diff --git a/unit_tests/command_queue/enqueue_handler_tests.cpp b/unit_tests/command_queue/enqueue_handler_tests.cpp index ccd6ed2465..669228a5dd 100644 --- a/unit_tests/command_queue/enqueue_handler_tests.cpp +++ b/unit_tests/command_queue/enqueue_handler_tests.cpp @@ -40,8 +40,10 @@ class MyCommandQueueHw : public CommandQueueHw { public: MyCommandQueueHw(Context *context, Device *device, cl_queue_properties *properties) : BaseClass(context, device, properties){}; Vec3 lws = {1, 1, 1}; + Vec3 elws = {1, 1, 1}; void enqueueHandlerHook(const unsigned int commandType, const MultiDispatchInfo &multiDispatchInfo) override { - lws = multiDispatchInfo.begin()->getEnqueuedWorkgroupSize(); + elws = multiDispatchInfo.begin()->getEnqueuedWorkgroupSize(); + lws = multiDispatchInfo.begin()->getActualWorkgroupSize(); } }; @@ -57,17 +59,23 @@ HWTEST_F(EnqueueHandlerTest, givenLocalWorkgroupSizeGreaterThenGlobalWorkgroupSi size_t lws1d[] = {4, 1, 1}; size_t gws1d[] = {2, 1, 1}; myCmdQ.enqueueKernel(mockKernel.mockKernel, 1, nullptr, gws1d, lws1d, 0, nullptr, nullptr); + EXPECT_EQ(myCmdQ.elws.x, lws1d[0]); EXPECT_EQ(myCmdQ.lws.x, gws1d[0]); size_t lws2d[] = {3, 3, 1}; size_t gws2d[] = {2, 1, 1}; myCmdQ.enqueueKernel(mockKernel.mockKernel, 2, nullptr, gws2d, lws2d, 0, nullptr, nullptr); + EXPECT_EQ(myCmdQ.elws.x, lws2d[0]); + EXPECT_EQ(myCmdQ.elws.y, lws2d[1]); EXPECT_EQ(myCmdQ.lws.x, gws2d[0]); EXPECT_EQ(myCmdQ.lws.y, gws2d[1]); size_t lws3d[] = {5, 4, 3}; size_t gws3d[] = {2, 2, 2}; myCmdQ.enqueueKernel(mockKernel.mockKernel, 3, nullptr, gws3d, lws3d, 0, nullptr, nullptr); + EXPECT_EQ(myCmdQ.elws.x, lws3d[0]); + EXPECT_EQ(myCmdQ.elws.y, lws3d[1]); + EXPECT_EQ(myCmdQ.elws.z, lws3d[2]); EXPECT_EQ(myCmdQ.lws.x, gws3d[0]); EXPECT_EQ(myCmdQ.lws.y, gws3d[1]); EXPECT_EQ(myCmdQ.lws.z, gws3d[2]);