cuda:通过多个线程写入相同的全局内存位置

时间:2012-08-01 22:39:06

标签: cuda

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

1 个答案:

答案 0 :(得分: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.