请注意,此共享内存数组永远不会写入,只能从。
中读取正如我所知,我的共享内存被初始化为:
__shared__ float TMshared[2592];
for (int i = 0; i< 2592; i++)
{
TMshared[i] = TM[i];
}
__syncthreads();
(TM从内核启动传递到所有线程)
你可能已经注意到这是非常低效的,因为没有并行进行并且同一块内的线程正在写入相同的位置。
如果这个问题确实需要优化,有人可以推荐一个更有效的方法/评论,因为相关的共享数组相对较小吗?
谢谢!
答案 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();