工作组之间的OpenCL同步

时间:2011-05-05 08:52:18

标签: synchronization opencl

是否可以同步OpenCL工作组?

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

2 个答案:

答案 0 :(得分:8)

不,你不能。您可以同步组内的线程,并且可以在命令队列中同步内核执行。

只要使用原子访问同时执行所有组,您就可以同步少量组。但如果稍后安排某些小组,它将会冻结,你无法控制它。

答案 1 :(得分:4)

总之,不,你不能。 OpenCL范例是一个数据并行的范例,其中工作组是独立的。唯一的工作组范围同步机制是在命令队列级别,即。单独的内核启动。如果算法无法满足要求,则需要新算法或使用其他编程模型。

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