我刚开始学习CUDA,我对如何使用GPU内存真的很困惑,问题是 我需要使每个块(同一块中的线程组)返回自己的结果并将其复制到CPU内存中。
我的问题是: 我可以将每个块的结果存储在共享内存中,然后将其复制到全局内存中吗? 如何收集每个结果?
如果有人可以帮助我,我将不胜感激!
答案 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];
}