关于深入浅出谈CUDA中矩阵乘法程序的一点疑惑

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

非常非常不明白为什么会这样啊???期待能人来解答!!!

int newn = ((n + BLOCK_SIZE - 1) / BLOCK_SIZE) * BLOCK_SIZE
是将矩阵大小做修正,使其刚好被BLOCK_SIZE 分完

不熟悉文章所以无法准确的回答。
但一般这样做的目的都是为了指标不越界。你可以对比看看programming guide 3.2.3节或SDK里矩阵相乘的例子。