当我编写CUDA代码时,我使用原子操作在最后一步强制进行全局同步。
然后我还要在OpenCL中实现相同的任务,我想在OpenCL中有类似的操作,比如CUDA中的原子操作我可以使用,我的设备是fpga板..
答案 0 :(得分:3)
barrier()可能类似于您要查找的内容,但只能强制在同一工作组中的线程上“加入”。
看这篇文章。您可以使用CLK_GLOBAL_MEM_FENCE来获取您要查找的结果。
答案 1 :(得分:1)
没有内核级全局同步是OpenCL和CUDA,因为整个工作组可能在其他工作组启动之前完成。内核中只有工作组级同步可用。对于全局同步,您可以使用多个内核。
答案 2 :(得分:0)
根据你的评论,你似乎想要对浮点值进行原子操作。
请查看此链接:atomic operation and floats in opencl
这个想法是使用内置的atom_cmpxchg
操作来尝试将浮点变量的旧值与一个新值交换,这可能是它与另一个值的相加,或乘法,除法,减法等等。
如果旧值实际上是旧值(即cmp
发挥作用的地方),则交换仅成功。否则,它将在while循环中再次执行。
请注意,如果许多线程对单个值执行此操作,则此原子操作可能会非常慢。