【问题标题】:What is the quickest method of matrix multiplication?矩阵乘法最快的方法是什么?
【发布时间】:2016-02-06 13:39:15
【问题描述】:

我最近一直在研究一个相当广泛的程序,我目前正处于必须利用矩阵乘法的地步。问题是,对于这个特定的程序,速度至关重要。我熟悉许多矩阵设置,但我想知道哪种方法运行速度最快。我进行了广泛的研究,但结果很少。下面是我熟悉的矩阵乘法算法列表:

  • 迭代算法
  • 分而治之算法
  • 次立方算法
  • 共享内存并行

如果有人需要澄清我列出的方法或一般问题,请随时提出。

【问题讨论】:

  • A:由对执行代码的处理器架构具有详细知识和经验的专家开发的手动调优库;换句话说,不要自己动手,乞求借用或窃取实现。哦,或者真的买一个。
  • 这个问题太笼统了。您的矩阵可以是大的、小的、稀疏的、密集的……对于每个上下文都没有最好的算法。请注意,共享内存并行不是一种算法,根据您所使用的并行架构,有些算法的表现会更好或更差。
  • 看看related post

标签: algorithm matrix


【解决方案1】:

Strassen 算法和朴素 (O(n^3)) 算法在实践中使用最多。

不使用具有更严格渐近界的更复杂的算法,因为它们的好处仅对非常大的矩阵是显而易见的,因为它们的复杂性,例如Coppersmith算法。

正如其他人指出的那样,您可能想要使用像 ATLAS 这样的库,它会根据您正在执行的平台的特性自动调整算法,例如L1/L2 缓存大小。

【讨论】:

  • Je suis UN pamplemousse!
  • OP(或其他任何人)可以提供此答案中第一个陈述的哪些证据?
  • 有很多论文研究这个主题。看看this,Strassen 似乎对大型矩阵实现了显着的加速,而 Coppersmith 的好处非常有限。 Strassen 本身有时在具有复杂内存层次结构的系统上可能并不方便; this 论文建议在 ATLAS 中添加一个额外的自动调整步骤,以自动决定是使用 Strassen 还是 DGEMM 的幼稚方法。
  • 有很多论文研究这个主题当然,但很少有证据表明广泛使用的矩阵计算库实际上使用了 Strassen 算法。正如您所写,Strassen 本身有时在具有复杂内存层次结构的系统上可能并不方便,而这几乎涵盖了当前大多数基于 CPU 的计算机。
  • 当然,虽然关键是即使对于固定平台,最好的方法也取决于乘法的大小。无论如何,我改变了我的答案,以反映陪审团仍在这个问题上的事实。
【解决方案2】:

最快的方法可能是使用已经优化的现有库,您不必每次都重新发明轮子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2021-02-11
    • 2012-11-30
    • 2011-04-08
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多