BLAS

来自Local Chinese Wikipedia
跳转到导航 跳转到搜索

BLAS(英语:Basic Linear Algebra Subprograms,基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。例如,LINPACK的运算成绩则很大程度上取决于BLAS中子程序DGEMM的表现。

为提高性能,各软硬件厂商则针对其产品对BLAS接口实现进行高度优化。

BLAS级别[编辑]

BLAS按照功能被分为三个级别:[1]

  • Level 1:矢量-矢量运算
<math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{x} + \boldsymbol{y} \!</math>
  • Level 2:矩阵-矢量运算
<math>\boldsymbol{y} \leftarrow \alpha A \boldsymbol{x} + \beta \boldsymbol{y} \!</math>
  • Level 3:矩阵-矩阵运算
<math>C \leftarrow \alpha A B + \beta C \!</math>

原理[编辑]

BLAS实现都一般对存储器层次结构优化(Memory Hierarchy Optimization),使数据在缓存重用、甚或减少转译后备缓冲器失误(TLB miss)而提高运算性能。[2][3]

实现[编辑]

Netlib BLAS
官方参考实现,程序语言为Fortran 77[4]
ACML(AMD Core Math Library)
厂商AMD的BLAS实现。[5]
ATLAS
BSD许可证开源的BLAS实现。[6]
CUDA SDK
NVIDIA CUDA SDK包含了BLAS功能,通过C编程实现在GeForce 8系列或更新一代显卡上运行。
GotoBLAS
德克萨斯高级计算中心英语Texas Advanced Computing Center后藤和茂开发的BSD许可证开源的BLAS实现,但已停止了活跃开发,后继者为OpenBLAS。[7]
OpenBLAS
继任GotoBLAS的开源BLAS的实现,主要由中国科学院软件研究所并行软件与计算科学实验室进行开发。[8]
ESSL
IBM的科学工程数值库ESSL,支持AIXLinux系统下的PowerPC架构。[9]
Intel MKL
Intel核心数学库,支持PentiumIntel CoreItaniumCPU系列。实现平台包括Linux, WindowsOS X[10]
GSL
GNU科学数值库(GNU Scientific Library)包含了GNU下的多平台C语言实现。
RenderScript IntrinsicBLAS
基于RenderscriptAndroid移动终端高性能BLAS实现。[11]

参考文献[编辑]

  1. (英文)Eijkhout, Victor. Introduction to High Performance Scientific Computing (PDF). 2011: Page 349 [2012-01-02]. ISBN 978-1-257-99254-6. (原始内容存档 (PDF)于2019-09-19). 
  2. (简体中文)BLAS库在多核处理器上的性能测试与分析页面存档备份,存于互联网档案馆
  3. (英文)Anatomy of High-Performance Matrix Multiplication页面存档备份,存于互联网档案馆
  4. (英文)BLAS (Basic Linear Algebra Subprograms)页面存档备份,存于互联网档案馆
  5. (英文)AMD Core Math Library页面存档备份,存于互联网档案馆
  6. (英文)Automatically Tuned Linear Algebra Software (ATLAS)页面存档备份,存于互联网档案馆
  7. (英文)GOTOBLAS2页面存档备份,存于互联网档案馆
  8. (英文)OpenBLAS页面存档备份,存于互联网档案馆
  9. (英文)Engineering and Scientific Subroutine Library (ESSL)
  10. (英文)Math Kernel Library from Intel页面存档备份,存于互联网档案馆
  11. (英文)ScriptIntrinsicBLAS | Android Developers页面存档备份,存于互联网档案馆

外部链接[编辑]