我需要在 GPU 上使用 CUDA 为大型矩阵实现矩阵乘法。仅每个矩阵的大小就大于 GPU 内存。所以我认为我需要一种算法来有效地做到这一点。我在互联网上四处寻找,但找不到任何东西。谁能给我这种算法的名称或链接。
问问题
7747 次
1 回答
18
实际上并没有正式的算法。一般来说,这些类型的线性代数运算,其中整个问题没有同时存储在内存中,被称为“核外”运算。
要解决它,您不需要特别复杂的算法,只需要 CUBLAS 库和铅笔和纸。例如,您可以像这样分解矩阵乘积:
它为您提供了四个独立的子矩阵乘法运算。这些可以通过使用非常简单的主机代码对 CUBLAS gemm 的四个调用来计算。您可以将想法扩展到匹配问题规模和 GPU 容量所需的尽可能多的子矩阵。同样的原理也可以用于在多个 GPU 上实现矩阵乘法问题(参见这个问题的例子)。
或者,您可以在哈佛开发的 SciGPU-GEMM代码库和HPL-CUDA linpack 实现中找到这个精确想法的工作实现(免责声明:我隶属于后一个代码库)。
于 2013-01-28T08:32:01.357 回答