CUDA中的原子块

时间:2017-08-14 12:48:03

标签: cuda

我正在尝试进行原子读取并添加CUDA 8

__device__ int counter = 5;
__global__ void prime()
{
    int num = counter;
    atomicAdd(&counter, 1);
    //......<rest of the code>......
}

atomicAdd()负责添加操作。但我的所有线程在增量之前读取相同的值。 我想要一个线程来读取,然后增加另一个线程来做同样的事情。 可能吗?感谢

1 个答案:

答案 0 :(得分:0)

如您所见hereatomicAdd可以返回原子更新的变量的先前值。正如评论中指出的那样,你的内核可以重写为

__device__ int counter = 5;
__global__ void prime()
{
    int num = atomicAdd(&counter, 1);
    //......<rest of the code>......
}

表示在执行num操作之前,counter将被赋予atomicAdd的现有值。