共享内存上的原子操作
如何在共享内存上执行原子操作?
我有类似的东西:
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
因此 5 个线程正在递增 a
。我该怎么做?
我知道通过这种方式我可以序列化 5 个线程的执行,但这对扭曲有何影响? warp 中的所有线程都会被序列化还是仅前 5 个线程被序列化?
How can I do an atomic operation on a shared memory?
I have something similar to this:
__shared__ int a[10];
//set a
if(tid<5)
a[2]++;
Therefore 5 threads are incrementing a
. How can I do this?
I know that in this way I am serializing the execution of 5 threads, but how does this effect the warp? would all the threads in the warp be serialized or just the first 5?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将
a[2]++
替换为,如果您可以生成无符号,您可能更喜欢使用
atomicInc()
代替,但任何一个都会降低性能。Replace
a[2]++
withif you can make a unsigned, you might prefer to use
atomicInc()
instead, but either one is going to kill performance.