与我理解的
barrier()
不同,mem_fence()
不会影响工作组中的所有项。OpenCL规范在第6.11.10节中表示,对于mem_fence()
:
指令执行内存读写。
(因此它适用于一个单独的工作项)。
但是,在3.3.1节中同时表示:
在工作项内存中具有加载/存储一致性。
因此,在工作项内存中是一致的。
那么mem_fence()
有什么用处呢?它不能跨项工作,但在项内部也不需要…
请注意,我没有使用原子操作(第9.5节等)。mem_fence()
的想法是与这些操作结合使用吗?如果是这样,我很想看到一个例子。
谢谢。
更新:我可以看出当与barrier()
一起使用时它是有用的(因为隐式地调用了mem_fence()
)- 但肯定还有更多用途,因为它存在独立使用的情况下?