2011-04-22 110 views
2

如何在共享内存上执行原子操作?
我有一些与此类似:共享内存上的原子操作

__shared__ int a[10]; 
//set a 
if(tid<5) 
    a[2]++; 

因此5线程递增。我怎样才能做到这一点?
我知道以这种方式我序列化了5个线程的执行,但是这是如何影响扭曲的?经线中的所有线程是否会被序列化或者只是第一个5?

+3

@Paul lina的问很少问题,至少有一个人没有给出合理的答案。 67%并不是那么糟糕。 – 2011-04-22 13:59:33

+1

我同意 - 67%并不差。我发表评论时是0%。 – 2011-04-22 15:32:16

回答

4

替换[2] ++与

 
atomicAdd(a + 2, 1); 

,如果你可以做一个无符号,你可能更愿意使用atomicInc()来代替,但任何一个要杀的性能。