在OpenCL中有没有像cuda中的原子操作那样的东西

时间:2016-08-28 21:19:24

标签: c++ opencl

当我编写CUDA代码时,我使用原子操作在最后一步强制进行全局同步。

然后我还要在OpenCL中实现相同的任务,我想在OpenCL中有类似的操作,比如CUDA中的原子操作我可以使用,我的设备是fpga板..

3 个答案:

答案 0 :(得分:3)

barrier()可能类似于您要查找的内容,但只能强制在同一工作组中的线程上“加入”。

看这篇文章。您可以使用CLK_GLOBAL_MEM_FENCE来获取您要查找的结果。

Stack overflow: Barriers in OpenCL

答案 1 :(得分:1)

没有内核级全局同步是OpenCL和CUDA,因为整个工作组可能在其他工作组启动之前完成。内核中只有工作组级同步可用。对于全局同步,您可以使用多个内核。

答案 2 :(得分:0)

根据你的评论,你似乎想要对浮点值进行原子操作。

请查看此链接:atomic operation and floats in opencl

这个想法是使用内置的atom_cmpxchg操作来尝试将浮点变量的旧值与一个新值交换,这可能是它与另一个值的相加,或乘法,除法,减法等等。

如果旧值实际上是旧值(即cmp发挥作用的地方),则交换仅成功。否则,它将在while循环中再次执行。

请注意,如果许多线程对单个值执行此操作,则此原子操作可能会非常慢。