这个问题是一个常见的问题,但是自己之前重来没关注过。程序中要对一个二维 数组(MN)操作,以一维的形式读取.
每个bock内处理一行的数据。我现在把一行的数据读入到shared memory中。
int tid=threadIdx.x;
int bid=blockIdx.x;
shared int pre[M];
for(int i=tid;i<M;i+=blockDim.x)
{
int index=bidM+i;
pre=d_Pre[index];//d_Pre来自显存,是一个M*N的数组
。。。。。。
}
对于上述操作,profile给出的提示是:low global memory load efficieny。效率值好像9.8%左右吧,具体不记得了。
然后我处理完之后写回到d_Pre[index]中,提示是:low global memory restore efficieny。
对于这种情况的话,怎么去实现对齐访问呢?
ps:今天优化程序,确实发现了合理使用存储器的好处,可能一个小改动,性能提升就比较明显的。但是对于全局内存的对齐访问,我就只好请教各位大大了。