收集不同线程块的结果

时间:2019-05-26 15:15:28

标签: cuda

我刚开始学习CUDA,我对如何使用GPU内存真的很困惑,问题是 我需要使每个块(同一块中的线程组)返回自己的结果并将其复制到CPU内存中。

我的问题是: 我可以将每个块的结果存储在共享内存中,然后将其复制到全局内存中吗? 如何收集每个结果?

如果有人可以帮助我,我将不胜感激!

1 个答案:

答案 0 :(得分:1)

共享内存是每个块,每个块都有一个不同的共享缓冲区实例,只有该块中的线程可以访问它。

如果每个块有一个值需要复制到全局存储器,则该块中的一个线程必须将其复制到全局存储器。

例如:

__global__ void gather(int* output) {
    __shared__ int shared_buffer[128]; 
    .... // threads in block work in shared_buffer
         // store output value for block in shared_buffer[0]

    __syncthreads();
    if(threadIdx.x == 0) output[blockIdx.x] = shared_buffer[0];
}