1

我有一个内核,其中多个线程将写入位于全局内存中的同一个数组位置,比如说数组 [i]。SO中的其他相关问题给出了使用原子和其他事物的答案。但没有答案显示实际的 cuda 代码。任何人都可以显示一个cuda代码数组[i],即数组在索引i处的位置,将如何由多个线程原子地写入。谢谢!

4

1 回答 1

2

CUDA 为原子操作提供编译器内在函数。有关每种计算能力可用的原子操作的更多详细信息,请参阅 CUDA C 编程指南。counters 是一个指向大小为 gridDim.x 的整数数组的指针。每个线程都会增加由它的 blockIdx.x 索引的数组值。

__global__ void CountThreadsInBlock(int* counters)
{
    int i = blockIdx.x;
    atomicAdd(&counters[i], 1);
}

// NOTE: Assume 1D launch.
于 2012-08-02T02:19:04.697 回答