使用CUDA计算(非常)大型矩阵产品

时间:2015-02-11 21:01:54

标签: c++ matrix cuda

我刚开始学习一些cuda编程,我感兴趣的是如何处理超过块/线程大小的大型矩阵的计算。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

当您在GPU上处理这些大磁贴时,需要启动1000个线程以获得所需的性能。只启动一个线程对你没有任何帮助。

有关详细信息,请参阅本文:

  

基于CUDA的超大型矩阵计算的快速实现

我只是通过谷歌搜索&#34;大矩阵乘法CUDA&#34;