在深入浅出谈CUDA这篇文章中,谈到了对矩阵乘法的优化,其中在使用cudaMallocPitch时,先对矩阵的行数和列数做了这样的处理:int newn = ((n + BLOCK_SIZE - 1) / BLOCK_SIZE) * BLOCK_SIZE;n就是原矩阵的行数和列数(原矩阵是方阵)。
不明白为什么做这样的处理,文章当中也没有交代。
我看手册时觉得并没有要做这样处理的说明,看网络上的其他例子也没有做这样的处理。
但是,我直接使用原矩阵的行列数而不做处理的话,在算20002000阶一下的任意阶矩阵,结果是正确的。超过20002000阶的矩阵结果就不正确了。例外的是:如果矩阵阶数是block size的整数倍,结果依然是正确的。
而如果依照文章当中的处理方法,则任意阶数的矩阵计算结果都是正确的。
非常非常不明白为什么会这样啊???期待能人来解答!!!