2
如何在共享内存上执行原子操作?
我有一些与此类似:共享内存上的原子操作
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
因此5线程递增。我怎样才能做到这一点?
我知道以这种方式我序列化了5个线程的执行,但是这是如何影响扭曲的?经线中的所有线程是否会被序列化或者只是第一个5?
如何在共享内存上执行原子操作?
我有一些与此类似:共享内存上的原子操作
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
因此5线程递增。我怎样才能做到这一点?
我知道以这种方式我序列化了5个线程的执行,但是这是如何影响扭曲的?经线中的所有线程是否会被序列化或者只是第一个5?
替换[2] ++与
atomicAdd(a + 2, 1);
,如果你可以做一个无符号,你可能更愿意使用atomicInc()来代替,但任何一个要杀的性能。
@Paul lina的问很少问题,至少有一个人没有给出合理的答案。 67%并不是那么糟糕。 – 2011-04-22 13:59:33
我同意 - 67%并不差。我发表评论时是0%。 – 2011-04-22 15:32:16