我正在关注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)
您可能和我一样正在学习本教程。基于此,我发现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)
| 归档时间: |
|
| 查看次数: |
4742 次 |
| 最近记录: |