如果只有一个工作项读写内存,是否需要全局内存屏障
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 调用的应用程序的结果存在差异。
此致
在我的内核中,每个工作项在缓冲区中都有一个保留内存区域 只有它写入和读取。
这种情况下有必要使用内存屏障吗?
编辑:
我在每次写入之前和每次读取之前调用 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 调用的应用程序的结果存在差异。
此致