Synchronization 工作组之间的OpenCL同步

Synchronization 工作组之间的OpenCL同步,synchronization,opencl,Synchronization,Opencl,是否可以同步OpenCL工作组 例如,我有100个工作组,每个工作组只有一个项目(不要问我为什么,这是一个例子),我需要为每个工作项目设置障碍,以确保在这100个工作组中的每个工作项目达到该障碍点后,所有工作组都将继续。不,您不能。您可以同步组内的线程,也可以同步命令队列内的内核执行 您可以使用原子访问同步少量组,只要它们都同时执行。但是,如果某些组被安排在以后,而您对此没有控制权,它将冻结。总之,不,您不能。OpenCL范式是一种数据并行范式,其中工作组是独立的。唯一的工作组作用域同步机制是在

是否可以同步OpenCL工作组


例如,我有100个工作组,每个工作组只有一个项目(不要问我为什么,这是一个例子),我需要为每个工作项目设置障碍,以确保在这100个工作组中的每个工作项目达到该障碍点后,所有工作组都将继续。

不,您不能。您可以同步组内的线程,也可以同步命令队列内的内核执行


您可以使用原子访问同步少量组,只要它们都同时执行。但是,如果某些组被安排在以后,而您对此没有控制权,它将冻结。

总之,不,您不能。OpenCL范式是一种数据并行范式,其中工作组是独立的。唯一的工作组作用域同步机制是在命令队列级别,即单独启动内核。如果您的算法不能适应这种情况,您要么需要一个新的算法,要么使用不同的编程模型


您需要记住,同时执行它们的工作组往往比硬件多得多。在这种情况下,同步是不可能的。有多种方法可以使用原子内存访问原语跨硬件相关数量的工作组实现自旋锁或关键部分,然而,它们实际上是对编程模型的滥用,并且往往只在工作组之间的交互相对较少的情况下才有用。

您能给我举一个原子访问的例子吗?谢谢您的提问!