BLAS(,基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。例如,LINPACK的运算成绩则很大程度上取决于BLAS中子程序DGEMM的表现。
为提高性能,各軟硬件厂商则针对其產品对BLAS接口实现进行高度最佳化。
BLAS級別
BLAS按照功能被分为三个级别:
- Level 1:矢量-矢量运算
:\boldsymbol{y} \leftarrow \alpha \boldsymbol{x} + \boldsymbol{y} \!
- Level 2:矩阵-矢量运算
:\boldsymbol{y} \leftarrow \alpha A \boldsymbol{x} + \beta \boldsymbol{y} \!
- Level 3:矩阵-矩阵运算
:C \leftarrow \alpha A B + \beta C \!
原理
BLAS實現都一般對記憶體階層最佳化(Memory Hierarchy Optimization),使數據在快取重用、甚或減少轉譯後備緩衝區失誤(TLB miss)而提高運算效能。
實現
; Netlib BLAS:官方参考实现,程序语言为Fortran 77。
; ACML(AMD Core Math Library):廠商AMD的BLAS實現。
; ATLAS:BSD许可证開源的BLAS實現。
; CUDA SDK: NVIDIA CUDA SDK包含了BLAS功能,通过C编程实现在GeForce 8系列或更新一代显卡上运行。
; GotoBLAS: 後藤和茂开发的BSD许可证開源的BLAS實現,但已停止了活跃开发,后继者为OpenBLAS。
; OpenBLAS: 继任GotoBLAS的开源BLAS的实现,主要由中国科学院软件研究所并行软件与计算科学实验室进行开发。
; ESSL: IBM的科学工程数值库ESSL,支持AIX和Linux系统下的PowerPC架构。
; Intel MKL: Intel核心数学库,支持Pentium,Intel Core与ItaniumCPU系列。实现平台包括Linux, Windows及OS X。
; GSL: GNU科学数值库(GNU Scientific Library)包含了GNU下的多平台C语言实现。
; RenderScript IntrinsicBLAS: 基于Renderscript的Android移动终端高性能BLAS实现。
參考文獻
外部链接
- [https://www.netlib.org/blas/ BLAS homepage] on Netlib.org
- [https://www.netlib.org/blas/faq.html BLAS FAQ]
- [https://www.netlib.org/lapack/lug/node145.html BLAS Quick Reference Guide] from LAPACK Users' Guide
评论 (0)