BLAS (Basic Linear Algebra Subprograms)是 Netlib定义的一组向量和矩阵运算的API规范,如向量乘、矩阵乘等,同时Netlib也提供了自己用fortran实现的参考实现库,非并行版本,只做了基本的数据并行优化比如SIMD等,BLAS主要提供了三层操作,主要接口如下:
- Level 1: 标量、向量和向量间的操作
- Level 2: 矩阵和向量间的操作
- Level 3: 矩阵和矩阵间的操作
这里的x表示BLAS提供了不同精度的运算
S
表示单精度运算D
表示双精度运算C
表示单精度复数运算Z
表示双精度复数运算
设计矩阵运算时,第二个字母和第三个字母表示不同矩阵类型的运算
GE
表示General matrixGB
表示Banded matrixSY
表示symmetric matrixSB
表示symmetric banded matrixSP
表示symmetric packed matrixTR
表示triangular matrixTB
表示triangular banded matrixTP
表示triangular packed matrix
更多细节可以参考BLAS官网http://www.netlib.org/blas/
官网也提到了一些BLAS family and its cousins,还有各家供应商、开源组织也针对自己的硬件和需求提供了BLAS优化版本,针对硬件比如CPU架构进行优化、适配分布式并行、异构并行等版本,我的一些调研结果如下
按照一些网站提供的测试结果,在共享内存场景下,各家blas的性能主要是
intelMKL>OpenBLAS>ATLAS>BLAS =NaiveintelMKL>OpenBLAS>ATLAS>BLAS =Naive
为了验证这个结论,我在服务器上进行了矩阵乘向量的测试