【问题标题】:Large matrix multiplication on gpugpu上的大矩阵乘法
【发布时间】:2013-01-11 11:57:30
【问题描述】:

我需要在 GPU 上使用 CUDA 为大型矩阵实现矩阵乘法。仅每个矩阵的大小就大于 GPU 内存。所以我认为我需要一种算法来有效地做到这一点。我在互联网上四处寻找,但找不到任何东西。谁能给我这种算法的名称或链接。

【问题讨论】:

  • 像[A0;A1] * [B0 B1] = [A0*B0 A0*B1; A1*B0 A1*B1]这样简单地分割矩阵怎么样?这也许是一个好的开始。

标签: cuda gpu gpgpu matrix-multiplication


【解决方案1】:

实际上并没有正式的算法。一般来说,这类线性代数运算(其中整个问题没有同时存储在内存中)被称为“核外”运算。

要解决它,您不需要特别复杂的算法,只需要 CUBLAS 库和铅笔和纸。例如,您可以像这样分解矩阵乘积:

它为您提供了四个独立的子矩阵乘法运算。这些可以通过使用非常简单的主机代码对 CUBLAS gemm 的四次调用来计算。您可以将想法扩展到匹配问题大小和 GPU 容量所需的尽可能多的子矩阵。同样的原理也可以用于在多个 GPU 上实现矩阵乘法问题(参见this question 示例)。

或者,您可以在哈佛开发的SciGPU-GEMM 代码库和HPL-CUDA linpack 实现中找到这个精确想法的工作实现(免责声明:我隶属于后一个代码库)。

【讨论】:

  • +1。分解是从哪里来的?答案当然很好!
  • @Rekin:我不明白你在问什么。它的数学原理来自我的脑海,你看到的图像由我在 LaTeX 中渲染为 gif 并上传到 SO 图像托管服务。
  • 对不起,我指的是数学公式。前段时间我上了一门代数课,大矩阵乘法主题被认为是计算上最难解决的问题之一。它给我留下了一种不可能的错觉。
  • @Rekin 在线性代数块矩阵算法中是高效数值实现的中心话题。请参阅here 以及如何在lapack 中组织块矩阵计算
猜你喜欢
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多