我刚开始学习一些cuda
编程,我感兴趣的是如何处理超过块/线程大小的大型矩阵的计算。
例如,我有seen code,它显示了如何执行平铺矩阵乘法,但它失败了,块大小和网格尺寸太小。在上述代码中,如果块大小和网格大小均设置为1
,则只计算最终矩阵的第一个元素。
答案很简单:使用更大的块和网格大小调用内核,但是当我想要执行800万行和600万列的矩阵乘法时会发生什么 - 这是一个任意大的,没有适当的网格和任何现代GPU的块大小?
在哪里可以找到示例代码或算法来处理这类事情?我认为简单的情况应该是一个矩阵乘法算法,如果用<<<1,1>>>
调用就可以工作,任何可以解释这个调用的算法应该能够解释任何更大的矩阵。
答案 0 :(得分:1)
矩阵非常大的主要问题不是块数或线程数。主要问题是你无法将整个矩阵放在GPU的DRAM内存中。因此,为了进行乘法,您需要手动使用平铺将输入矩阵划分为可以放入GPU内存的平铺块。然后,您需要在GPU上使用尽可能多的线程在该磁贴上运行矩阵乘法,然后将磁贴结果返回给主机(CPU)。
当您在GPU上处理这些大磁贴时,需要启动1000个线程以获得所需的性能。只启动一个线程对你没有任何帮助。
有关详细信息,请参阅本文:
基于CUDA的超大型矩阵计算的快速实现
我只是通过谷歌搜索&#34;大矩阵乘法CUDA&#34;