如果只有一个工作项读写内存,是否需要全局内存屏障

Are global memory barriers required if only one work item reads and writes to memory

在我的内核中,每个工作项在缓冲区中都有一个保留内存区域 只有它写入和读取。

这种情况下有必要使用内存屏障吗?

编辑:

我在每次写入之前和每次读取之前调用 mem_fence(CLK_GLOBAL_MEM_FENCE)。这足以保证 load/store 一致性吗?

此外,如果只有一个工作项正在加载存储到该内存区域,这是否有必要?

查看另一个堆栈溢出问题:

In OpenCL, what does mem_fence() do, as opposed to barrier()?

内存屏障在工作组级别工作,即停止属于同一线程块的线程,直到所有线程都到达屏障。如果不同工作项的内存空间没有交集,则不需要额外的同步点。

Also, is this even necessary if only one work item is loading storing to this memory region ?

理论上,mem_fence只能保证在后面的内存访问之前提交前面的内存访问。就我而言,我从未发现使用或不使用此 mem_fence 调用的应用程序的结果存在差异。

此致