【问题标题】:cuda: write to same global memory location by several threadscuda:由多个线程写入相同的全局内存位置
【发布时间】:2012-08-02 13:19:12
【问题描述】:

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

【问题讨论】:

    标签: cuda


    【解决方案1】:

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多