OpenCL 1.1 规范说:
cl_int clEnqueueBarrier(cl_command_queue command_queue)
clEnqueueBarrier 是一个同步点,可确保 command_queue 中的所有排队命令都已完成执行,然后才能开始执行下一批命令。
cl_int clFinish(cl_command_queue command_queue)
阻塞,直到 command_queue 中所有先前排队的 OpenCL 命令都发送到相关设备并完成。clFinish 在 command_queue 中所有排队的命令都被处理和完成之前不会返回。clFinish 也是一个同步点。
应该必须对按顺序或无序执行做一些事情,但我看不出有什么区别。如果我有顺序执行,他们是否需要?目前我做类似的事情:
...
for(...){
clEnqueuNDRangeKernel(...);
clFlush(command_queue);
clFinish(command_queue);
}
...
在英伟达 GPU 上。任何相关评论表示赞赏。