And*_* H. 6 scientific-computing blas
在BLAS中有类似的例程
dscal scale a vector by a constant
dinit initialize a vector with given value
daxpy perform y = a*x + y
Run Code Online (Sandbox Code Playgroud)
等等.但是显然没有用于向量加法或向量减法的例程.如果这是真的,那是什么原因呢?
特别是因为有例程执行更多的琐碎操作,如dinit或dscal.当然人们可以使用daxpy带有a=1或a=-1从给定的向量执行加法/减法,但在我看来,是过于复杂.
为了找到合理的解释,我们必须回到BLAS的历史
在那里我们可以知道1级设计在2,3级之前(2级是1987年,3级是1989).
关于1级历史,在1979年的论文基础线性代数子程序的Fortran使用 CL Lawson等.我们可以阅读,第3页
在包中包括操作的标准是它应该仅涉及一个级别的循环并且在通常的数值线性代数算法中发生,例如高斯消元或使用正交变换的各种消除方法.
本文基于Hanson等人的初始规范,1973年标准线性代数子程序的提案.在本文档中,您可以再次阅读:
例如,已经发现[Krogh(1)]在双精度程序中使用汇编编码模块来解决基于Householder transfZormations的线性方程,并使用列缩放和列交换将Univac 1108的执行时间缩短了15%相对于使用精心编写的Fortran模块所需时间的30%.
之后
根据上述标准我们认为属于I类的操作是:(1)两个向量的点积(内积),基本向量运算,y:= ax + y其中x和y是n向量和a是标量,(3)Givens 2 x 2正交变换应用于2 xn子矩阵.
我们可以看到主要关注的是使用线性替换,Givens旋转或Householder转换来实现算法(线性求解器......).在这种情况下,引用的参考文献中解释的最重要的操作是axpy,scaling,dot,norm等.目标不是提供一组完整的向量运算,如加法,减法等......但只是为了集中精力努力完成一小部分程序.
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |