假设我们有许多线程将顺序访问全局内存,那么哪个选项在整体上执行得更快?我对此感到怀疑,因为__threadfence()考虑了所有共享和全局内存写入,但这些写入已合并。另一方面,atomicExch()仅考虑重要的内存地址,但我不知道写入是否合并。
在代码中:
array[threadIdx.x] = value;
要么
atomicExch(&array[threadIdx.x] , value);
谢谢。
最佳答案
在开普勒GPU上,我敢打赌atomicExch
,因为开普勒上的原子非常快。在Fermi上,这可能是一个洗礼,但是鉴于您没有冲突,atomicExch
仍然可以很好地执行。
请进行实验并报告结果。