如果只有一个工作项读写内存,则需要全局内存障碍

时间:2015-12-29 01:02:36

标签: opencl

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

在这种情况下是否有必要使用内存屏障?

编辑:

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

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

请参阅此其他堆栈溢出问题:

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

1 个答案:

答案 0 :(得分:0)

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

  

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

理论上,mem_fence只保证在之后的内存访问之前提交先前的内存访问。就我而言,我从来没有看到使用或不使用此mem_fence调用的应用程序结果的差异。

祝你好运