0

我正在阅读一个文本,指出方阵的最大大小是 16x16,因为 32x32 超过512(假设我们希望单独的线程计算乘积矩阵的每个元素)。我想知道为什么没有提到诸如 17x17 或 22x22 之类的维度矩阵,因为这些维度的乘积矩阵也不超过 512 个元素。这是内存对齐问题吗?

4

1 回答 1

1

您在此处描述的文本中有许多(未说明的)假设。

每个块 512 个线程是 cc 1.x 设备的限制。较新的设备限制为每个块 1024 个线程。

另一个假设是每个线程只负责一个数据元素,即。输出矩阵中的一个点。因此,这将您限制为每个线程块 512 个输出点(或 1024 个输出点)。许多朴素的矩阵乘法代码以这种方式工作,但不一定非要如此。没有什么可以阻止您编写按顺序处理多个 (16x16) 子矩阵的代码,例如,在单个线程块中。

最后,本文假设您要遵守一般的 CUDA 建议,即线程块由线程数组成,线程数等于32 的整数倍,即 warp size。从这里

每个块的线程数应选择为 warp 大小的倍数,以避免尽可能多地在填充不足的 warp 上浪费计算资源。

17x17 和 22x22 不会创建 32 的整数倍的产品。

于 2013-08-27T13:59:21.760 回答