我有一个驻留在 GPU 上的 3D 矩阵 M[i*strideyz+j*stridez+k],我想逐层移动这个矩阵:i+1-->i,并将新数据附加到最后一层。我已经编写了一个内核来做到这一点,但它非常慢。我知道这里有一些讨论,但不知何故我还没有找到我的答案。
这是我的实现:
__global void shift(int nlayers, float* M, float* inp,
size_t strideyz,size_t stridez)
{
int k=blockIdx.x*blockDim.x+threadIdx.x;
int j=blockIdx.y*blockDim.y+threadIdx.y;
for(i=0;i<nlayers-1;i++)
M[i*strideyz+j*stridez+k]=M[(i+1)*strideyz+j*stridez+k];
M[(Nlayers-1)*strideyz+j*stridez+k]=inp[j*stridez+k];
}