【问题标题】:atomic operations on shared memory共享内存上的原子操作
【发布时间】:2011-08-10 23:44:10
【问题描述】:

如何对共享内存进行原子操作?
我有类似的东西:

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

因此 5 个线程正在递增 a。我该怎么做?
我知道以这种方式我正在序列化 5 个线程的执行,但这对扭曲有何影响? warp 中的所有线程会被序列化还是只序列化前 5 个?

【问题讨论】:

  • @Paul lina 提出的问题很少,而且至少有一个问题没有给出合理的答案。 67% 还不错。
  • 我同意 - 67% 一点也不差。我发表评论时为 0%。

标签: c cuda gpu-atomics


【解决方案1】:

将 a[2]++ 替换为

atomicAdd(a + 2, 1);

如果你可以做一个无符号的,你可能更喜欢使用 atomicInc() 代替,但任何一个都会影响性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2018-07-14
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2014-05-20
    相关资源
    最近更新 更多