Language agnostic BLAS如何结合矩阵链乘法优化

Language agnostic BLAS如何结合矩阵链乘法优化,language-agnostic,blas,Language Agnostic,Blas,BLAS(基本线性代数子程序)提供了许多其他编程语言,比如我使用的Matlab,它具有快速例程来完成矩阵乘法之类的事情 但是,当将多个矩阵相乘时,有一个最佳顺序来“括起”矩阵。摘自: 例如,假设A是一个10×30的矩阵,B是一个30×5的矩阵,并且 C是一个5×60的矩阵。那么 (AB)C=(10×30×5)+(10×5×60)=1500+3000=4500次运算 A(BC)=(30×5×60)+(10×30×60)=9000+18000=27000次运算 本文将继续讨论如何求解此乘法的最佳顺序

BLAS(基本线性代数子程序)提供了许多其他编程语言,比如我使用的Matlab,它具有快速例程来完成矩阵乘法之类的事情

但是,当将多个矩阵相乘时,有一个最佳顺序来“括起”矩阵。摘自:

例如,假设A是一个10×30的矩阵,B是一个30×5的矩阵,并且 C是一个5×60的矩阵。那么

(AB)C=(10×30×5)+(10×5×60)=1500+3000=4500次运算

A(BC)=(30×5×60)+(10×30×60)=9000+18000=27000次运算


本文将继续讨论如何求解此乘法的最佳顺序。我的问题是,BLAS中是否使用了这些优化程序?如果没有,如果我在Matlab之类的程序中明确定义矩阵乘法的顺序,并适当使用括号,我能获得更快的速度吗?

可以找到BLAS的规范定义,并且不包括对多个矩阵的调用。因此,我不期望任何遵循该定义的实现提供您提到的链接优化。很难给出一个明确的答案,因为BLAS在过去的30年里已经被处死了,所以有很多人,谁知道呢,也许某个无聊的博士生决定在某个时候这样做:)

也就是说,有些实现类似于使用表达式模板(…)等功能智能地删除临时变量,并在适当的时候启用延迟计算。这是一件很有希望的事情,但我真的不知道它是否适用于矩阵链接。我怀疑没有,从事实上看,这并没有包括在他们的报告中

归根结底,找到答案最可靠的方法就是自己尝试一下。您可以很容易地检查您选择的语言/实现:只需尝试您问题中的示例,但最好使用更大的尺寸,例如所有尺寸乘以100