在CUDA中高效初始化共享内存阵列

时间:2014-06-25 22:45:51

标签: c++ memory cuda shared

请注意,此共享内存数组永远不会写入,只能从。

中读取

正如我所知,我的共享内存被初始化为:

__shared__ float TMshared[2592]; 
for (int i = 0; i< 2592; i++)
{
TMshared[i] = TM[i];

}
__syncthreads();

(TM从内核启动传递到所有线程)

你可能已经注意到这是非常低效的,因为没有并行进行并且同一块内的线程正在写入相同的位置。

如果这个问题确实需要优化,有人可以推荐一个更有效的方法/评论,因为相关的共享数组相对较小吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

使用所有线程来编写独立的位置,它可能会更快。

示例假设1D threadblock / grid:

#define SSIZE 2592

__shared__ float TMshared[SSIZE]; 

  int lidx = threadIdx.x;
  while (lidx < SSIZE){
    TMShared[lidx] = TM[lidx];
    lidx += blockDim.x;}

__syncthreads();