【发布时间】:2018-05-23 00:09:39
【问题描述】:
我的 CUDA 代码中有一个内核,我希望一堆线程在某个共享内存上进行一堆计算(因为它比在全局内存上这样做要快得多),然后将结果写入全局内存(所以我可以在以后的内核中使用它)。内核看起来像这样:
__global__ void calc(float * globalmem)
{
__shared__ float sharemem; //initialize shared memory
sharemem = 0; //set it to initial value
__syncthreads();
//do various calculations on the shared memory
//for example I use atomicAdd() to add each thread's
//result to sharedmem...
__syncthreads();
*globalmem = sharedmem;//write shared memory to global memory
}
事实上,每个线程都将数据从共享内存写入全局内存,而我真的只需要写一次,这让我觉得很可疑。我也从每个线程在代码开始时将共享内存初始化为零这一事实中获得相同的感觉。有没有比我目前的实现更快的方法?
【问题讨论】:
标签: cuda gpu shared-memory gpgpu