为什么没有用于加法和减法的BLAS例程

时间:2018-02-07 14:41:34

标签: blas scientific-computing

在BLAS中有例如

的例程
dscal    scale a vector by a constant  
dinit    initialize a vector with given value
daxpy    perform y = a*x + y

等等。但是显然没有用于向量加法或向量减法的例程。如果这是真的,那是什么原因呢?

特别是因为有例程执行更简单的操作,例如dinitdscal。 当然可以使用daxpy a=1a=-1来执行给定向量的加法/减法,但在我看来过于复杂。

1 个答案:

答案 0 :(得分:7)

为了找到合理的解释,我们必须回到BLAS history

在那里,我们可以了解到Level 1在Level 2,3之前设计得很好( 2级是1987年,3级是1989年)。

关于1级历史,在1979年CL Lawson等人的论文Basic Linear Algebra Subprograms for Fortran Usage中。我们可以阅读,第3页

  

在包装中包含操作的标准是它   应该只涉及一个级别的循环,并在通常情况下发生   数值线性代数算法,如高斯消元法   或使用正交变换的各种消除方法。

本文基于Hanson等人的初始规范,1973 A Proposal for Standard Linear Algebra Subprograms。在本文档中,您可以再次阅读:

  

例如,已经发现[Krogh(1)]使用组装   用于求解线性的双精度程序中的编码模块   基于Householder transfZormations和列缩放的方程式   和列交换减少了Univac 1108上的执行时间   相对于仔细书写时所需的时间,15%至30%   使用了Fortran模块。

之后

  

根据上述,我们认为属于I类的操作   所述标准是:(1)两个点积(内积)   向量,基本向量运算,y:= ax + y其中x和y是   n向量和a是标量,(3)Givens 2 x 2正交   变换应用于2 x n子矩阵。

我们可以看到主要关注的是使用线性替换,Givens旋转或Householder转换来实现算法(线性求解器......)。在这种情况下,引用的参考文献中解释的最重要的操作是axpy,scaling,dot,norm等。目标不是提供一组完整的向量运算,如加法,减法等......但只是为了集中精力努力完成一小部分程序。