最近遇到了一个问题,拷贝数据的时候经过shared memory的带宽会快于没有经过shared memory,使用shared memory的具体代码如下, 拷贝的数据大小是4096 * 4096个double数据(128MiB),blocksize是(1024,1,1),gridsize是(4096*4096/1024/2,1,1)。
// blocksize=(1024,1,1), gridsize=(4096*4096/1024/2,1,1)
__global__ void copySheme(double * MatA,double* MatB)
{
__shared__ double tile[1024*2];
size_t idx=threadIdx.x+blockDim.x * blockIdx.x * 2;
tile[threadIdx.x]=MatA[idx];
tile[threadIdx.x+blockDim.x]=MatA[idx+blockDim.x];
MatB[idx]=tile[threadIdx.x];
MatB[idx+blockDim.x]=tile[threadIdx.x+blockDim.x];
}
没有使用shared memory的代码如下,此时,blocksize和gridsize不变。
// blocksize=(1024,1,1), gridsize=(4096*4096/1024/2,1,1)
__global__ void copyRow(double * in,double * out)
{
size_t idx