BLAS库和变种:-------------------------------------BLAS:原生Fortran-style,是一个接口定义规范不是实现。Netlib BLAS:BLAS的默认实现。
CBLAS: Netlib BLAS的c接口
GotoBLAS2:2010年已经不维护。
ATLAS:可自动调优的BLAS实现。速度不太好。math-atlas在github上开发力量弱。
**OpenBLAS:基于GotoBLAS2-1.13 BSD版,中科院软件所团队更新
**LAPACK: 依赖BLAS,实现上层算法,函数支持多线程。持续更新。
CLAPACK: c接口
BLACS: 面向线性代数的通讯库,通常是MPI版的BLACS。2000年之后无更新。
ScaLAPACK:LAPACK的升级版,依赖BLACS通讯库支持分布式内存。2012年之后无更新
PLASMA:没有取代ScaLAPACK,2009年之后无更新。
f2c: fortran to c
f2j: fortran to java,主要为把BLAS、LAPACK和ARPACK源码翻译为java类,spark ml默认用到。
**cuBLAS:NVIDIA的GPU版本
*clBLAS:OpenCL版本
**eigen3: 线性代数集合的c/c++模板。tensorflow和graphlab中用到。偏向c++应用。据说性能不错。3.1.1之后修改为MPL2 license.
*ARPACK: 处理大矩阵(外存处理)的只需要返回最重要的部分特征值的问题。scipy, mathematica,matlab中都用到。
**Intel MKL: 基于Intel CPU,支持多线程和向量化的线性代数库(兼容blas, lapack api,性能优),FFT, 神经网络的算法加速。
注释:
**表示重要,*表示需要关注。其他可暂不考虑
选型:
BLAS中选择OpenBLAS,因为性能好。LAPACK还算可靠
参考:
1. https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms
2. http://eigen.tuxfamily.org/index.php?title=Benchmark
3. https://www.zhihu.com/question/27872849
4. http://eigen.tuxfamily.org/dox/GettingStarted.html5. http://www.netlib.org/blas
BLAS线性代数库和变种
最新推荐文章于 2024-05-16 09:47:11 发布