From ae3299da302ba2c26f1e3490a1a7ee389d91feee Mon Sep 17 00:00:00 2001 From: Ivan Shapovalov Date: Mon, 11 Jul 2016 23:14:43 +0300 Subject: clblast::RunKernel, cl::Kernel: unify variants with/without waitForEvents, support empty LWS --- src/routines/common.cpp | 38 ++++++++++++++++---------------------- src/routines/common.hpp | 7 +------ 2 files changed, 17 insertions(+), 28 deletions(-) (limited to 'src/routines') diff --git a/src/routines/common.cpp b/src/routines/common.cpp index 21e16954..3969cf9f 100644 --- a/src/routines/common.cpp +++ b/src/routines/common.cpp @@ -24,21 +24,23 @@ StatusCode RunKernel(Kernel &kernel, Queue &queue, const Device &device, std::vector global, const std::vector &local, EventPointer event, const std::vector &waitForEvents) { - // Tests for validity of the local thread sizes - if (local.size() > device.MaxWorkItemDimensions()) { - return StatusCode::kInvalidLocalNumDimensions; - } - const auto max_work_item_sizes = device.MaxWorkItemSizes(); - for (auto i=size_t{0}; i max_work_item_sizes[i]) { return StatusCode::kInvalidLocalThreadsDim; } - } - auto local_size = size_t{1}; - for (auto &item: local) { local_size *= item; } - if (local_size > device.MaxWorkGroupSize()) { return StatusCode::kInvalidLocalThreadsTotal; } + if (!local.empty()) { + // Tests for validity of the local thread sizes + if (local.size() > device.MaxWorkItemDimensions()) { + return StatusCode::kInvalidLocalNumDimensions; + } + const auto max_work_item_sizes = device.MaxWorkItemSizes(); + for (auto i=size_t{0}; i max_work_item_sizes[i]) { return StatusCode::kInvalidLocalThreadsDim; } + } + auto local_size = size_t{1}; + for (auto &item: local) { local_size *= item; } + if (local_size > device.MaxWorkGroupSize()) { return StatusCode::kInvalidLocalThreadsTotal; } - // Make sure the global thread sizes are at least equal to the local sizes - for (auto i=size_t{0}; i global, const std::vector &local, - EventPointer event) { - auto emptyWaitingList = std::vector(); - return RunKernel(kernel, queue, device, global, local, event, emptyWaitingList); -} - // ================================================================================================= } // namespace clblast diff --git a/src/routines/common.hpp b/src/routines/common.hpp index d0bbc707..9d8849c3 100644 --- a/src/routines/common.hpp +++ b/src/routines/common.hpp @@ -29,12 +29,7 @@ namespace clblast { // Enqueues a kernel, waits for completion, and checks for errors StatusCode RunKernel(Kernel &kernel, Queue &queue, const Device &device, std::vector global, const std::vector &local, - EventPointer event, const std::vector &waitForEvents); - -// As above, but without an event waiting list -StatusCode RunKernel(Kernel &kernel, Queue &queue, const Device &device, - std::vector global, const std::vector &local, - EventPointer event); + EventPointer event, const std::vector &waitForEvents = {}); // ================================================================================================= -- cgit v1.2.3