OpenCL:仅运行基于CPU的内核的单个实例

Ins*_*ges 2 opencl

我有两个OpenCL内核:第一个是并行任务,第二个是线性(LZW).第一个是并行的,在GPU上运行,第二个是线性的,在CPU上运行.我有一个多核CPU,我真的只想在单核上运行一个内核实例,而不是在2+核上运行2+实例.这不是生产所必需的,而是我关于各种类型任务执行的学术研究.

我现在使用的相当愚蠢的方法是:

if (global_id == 0) then execute(); 
else do_nothing();
Run Code Online (Sandbox Code Playgroud)

有比这更好的方法吗?

谢谢.

Ric*_*wig 6

您可以使用clEnqueueTask运行内核.这应该启动一个工作项.你可以用它来运行单线程的内核.

另一种情况:OpenCL是为并行计算开发的,如果使用clEnqueueNDRangeKernel运行内核,则将工作组大小设置为1是实现所需效果的唯一可能方法.另一方面,编译器可能希望优化某些东西并并行运行.只要OpenCL编译器支持此选项,就可以禁用clBuildProgram选项的"-cl-opt-disable"选项.如果需要运行clEnqueueNDRangeKernel,可以执行此操作.但我认为没有必要.