1、BLAS
基础线性代数程序集(Basic Linear Algebra Subprograms),基于Fortran实现的基本向量乘法,矩阵乘法的一种科学计算函数库,也是一组向量和矩阵运行的接口规范标淮,规范向量之间的乘法、矩阵之间的乘法等,BLAS实际上是将复杂的矩阵、向量运算简化成类似加减乘法一样的简单计算单元,各软硬件厂商的产品(openblas、MKL等)对BLAS接口进行高度优化。
BLAS分为三级:
第一级,完成向量与向量或者向量与标量以及范数之间的运算。
第二级,涉及矩阵与向量之间的操作。
第三级,涉及矩阵与矩阵之间的操作。
2、PBLAS
并行基本代数程序集(Parallel Basic Linear Algebra Subprograms),执行消息传递,其接口与BLAS相似,简化了ScaLAPACK的设计,使得ScaLAPACK的代码与LAPACK 代码相当接近。
3、LAPACK
线性代数库(linear algebra package),底层是BLAS,在BLAS基础上定义了矩阵和向量运算的函数,如线性方程组、矩阵分解、求奇异值等。
4、CBLAS和CLAPACK
在BLAS和LAPACK的基础上,增加了C的调用方式。
5、BLAS++和LAPACK++
在BLAS和LAPACK的基础上,增加了C++的调用方式。
6、ScaLAPACK
高扩展的LAPACK,Scalable LAPACK用于并行分布式内存机器的高性能线性代数例程库。ScaLAPACK 解决密集和带状线性系统、最小二乘问题、特征值问题和奇异值问题。ScaLAPACK 软件层次结构如下图:
7、第三方开源线性代数库
Atlas、GotoBLAS、OpenBLAS,是BLAS接口和一部分LAPACK功能的开源实现。其中OpenBLAS是中科院张先轶博士基于GotoBLAS的基础实现,OpenBLAS和MKL性能不相上下,支持X86/X86_64(Intel/AMD)、VIA、Power、MIPS、MIPS64、IA64、SPARC、ARM、System Z、RISC-V 64、LOONGARCH64、Elbrus E2000处理器;
8、第三方商业线性代数库
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推出的线性代数计算库,基于Netlib BLAS的实现,用以在GPU上做矩阵和向量计算;
rocBLAS:AMD针对GPU推出的线性代数计算库,用以在GPU上做矩阵和向量计算,rocBLAS接口上兼容Netlib BLAS和cuBLAS-v2 API,cublas 替代为rocblas 即可。
9、MAGMA
面向下一代体系架构(多核CPU和多GPU)开源的线性代数软件包,是用于异构/混合架构的密集线性代数库的解决方案。MAGMA可以使用数学库中[MKL、OpenBLAS、ATLAS、ACML, ESSL(IBM 数学库)+ CUDA]的任意一个,MAGMA库的设计在功能、数据存储和接口方面与LAPACK相似,能够轻松地将现有的软件从LAPACK移植到MAGMA。