我刚刚开始学习一些cuda
编程,我很感兴趣的是如何处理超过块/线程大小的大型矩阵的计算。使用CUDA计算(非常)大型矩阵产品
例如,我有seen code其中显示了如何执行平铺矩阵乘法,但它失败,块大小和网格大小太小。在上述代码中,如果块大小和网格大小均设置为1
,则仅计算最终矩阵的第一个元素。
答案很简单:用较大的块和网格大小调用内核,但是当我想执行一个有800万行和600万列的矩阵乘法时会发生什么 - 这是一个任意大的网格,不能有适当的网格和任何现代GPU的块大小?
我在哪里可以找到示例代码或算法来处理这类事情?我相信简单的情况应该是一个矩阵乘法算法,如果用<<<1,1>>>
调用,任何可以解释这个调用的算法都应该能够解释任何更大的矩阵。
一个600万乘800万个元素的稠密浮动矩阵将需要约。 192 TB的存储空间(double将是其两倍)。如果每个元素分配了一个线程,则需要“仅”约。 48兆线程 - 约35位寻址。 CUDA网格在cc3.0 +设备上变暗提供(理论上)〜63位* block *地址空间,更不用说每块1024个线程的可用性(因此超过70位可寻址线程空间)。这个问题似乎是基于错误的前提:“对于任何现代GPU而言,不可能有适当的网格和块大小的任意大的东西。” – 2015-02-12 05:13:32