如何在共享内存上进行原子操作? 我有类似的东西:
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
因此,5个线程正在递增a。我怎么能这样做?
我知道,通过这种方式,我正在序列化5个线程的执行,但这是如何影响warp的呢?将warp中的所有线程序列化还是只是前5个?
答案 0 :(得分:4)
用
替换[2] ++atomicAdd( a + 2, 1 );
如果你可以使用unsigned,你可能更喜欢使用atomicInc(),但任何一个都会破坏性能。