Commit 8d91ddb7 authored by Joseph Noir's avatar Joseph Noir

shortened signature of add_arguments_...

arguments are part of the class anyway, no need to pass them around
parent 813ef663
...@@ -157,8 +157,6 @@ class actor_facade<Ret(Args...)> : public actor { ...@@ -157,8 +157,6 @@ class actor_facade<Ret(Args...)> : public actor {
1, std::multiplies<size_t>{}); 1, std::multiplies<size_t>{});
std::vector<mem_ptr> arguments; std::vector<mem_ptr> arguments;
add_arguments_to_kernel<Ret>(arguments, add_arguments_to_kernel<Ret>(arguments,
m_context.get(),
m_kernel.get(),
ret_size, ret_size,
get_ref<Is>(*opt)...); get_ref<Is>(*opt)...);
auto cmd = make_counted<command_impl<actor_facade, Ret>>(handle, auto cmd = make_counted<command_impl<actor_facade, Ret>>(handle,
...@@ -182,19 +180,17 @@ class actor_facade<Ret(Args...)> : public actor { ...@@ -182,19 +180,17 @@ class actor_facade<Ret(Args...)> : public actor {
arg_mapping m_map_args; arg_mapping m_map_args;
result_mapping m_map_result; result_mapping m_map_result;
void add_arguments_to_kernel_rec(args_vec& arguments, void add_arguments_to_kernel_rec(args_vec& arguments) {
cl_context,
cl_kernel kernel) {
cl_int err{0}; cl_int err{0};
for(size_t i = 1; i < arguments.size(); ++i) { for(size_t i = 1; i < arguments.size(); ++i) {
err = clSetKernelArg(kernel, err = clSetKernelArg(m_kernel.get(),
(i-1), (i-1),
sizeof(cl_mem), sizeof(cl_mem),
static_cast<void*>(&arguments[i])); static_cast<void*>(&arguments[i]));
CPPA_LOG_ERROR_IF(err != CL_SUCCESS, CPPA_LOG_ERROR_IF(err != CL_SUCCESS,
"clSetKernelArg: " << get_opencl_error(err)); "clSetKernelArg: " << get_opencl_error(err));
} }
err = clSetKernelArg(kernel, err = clSetKernelArg(m_kernel.get(),
arguments.size()-1, arguments.size()-1,
sizeof(cl_mem), sizeof(cl_mem),
static_cast<void*>(&arguments[0])); static_cast<void*>(&arguments[0]));
...@@ -203,13 +199,10 @@ class actor_facade<Ret(Args...)> : public actor { ...@@ -203,13 +199,10 @@ class actor_facade<Ret(Args...)> : public actor {
} }
template<typename T0, typename... Ts> template<typename T0, typename... Ts>
void add_arguments_to_kernel_rec(args_vec& arguments, void add_arguments_to_kernel_rec(args_vec& arguments,
cl_context context, T0& arg0, Ts&... args) {
cl_kernel kernel,
T0& arg0,
Ts&... args) {
cl_int err{0}; cl_int err{0};
auto buf = clCreateBuffer(context, auto buf = clCreateBuffer(m_context.get(),
CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(typename T0::value_type) * arg0.size(), sizeof(typename T0::value_type) * arg0.size(),
arg0.data(), arg0.data(),
...@@ -221,19 +214,17 @@ class actor_facade<Ret(Args...)> : public actor { ...@@ -221,19 +214,17 @@ class actor_facade<Ret(Args...)> : public actor {
mem_ptr tmp; mem_ptr tmp;
tmp.adopt(std::move(buf)); tmp.adopt(std::move(buf));
arguments.push_back(tmp); arguments.push_back(tmp);
add_arguments_to_kernel_rec(arguments, context, kernel, args...); add_arguments_to_kernel_rec(arguments, args...);
} }
} }
template<typename R, typename... Ts> template<typename R, typename... Ts>
void add_arguments_to_kernel(args_vec& arguments, void add_arguments_to_kernel(args_vec& arguments,
cl_context context,
cl_kernel kernel,
size_t ret_size, size_t ret_size,
Ts&&... args) { Ts&&... args) {
arguments.clear(); arguments.clear();
cl_int err{0}; cl_int err{0};
auto buf = clCreateBuffer(context, auto buf = clCreateBuffer(m_context.get(),
CL_MEM_WRITE_ONLY, CL_MEM_WRITE_ONLY,
sizeof(typename R::value_type) * ret_size, sizeof(typename R::value_type) * ret_size,
nullptr, nullptr,
...@@ -245,10 +236,7 @@ class actor_facade<Ret(Args...)> : public actor { ...@@ -245,10 +236,7 @@ class actor_facade<Ret(Args...)> : public actor {
mem_ptr tmp; mem_ptr tmp;
tmp.adopt(std::move(buf)); tmp.adopt(std::move(buf));
arguments.push_back(tmp); arguments.push_back(tmp);
add_arguments_to_kernel_rec(arguments, add_arguments_to_kernel_rec(arguments, std::forward<Ts>(args)...);
context,
kernel,
std::forward<Ts>(args)...);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment