假设我们有许多线程将顺序访问全局内存,那么哪个选项在整体上执行得更快?我对此感到怀疑,因为__threadfence()考虑了所有共享和全局内存写入,但这些写入已合并。另一方面,atomicExch()仅考虑重要的内存地址,但我不知道写入是否合并。

在代码中:

array[threadIdx.x] = value;

要么
atomicExch(&array[threadIdx.x] , value);

谢谢。

最佳答案

在开普勒GPU上,我敢打赌atomicExch,因为开普勒上的原子非常快。在Fermi上,这可能是一个洗礼,但是鉴于您没有冲突,atomicExch仍然可以很好地执行。

请进行实验并报告结果。

09-12 10:05
查看更多