2015-02-11 54 views
-1

我刚刚开始学习一些cuda编程,我很感兴趣的是如何处理超过块/线程大小的大型矩阵的计算。使用CUDA计算(非常)大型矩阵产品

例如,我有seen code其中显示了如何执行平铺矩阵乘法,但它失败,块大小和网格大小太小。在上述代码中,如果块大小和网格大小均设置为1,则仅计算最终矩阵的第一个元素。

答案很简单:用较大的块和网格大小调用内核,但是当我想执行一个有800万行和600万列的矩阵乘法时会发生什么 - 这是一个任意大的网格,不能有适当的网格和任何现代GPU的块大小?

我在哪里可以找到示例代码或算法来处理这类事情?我相信简单的情况应该是一个矩阵乘法算法,如果用<<<1,1>>>调用,任何可以解释这个调用的算法都应该能够解释任何更大的矩阵。

+1

一个600万乘800万个元素的稠密浮动矩阵将需要约。 192 TB的存储空间(double将是其两倍)。如果每个元素分配了一个线程,则需要“仅”约。 48兆线程 - 约35位寻址。 CUDA网格在cc3.0 +设备上变暗提供(理论上)〜63位* block *地址空间,更不用说每块1024个线程的可用性(因此超过70位可寻址线程空间)。这个问题似乎是基于错误的前提:“对于任何现代GPU而言,不可能有适当的网格和块大小的任意大的东西。” – 2015-02-12 05:13:32

回答

1

非常大的矩阵的主要问题不是块数或线程数。主要问题是你无法将整个矩阵放入GPU的DRAM内存中。因此,为了进行乘法运算,您需要手动使用平铺将输入矩阵分成可以放入GPU内存的图块。然后,您需要在GPU上的该图块上运行矩阵乘法,并使用尽可能多的线程,然后将图块结果返回给主机(CPU)。

当您在GPU上处理这些大图块时,您需要启动1000个线程才能获得所需的性能。启动只有一个线程不以任何方式帮助你。

你可以看看本文的更多信息:

CUDA基于非常大的矩阵计算的快速实现

我只是觉得通过谷歌搜索“大型矩阵乘法CUDA”