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

这里最关键的点是在于threadIdx和dataIdx的映射,从原来单一的tid变成了二维的tidx和tidy。
// 一个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内的数据继续继续分割执行,那么已知