我需要使用CUDA在GPU上实现大矩阵的矩阵乘法。每个矩阵的大小都超过了GPU内存。因此,我认为我需要一个有效的算法来解决这个问题。我在网上搜寻却没有找到相关信息。请问是否有人能提供这样算法的名称或链接。
我需要使用CUDA在GPU上实现大矩阵的矩阵乘法。每个矩阵的大小都超过了GPU内存。因此,我认为我需要一个有效的算法来解决这个问题。我在网上搜寻却没有找到相关信息。请问是否有人能提供这样算法的名称或链接。
针对这种整个问题不能同时存储在内存中的线性代数计算,实际上没有一个正式的算法,通常称为"out of core"操作。
要解决这个问题,你不需要特别复杂的算法,只需要使用CUBLAS库和笔纸。例如,你可以将矩阵乘积分解如下:
这样就得到了四个独立的子矩阵乘法操作。可以使用非常直观的主机代码,通过四次调用CUBLAS gemm 来计算它们。你可以根据问题规模和GPU容量,将此思想扩展到尽可能多的子矩阵。同样的原理也可用于在多个GPU上实现矩阵乘法问题(有关示例,请参见此问题)。
另一种选择是,在哈佛开发的SciGPU-GEMM代码库和HPL-CUDA linpack实现中找到此精确思路的工作实现(声明:我与后者代码库有关联)。
[A0;A1] * [B0 B1] = [A0*B0 A0*B1; A1*B0 A1*B1]
如何?这可能是一个不错的开始。 - kangshiyin