From 48c19f1308ecdc7ea37a6bf5ce9459e0954e9007 Mon Sep 17 00:00:00 2001 From: Anthony Barbier Date: Fri, 20 Apr 2018 11:31:52 +0100 Subject: COMPMID-959 Refactor OpenCL interceptors to use lambda functions Change-Id: I29b73a311d7278255b77524f2a5eaaa4dccab711 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/128392 Reviewed-by: Georgios Pinitas Tested-by: Jenkins --- tests/framework/instruments/OpenCLTimer.cpp | 83 ++++++++++++----------------- 1 file changed, 35 insertions(+), 48 deletions(-) (limited to 'tests/framework/instruments/OpenCLTimer.cpp') diff --git a/tests/framework/instruments/OpenCLTimer.cpp b/tests/framework/instruments/OpenCLTimer.cpp index 9743015cec..d9d16bc829 100644 --- a/tests/framework/instruments/OpenCLTimer.cpp +++ b/tests/framework/instruments/OpenCLTimer.cpp @@ -43,53 +43,6 @@ std::string OpenCLTimer::id() const return "OpenCLTimer"; } -/* Function to be used to intercept kernel enqueues and store their OpenCL Event */ -class Interceptor -{ -public: - explicit Interceptor(OpenCLTimer &timer) - : _timer(timer) - { - } - - cl_int operator()( - cl_command_queue command_queue, - cl_kernel kernel, - cl_uint work_dim, - const size_t *gwo, - const size_t *gws, - const size_t *lws, - cl_uint num_events_in_wait_list, - const cl_event *event_wait_list, - cl_event *event) - { - ARM_COMPUTE_ERROR_ON_MSG(event != nullptr, "Not supported"); - ARM_COMPUTE_UNUSED(event); - - OpenCLTimer::kernel_info info; - cl::Kernel cpp_kernel(kernel, true); - std::stringstream ss; - ss << cpp_kernel.getInfo(); - if(gws != nullptr) - { - ss << " GWS[" << gws[0] << "," << gws[1] << "," << gws[2] << "]"; - } - if(lws != nullptr) - { - ss << " LWS[" << lws[0] << "," << lws[1] << "," << lws[2] << "]"; - } - info.name = ss.str(); - cl_event tmp; - cl_int retval = _timer.real_function(command_queue, kernel, work_dim, gwo, gws, lws, num_events_in_wait_list, event_wait_list, &tmp); - info.event = tmp; - _timer.kernels.push_back(std::move(info)); - return retval; - } - -private: - OpenCLTimer &_timer; -}; - OpenCLTimer::OpenCLTimer(ScaleFactor scale_factor) : real_function(CLSymbols::get().clEnqueueNDRangeKernel_ptr) { @@ -127,7 +80,41 @@ void OpenCLTimer::start() { kernels.clear(); // Start intercepting enqueues: - CLSymbols::get().clEnqueueNDRangeKernel_ptr = Interceptor(*this); + auto interceptor = [this]( + cl_command_queue command_queue, + cl_kernel kernel, + cl_uint work_dim, + const size_t *gwo, + const size_t *gws, + const size_t *lws, + cl_uint num_events_in_wait_list, + const cl_event * event_wait_list, + cl_event * event) + { + ARM_COMPUTE_ERROR_ON_MSG(event != nullptr, "Not supported"); + ARM_COMPUTE_UNUSED(event); + + OpenCLTimer::kernel_info info; + cl::Kernel cpp_kernel(kernel, true); + std::stringstream ss; + ss << cpp_kernel.getInfo(); + if(gws != nullptr) + { + ss << " GWS[" << gws[0] << "," << gws[1] << "," << gws[2] << "]"; + } + if(lws != nullptr) + { + ss << " LWS[" << lws[0] << "," << lws[1] << "," << lws[2] << "]"; + } + info.name = ss.str(); + cl_event tmp; + cl_int retval = this->real_function(command_queue, kernel, work_dim, gwo, gws, lws, num_events_in_wait_list, event_wait_list, &tmp); + info.event = tmp; + this->kernels.push_back(std::move(info)); + return retval; + }; + + CLSymbols::get().clEnqueueNDRangeKernel_ptr = interceptor; } void OpenCLTimer::stop() -- cgit v1.2.1