我应该用什么来代替cl::KernelFunctor
What should I use instead of cl::KernelFunctor?
我正在跟随一些关于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);
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);
queue.finish();
正如@Michael Dorner所说,您可以用一步一步的方法替换代码。创建内核,设置参数,然后排队。
KernelFunctor用于将内核代码函数化,以便您可以将其作为函数调用。由于通常情况下并非如此,因此在实际应用程序中很少使用,但在某些情况下可能很有用。
你的意思是:
cl::KernelFunctor simple_add(cl::Kernel(program, "simple_add"), queue, cl::NullRange, cl::NDRange(10), cl::NullRange);
- 创建内核"simple_add"的函子。
- 在队列"queue"中启动
当调用函子时,传递剩下的东西,即实参:
simple_add(buffer_A, buffer_B, buffer_C);
的好处是,您可以稍后以一种简单的方式使用不同的参数启动它,只需:
simple_add(buffer_B, buffer_C, buffer_D);
您可能和我一样正在学习本教程。基于此,我发现OpenCL 1.1的文件CL/CL .hpp和OpenCL 1.2的文件CL/CL .hpp的不同之处在于CL::KernelFunctor在后面被删除。
解决方案是使用函数cl::make_kernel,它接受函数函数的模板参数类型。在这种特殊情况下,模板形参是cl::Buffer。使用OpenCL 1.2头为我编译的代码是:
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();
cl::KernelFunctor<cl::Buffer, cl::Buffer, cl::Buffer> simple_add(program, simple_add);
cl::EnqueueArgs eargs(queue, cl::NullRange, cl::NDRange(10), cl::NullRange);
// call func
simple_add(eargs, buffer_A, buffer_B, buffer_C);
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 使用 cl 构建代码并连接到 sqlite 库
- MSYS2 MinGW64 在 Windows 上构建 GMP/MPFR 作为静态库,并将它们链接到使用 CL 编译的
- NMAKE:致命错误 U1077:cl.exe 和 nmake.exe 返回代码'0x2'
- Clang-CL 警告 strnicmp 已弃用,请使用 ISO C 并C++符合标准的名称_strnicmp
- 在 OpenCL 库中找不到 cl::Error 类
- visual MSVC cl.exe尝试使用C++标头范例(定义与声明)
- cl::Event::waitForEvents returns -7 (CL_EXEC_STATUS_ERROR_ F
- gcc中cl/NODEFAULTLIB的替代方案是什么
- cl.exe在哪里?(MS 构建工具 '13)
- cmake 将 clang-cl 检测为 clang
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- Visual Studio not finding cl.exe
- Visual Studio 2017 无法找到 cl.exe
- CMake 和 Visual Studio 2015 - C 编译器 cl.exe 无法编译简单的测试程序
- 如何阻止 cmake 使用 cl 编译?
- clang-cl PCH 缺少标头包含错误
- 为什么Cmake找不到编译器CL
- 我应该用什么来代替cl::KernelFunctor