BLAS

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

为提高性能，各軟硬件厂商则针对其產品对BLAS接口实现进行高度最佳化。

BLAS級別
BLAS按照功能被分为三个级别：
 Level 1：矢量-矢量运算

 Level 2：矩阵-矢量运算

 Level 3：矩阵-矩阵运算

原理
BLAS實現都一般對記憶體階層最佳化（Memory Hierarchy Optimization），使數據在快取重用、甚或減少轉譯後備緩衝區失誤（TLB miss）而提高運算效能。BLAS庫在多核處理器上的性能測試與分析 Anatomy of High-Performance Matrix Multiplication 

實現
 Netlib BLAS官方参考实现，程序语言为Fortran 77。BLAS (Basic Linear Algebra Subprograms) 
 ACML（AMD Core Math Library）廠商AMD的BLAS實現。AMD Core Math Library 
 ATLASBSD许可证開源的BLAS實現。Automatically Tuned Linear Algebra Software (ATLAS) 
 CUDA SDK NVIDIA CUDA SDK包含了BLAS功能，通过C编程实现在GeForce 8系列或更新一代显卡上运行。
 GotoBLAS 後藤和茂开发的BSD许可证開源的BLAS實現，但已停止了活跃开发，后继者为OpenBLAS。GOTOBLAS2 
 OpenBLAS 继任GotoBLAS的开源BLAS的实现，主要由中国科学院软件研究所并行软件与计算科学实验室进行开发。OpenBLAS 
 ESSL IBM的科学工程数值库ESSL，支持AIX和Linux系统下的PowerPC架构。Engineering and Scientific Subroutine Library (ESSL)
 Intel MKL Intel核心数学库，支持Pentium，Intel Core与ItaniumCPU系列。实现平台包括Linux, Windows及OS X。Math Kernel Library from Intel 
 GSL GNU科学数值库（GNU Scientific Library）包含了GNU下的多平台C语言实现。
 RenderScript IntrinsicBLAS 基于Renderscript的Android移动终端高性能BLAS实现。ScriptIntrinsicBLAS | Android Developers 

 參考文獻 

外部链接
 BLAS homepage  on Netlib.org
 BLAS FAQ 
 BLAS Quick Reference Guide  from LAPACK Users' Guide

Category:應用程序接口