科学计算库(BLAS,LAPACK,MKL,EIGEN)

摘要:
后来,Netlib在BLAS/LAPACK的基础上添加了名为CBLAS/CLAPACK的C语言调用方法。因此,BLAS/LAPACK有两层含义,一层是Netlib通过Fortran或C实现的代码库,另一层是与两个代码库对应的接口标准。它们都实现了BLAS的所有功能和LAPACK的一些功能,并优化了计算过程。商业函数库商业公司实施BLAS/LAPACK,包括Intel的MKL和AMD的ACML。NVIDIA还为其GPU推出了cuBLAS,以在GPU上运行矩阵。
  • 函数库接口标准:BLAS (Basic Linear Algebra Subprograms)和LAPACK (Linear Algebra PACKage)
1979年,Netlib首先用Fortran实现基本的向量乘法、矩阵乘法的函数库(该库没有对运算做过多优化)。后来该代码库对应的接口规范被称为BLAS。
(注:NetLib是一个古老的代码社区,https://en.wikipedia.org/wiki/Netlib

LAPACK也是Netlib用Fortan编写的代码库,实现了高级的线性运算功能,例如矩阵分解,求逆等,底层是调用的BLAS代码库。后来LAPACK也变成一套代码接口标准。

后来,Netlib还在BLAS/LAPACK的基础上,增加了C语言的调用方式,称为CBLAS/CLAPACK

因此,BLAS/LAPACK都有两个含义,一个是Netlib通过Fortran或C实现的代码库,一个是这个两个代码库对应的接口标准

http://www.icl.utk.edu/~mgates3/docs/
http://www.netlib.org/lapack
 
现在大多数函数库都是基于BLAS/LAPACK接口标准实现
https://en.wikipedia.org/wiki/List_of_numerical_libraries
  • 开源函数库
开源社区对对BLAS/LAPACK的实现,比较著名是 ATLAS(Automatically Tuned Linear Algebra Software)和OpenBLAS。它们都实现了BLAS的全部功能,以及LAPACK的部分功能,并且他们都对计算过程进行了优化。
 
  • 商业函数库

商业公司对BLAS/LAPACK的实现,有Intel的MKL,AMD的ACML。他们对自己的cpu架构,进行了相关计算过程的优化,实现算法效率也很高。

NVIDIA针对其GPU,也推出了cuBLAS,用以在GPU上做矩阵运行。

 
 

Matlab用的是MKL库,可以用version –lapack来查看函数库的版本

Octave 默认用的是OpenBLAS库,  version -blas



附录:Lapack中的函数命名规则
============================================================================
lapack naming: x-yy-zzz, or x-yy-zz
 
x (data type)
------------------------------ 
s float
d double
c float-complex
z double-complex
ds input data is double, internal use float
zc input data is double-complex, internal use float-complex
 
 
Matrix type (yy) | full | packed | RFP | banded | tridiag | generalized problem
================================================================================
general          | ge                    gb       gt        gg
symmetric        | sy     sp       sf    sb       st
Hermitian        | he     hp       hf    hb
positive definite| po     pp       pf    pb       pt
--------------------------------------------------------------------------------
triangular       | tr     tp       tf    tb                 tg
upper Hessenberg | hs                                       hg
trapezoidal      | tz
--------------------------------------------------------------------------------
orthogonal       | or    op
unitary          | un    up
--------------------------------------------------------------------------------
diagonal         |                                di
bidiagonal       |                                bd
 
 
(zzz) algorithm
------------------------------
* Triangular factorization
-trf — factorize: General LU, Cholesky decomposition
-tri — calculate the inverse matrix
 
* Orthogonal factorization
-qp3 — QR factorization, with pivoting
-qrf — QR factorization
 
* Eigenvalue
-ev — all eigenvalues, [eigenvectors]
-evx — expert; also subset
-evd — divide-and-conquer; faster but more memory
-evr — relative robust; fastest and least memory
 
* SVD singular value decomposition
-svd — singular values
 
* Linear system, solve Ax = b
-sv — solve
-sdd — divide-and-conquer; faster but more memory
 
* Linear least squares, minimize ||b?Ax||2
-ls — full rank, rank(A) = min(m,n), uses QR.
-lsy — rank deficient, uses complete orthogonal factorization.
-lsd — rank deficient, uses SVD.
 

免责声明:文章转载自《科学计算库(BLAS,LAPACK,MKL,EIGEN)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ESP8266-12F引脚接法Nmap使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)Python科学计算之Pandas详解,pythonpandas

https://www.cnblogs.com/linux-wangkun/p/5903380.html-------pandas 学习(1): pandas 数据结构之Series https://www.cnblogs.com/linux-wangkun/p/5903945.html-------pandas 学习(2): pandas 数据结构之Da...

python科学计算_numpy_线性代数/掩码数组/内存映射数组

1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行; matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,和matlab十>分相似: a = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) matrix([[1, 2, 3],[4,...

python科学计算_scipy_常数与优化

scipy在numpy的基础上提供了众多的数学、科学以及工程计算中常用的模块;是强大的数值计算库; 1. 常数和特殊函数 scipy的constants模块包含了众多的物理常数: import scipy.constants as CC.c  #真空中的光速C.h  #普朗克常数C.pi #圆周率  在C.physical_constants字典中,通过物...

python科学计算_numpy_广播与下标

多维数组下标 多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问; 如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转换有所不同。 一个列表会被转换成各个元素组成的元组,然后进行访问(此时如果不全为整数的话,则不会共享存储区域,因为无法通过改变步长来保持存储结构不变);如:l...

python科学计算库-pandas

------------恢复内容开始------------ 1、基本概念 在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来就很方便。另一方面,如果我们日常的数据清理工作不是很复杂的话,你通常用几句 Pandas 代码就可以对数据进行规整。 Pand...