在我的内核中,每个工作项在缓冲区中都有一个保留的内存区域 只有它写入和读取。
在这种情况下是否有必要使用内存屏障?
编辑:
我在每次写入之前和每次读取之前调用mem_fence(CLK_GLOBAL_MEM_FENCE)
。这足以保证加载/存储的一致性吗?
此外,如果只有一个工作项正在加载存储到该存储区域,这是否还需要?
请参阅此其他堆栈溢出问题:
In OpenCL, what does mem_fence() do, as opposed to barrier()?
答案 0 :(得分:0)
内存屏障在工作组级别工作,即停止属于同一个线程块的线程,直到所有线程都到达屏障。如果不同工作项的存储空间之间没有交集,则不需要任何额外的同步点。
此外,如果只有一个工作项正在加载存储到该存储区域,这是否还需要?
理论上,mem_fence只保证在之后的内存访问之前提交先前的内存访问。就我而言,我从来没有看到使用或不使用此mem_fence调用的应用程序结果的差异。
祝你好运