【发布时间】:2011-12-02 04:55:57
【问题描述】:
与barrier()(我想我理解)不同,mem_fence() 不会影响工作组中的所有项目。 OpenCL 规范说(第 6.11.10 节),对于mem_fence():
命令加载和存储执行内核的工作项。
(因此它适用于单个工作项)。
但是,与此同时,在第 3.3.1 节中,它说:
在工作项内存中具有加载/存储一致性。
所以在一个工作项内存是一致的。
那么mem_fence() 有什么用呢?它不适用于项目,但在项目中不需要...
请注意,我没有使用原子操作(第 9.5 节等)。 mem_fence() 是与这些结合使用的想法吗?如果是这样,我很乐意看到一个例子。
谢谢。
更新:我可以看到它在使用 barrier() 时有多么有用(隐含,因为屏障调用 mem_fence()) - 但肯定还有更多, 因为它是单独存在的?
【问题讨论】:
-
本演示文稿提供了一个内存栅栏的示例:它可以防止 e. G。
shared_var=value; lock = false;(people.maths.ox.ac.uk/gilesm/cuda/new_lectures/lec3.pdf) 的重新排序对于单个隔离的工作项,这种重新排序无关紧要,因为对于单个工作项,这些变量之间似乎没有依赖关系 => 在工作项内部给出了所需的一致性。此外,这篇文章被证明是有帮助的:en.wikipedia.org/wiki/Memory_barrier.
标签: opencl gpgpu memory-barriers barrier memory-fences