1、BLAS
基本线性代数子程序(Basic Linear Algebra Subprograms),是一组向量和矩阵运行的接口规范标淮,规范向量之间的乘法、矩阵之间的乘法等,各软硬件厂商针对其产品(openblas、MKL等)对BLAS接口进行高度优化。
BLAS分为三级:
第一级,完成向量与向量或者向量与标量以及范数之间的运算。
第二级,涉及矩阵与向量之间的操作。
第三级,涉及矩阵与矩阵之间的操作。
2、LAPACK
线性代数库(linear algebra package),底层是BLAS,在BLAS基础上定义了矩阵和向量运算的函数,如线性方程组、矩阵分解、求奇异值等。
3、CBLAS和CLAPACK
在BLAS和LAPACK的基础上,增加了C的调用方式。
4、BLAS++和LAPACK++
在BLAS和LAPACK的基础上,增加了C++的调用方式。
5、ScaLAPACK
高扩展的LAPACK,Scalable LAPACK用于并行分布式内存机器的高性能线性代数例程库。ScaLAPACK 解决密集和带状线性系统、最小二乘问题、特征值问题和奇异值问题。ScaLAPACK 软件层次结构如下图:
6、第三方开源线性代数库
Atlas、GotoBLAS、OpenBLAS,是BLAS接口和一部分LAPACK功能的开源实现,OpenBLAS是中科院张先轶博士基于GotoBLAS的基础实现;
7、第三方商业线性代数库
MKL,英特尔的科学计算的优化库,核心函数包括 BLAS、LAPACK、稀疏求解器、快速傅立叶变换 (FFT)、随机数生成器函数 (RNG)、汇总统计、数据拟合和矢量数学,优化英特尔 CPU、GPU 和其他加速器的应用程序;
ACML,AMD核心数学程序库,继任者是AMD 优化 CPU 库( AOCL ),包括开源BLIS、libFLAME、ScaLAPACK、FFTW和 AOCL-Sparse ,闭源 AMD LibM、memcpy和 RNG。
cuBLAS,NVIDIA针对GPU也推出,基于BLAS的实现,用以在GPU上做矩阵和向量计算;
8、MAGMA
面向下一代体系架构(多核CPU和多GPU)开源的线性代数软件包,是用于异构/混合架构的密集线性代数库的解决方案。MAGMA可以使用数学库中[MKL、OpenBLAS、ATLAS、ACML, ESSL(IBM 数学库)+ CUDA]的任意一个,MAGMA库的设计在功能、数据存储和接口方面与LAPACK相似,能够轻松地将现有的软件从LAPACK移植到MAGMA。