我应该使用什么而不是cl :: KernelFunctor?

The*_*kis 10 c++ opencl

我正在关注OpenCL的一些教程,他们提到了一个名为的类型cl::KernelFunctor.但是,找不到那种类型,当我查看AMD APP SDK的标题时,我看到cl::KernelFunctor该类的声明被注释掉了.

我应该使用什么代替这段代码来运行内核?

//run the kernel
cl::KernelFunctor simple_add(cl::Kernel(program, "simple_add"), queue, cl::NullRange, cl::NDRange(10), cl::NullRange);
simple_add(buffer_A, buffer_B, buffer_C);
Run Code Online (Sandbox Code Playgroud)

Mic*_*ner 14

cl::Kernel simple_add(program, "simple_add");
simple_add.setArg(0, buffer_A);
simple_add.setArg(1, buffer_B);
simple_add.setArg(2, buffer_C);
queue.enqueueNDRangeKernel(simple_add,cl::NullRange,cl::NDRange(10),cl::NullRange);
Run Code Online (Sandbox Code Playgroud)


Voj*_*taK 5

您可能和我一样正在学习本教程。基于此,我发现OpenCL 1.1 的文件 CL/cl.hpp 和 OpenCL 1.2 的 CL/cl.hpp 的不同之处在于 cl::KernelFunctor 在后面被删除。

The solution is to use the function cl::make_kernel that takes as template arguments types of your functor. In that particular case the template parameter is thus cl::Buffer. The code that compiles for me using OpenCL 1.2 header is:

cl::make_kernel<cl::Buffer, cl::Buffer, cl::Buffer> simple_add(cl::Kernel(program, "simple_add"));
cl::EnqueueArgs eargs(queue, cl::NullRange, cl::NDRange(10), cl::NullRange);
simple_add(eargs, buffer_A, buffer_B, buffer_C).wait();
Run Code Online (Sandbox Code Playgroud)