Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 矩阵乘法的最快方法是什么?_Algorithm_Matrix - Fatal编程技术网

Algorithm 矩阵乘法的最快方法是什么?

Algorithm 矩阵乘法的最快方法是什么?,algorithm,matrix,Algorithm,Matrix,最近我一直在做一个相当广泛的程序,现在我必须利用矩阵乘法。问题是,对于这个特殊的程序,速度是至关重要的。我熟悉许多矩阵设置,但我想知道哪种方法运行得最快。我做了广泛的研究,但结果很少。下面是我熟悉的矩阵乘法算法列表: 迭代算法 分治算法 亚立方算法 共享内存并行性 如果有人需要澄清我列出的方法或一般问题,请随时提问。最快的方法可能是使用已优化的现有库,您不必每次都重新发明轮子。算法和naive(O(n^3))是实践中使用最多的一种 不使用具有更严格渐近边界的更复杂算法,因为由于其复杂性,例如

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

  • 迭代算法
  • 分治算法
  • 亚立方算法
  • 共享内存并行性

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

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

算法和naive(O(n^3))是实践中使用最多的一种

不使用具有更严格渐近边界的更复杂算法,因为由于其复杂性,例如算法,它们的好处仅在非常大的矩阵中明显


正如其他人指出的那样,您可能希望使用类似的库,它将根据您正在执行的平台的特性自动调整算法,例如,一级/二级缓存大小。

A:由具有执行代码的处理器体系结构详细知识和经验的专家开发的手动调优库;换句话说,不要滚动自己的、请求借用或窃取实现。哦,或者买一个。这个问题太宽泛了。你的矩阵可以是大的,小的,稀疏的,密集的。。。没有适用于所有上下文的最佳算法。请注意,共享内存并行不是一种算法,根据您所使用的并行体系结构,有些算法的性能更好或最差。请看一看Je suis UN PAMPLEMOUSE!OP(或其他任何人)能为这个答案中的第一句话提供什么证据?有很多研究这个问题的论文。从这个角度看,Strassen似乎实现了大型矩阵的显著加速,而铜匠的优势非常有限。Strassen本身有时在具有复杂内存层次结构的系统上可能并不方便;论文建议在ATLAS中添加一个额外的自动调整步骤,以自动决定是使用Strassen还是DGEMM的naive方法。有很多论文研究了这个主题,当然有,但很少有证据表明广泛使用的矩阵计算库实际上使用了Strassen算法。正如您所写的,Strassen本身有时在具有复杂内存层次结构的系统上可能并不方便,这几乎涵盖了当前大多数基于CPU的计算机。当然,尽管关键点是,即使对于固定平台,最好的方法也取决于乘法的大小。无论如何,我改变了我的答案,以反映出陪审团仍在这件事上的事实。