OpenCL中是否可以进行全局同步?

ash*_*ash 3 synchronization global atomic opencl workgroup

众所周知,OpenCL barrier()函数仅适用于单个工作组,并且没有直接的可能性来同步工作组。如果可能的话,今天进行全局同步的最佳方法是什么?使用原子,OpenCL 2.0功能等?

Github链接,欢迎示例!

谢谢!

mfa*_*mfa 5

内核中无法进行全局同步。这是因为工作组不能保证同时运行。如果将内核分成多个部分,则可以在主机应用程序中实现某种全局同步。这不适用于许多内核,特别是如果您在内核执行任何实际工作之前使用了大量本地内存或有一些初始化代码。

将您的内核分为两个参数-例如kernelA和kernelB。全局同步只需要为kernelA运行NDRange,然后为kernelB运行finish()和NDRange。全局数据将在两次调用之间保留在内存中。

再说一次,虽然不是很漂亮,也不一定是高性能,但是如果您确实必须具有全局同步,则这是获得同步的唯一方法。