void add_arguments_to_kernel_rec(evnt_vec& events, args_vec& arguments, T0& arg0, Ts&... args) { cl_int err{0}; size_t buffer_size = sizeof(typename T0::value_type) * arg0.size(); auto buffer = clCreateBuffer(m_context.get(), CL_MEM_READ_ONLY, buffer_size, nullptr, &err); if (err != CL_SUCCESS) { CPPA_LOGMF(CPPA_ERROR, "clCreateBuffer: " << get_opencl_error(err)); return; } cl_event event; err = clEnqueueWriteBuffer(m_queue.get(), buffer, CL_FALSE, 0, buffer_size, arg0.data(), 0, nullptr, &event); if (err != CL_SUCCESS) { CPPA_LOGMF(CPPA_ERROR, "clEnqueueWriteBuffer: " << get_opencl_error(err)); return; } events.push_back(std::move(event)); mem_ptr tmp; tmp.adopt(std::move(buffer)); arguments.push_back(tmp); add_arguments_to_kernel_rec(events, arguments, args...); }
void stdv_to_vectort(T0 &v1, igraph_vector_t &v2) { size_t n = v1.size(); igraph_vector_resize(&v2, n); for (size_t i = 0; i < n; i++) VECTOR(v2)[i] = v1[i]; }