矩阵乘法跟之前不同,之前一维可以直接写一个kernel,或者多个kernel线性的排布来并行计算,那么矩阵乘法就是由一维向二维转变的关键。这时候一维的kernel排布也变成了二维排布。

这里最关键的点是在于threadIdxdataIdx的映射,从原来单一的tid变成了二维的tidxtidy

  // 一个block内thread的xy
  unsigned int tidx = threadIdx.x;
  unsigned int tidy = threadIdx.y;

// 在grid内block的xy unsigned int bidx = blockIdx.x; unsigned int bidy = blockIdx.y;

// 全局thread的xy unsigned int gidx = bidx * blockDim.x + tidx; unsigned int gidy = bidy * blockDim.y + tidy;

那么我们开始考虑深度学习最重要的一个乘法,矩阵乘法:

对于矩阵乘法,我们依旧遵循cuda一贯的思维,首先先用block将data进行分割,然后每个block内再配置thread将block内的数据继续继续分割执行,那么已知