【发布时间】:2012-08-02 13:19:12
【问题描述】:
我有一个内核,其中多个线程将写入相同的数组位置,比如说数组[i],位于全局内存中。 SO中的其他相关问题给出了使用原子和其他事物的答案。但没有答案显示实际的 cuda 代码。任何人都可以显示一个 cuda 代码数组 [i],即数组在索引 i 处的位置,将如何由多个线程原子地写入。谢谢!
【问题讨论】:
标签: cuda
我有一个内核,其中多个线程将写入相同的数组位置,比如说数组[i],位于全局内存中。 SO中的其他相关问题给出了使用原子和其他事物的答案。但没有答案显示实际的 cuda 代码。任何人都可以显示一个 cuda 代码数组 [i],即数组在索引 i 处的位置,将如何由多个线程原子地写入。谢谢!
【问题讨论】:
标签: cuda
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.
【讨论】: