From 232fd2befad15c013d8fe2916c7e4b823d187c53 Mon Sep 17 00:00:00 2001 From: Filip Hazubski Date: Thu, 9 Apr 2020 17:33:07 +0200 Subject: [PATCH] Update SyncBufferHandler Resolves: NEO-4543 Change-Id: Ieb9a76c0061d429739941f1d99ef52a95506fa07 Signed-off-by: Filip Hazubski --- opencl/source/command_queue/enqueue_common.h | 14 +++++++++----- shared/source/program/sync_buffer_handler.cpp | 7 +++++-- shared/source/program/sync_buffer_handler.h | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/opencl/source/command_queue/enqueue_common.h b/opencl/source/command_queue/enqueue_common.h index 8e715908a5..59e14ddea5 100644 --- a/opencl/source/command_queue/enqueue_common.h +++ b/opencl/source/command_queue/enqueue_common.h @@ -404,6 +404,14 @@ void CommandQueueHw::processDispatchForKernels(const MultiDispatchInf printfHandler->prepareDispatch(multiDispatchInfo); } + if (multiDispatchInfo.peekMainKernel()->usesSyncBuffer()) { + auto &gws = multiDispatchInfo.begin()->getGWS(); + auto &lws = multiDispatchInfo.begin()->getLocalWorkgroupSize(); + size_t workGroupsCount = (gws.x * gws.y * gws.z) / + (lws.x * lws.y * lws.z); + device->syncBufferHandler->prepareForEnqueue(workGroupsCount, *multiDispatchInfo.peekMainKernel()); + } + if (commandType == CL_COMMAND_NDRANGE_KERNEL) { if (multiDispatchInfo.peekMainKernel()->getProgram()->isKernelDebugEnabled()) { setupDebugSurface(multiDispatchInfo.peekMainKernel()); @@ -663,11 +671,7 @@ CompletionStamp CommandQueueHw::enqueueNonBlocked( } if (multiDispatchInfo.peekMainKernel()->usesSyncBuffer()) { - auto &gws = multiDispatchInfo.begin()->getGWS(); - auto &lws = multiDispatchInfo.begin()->getLocalWorkgroupSize(); - size_t workGroupsCount = (gws.x * gws.y * gws.z) / - (lws.x * lws.y * lws.z); - device->syncBufferHandler->prepareForEnqueue(workGroupsCount, *multiDispatchInfo.peekMainKernel(), getGpgpuCommandStreamReceiver()); + device->syncBufferHandler->makeResident(getGpgpuCommandStreamReceiver()); } if (timestampPacketContainer) { diff --git a/shared/source/program/sync_buffer_handler.cpp b/shared/source/program/sync_buffer_handler.cpp index 1b9830440d..bd46449c8d 100644 --- a/shared/source/program/sync_buffer_handler.cpp +++ b/shared/source/program/sync_buffer_handler.cpp @@ -24,7 +24,7 @@ SyncBufferHandler::SyncBufferHandler(Device &device) allocateNewBuffer(); } -void SyncBufferHandler::prepareForEnqueue(size_t workGroupsCount, Kernel &kernel, CommandStreamReceiver &csr) { +void SyncBufferHandler::prepareForEnqueue(size_t workGroupsCount, Kernel &kernel) { auto requiredSize = workGroupsCount; std::lock_guard guard(this->mutex); @@ -36,11 +36,14 @@ void SyncBufferHandler::prepareForEnqueue(size_t workGroupsCount, Kernel &kernel } kernel.patchSyncBuffer(device, graphicsAllocation, usedBufferSize); - csr.makeResident(*graphicsAllocation); usedBufferSize += requiredSize; } +void SyncBufferHandler::makeResident(CommandStreamReceiver &csr) { + csr.makeResident(*graphicsAllocation); +} + void SyncBufferHandler::allocateNewBuffer() { AllocationProperties allocationProperties{device.getRootDeviceIndex(), true, bufferSize, GraphicsAllocation::AllocationType::LINEAR_STREAM, diff --git a/shared/source/program/sync_buffer_handler.h b/shared/source/program/sync_buffer_handler.h index 33cc20abd7..921312b216 100644 --- a/shared/source/program/sync_buffer_handler.h +++ b/shared/source/program/sync_buffer_handler.h @@ -26,7 +26,8 @@ class SyncBufferHandler { SyncBufferHandler(Device &device); - void prepareForEnqueue(size_t workGroupsCount, Kernel &kernel, CommandStreamReceiver &csr); + void prepareForEnqueue(size_t workGroupsCount, Kernel &kernel); + void makeResident(CommandStreamReceiver &csr); protected: void allocateNewBuffer();