BLAS
規範釋出基礎線性代數操作的數值庫
BLAS(英語:Basic Linear Algebra Subprograms,基礎線性代數程序集)是一個應用程序接口(API)標準,用以規範發布基礎線性代數操作的數值庫(如矢量或矩陣乘法)。該程序集最初發布於1979年,並用於建立更大的數值程序包(如LAPACK)。在高性能計算領域,BLAS被廣泛使用。例如,LINPACK的運算成績則很大程度上取決於BLAS中子程序DGEMM的表現。
為提高性能,各軟硬件廠商則針對其產品對BLAS接口實現進行高度最佳化。
BLAS級別
BLAS按照功能被分為三個級別:[1]
- Level 1:矢量-矢量運算
- Level 2:矩陣-矢量運算
- Level 3:矩陣-矩陣運算
原理
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
- 德克薩斯高級計算中心後藤和茂開發的BSD許可證開源的BLAS實現,但已停止了活躍開發,後繼者為OpenBLAS。[7]
- OpenBLAS
- 繼任GotoBLAS的開源BLAS的實現,主要由中國科學院軟件研究所並行軟件與計算科學實驗室進行開發。[8]
- ESSL
- IBM的科學工程數值庫ESSL,支持AIX和Linux系統下的PowerPC架構。[9]
- Intel MKL
- Intel核心數學庫,支持Pentium,Intel Core與ItaniumCPU系列。實現平台包括Linux, Windows及OS X。[10]
- GSL
- GNU科學數值庫(GNU Scientific Library)包含了GNU下的多平台C語言實現。
- RenderScript IntrinsicBLAS
- 基於Renderscript的Android移動終端高性能BLAS實現。[11]
參考文獻
- ^ (英文)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).
- ^ (簡體中文)BLAS庫在多核處理器上的性能測試與分析 (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)Anatomy of High-Performance Matrix Multiplication (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)BLAS (Basic Linear Algebra Subprograms) (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)AMD Core Math Library (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)Automatically Tuned Linear Algebra Software (ATLAS) (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)GOTOBLAS2 (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)OpenBLAS (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)Engineering and Scientific Subroutine Library (ESSL)
- ^ (英文)Math Kernel Library from Intel (頁面存檔備份,存於網際網路檔案館)
- ^ (英文)ScriptIntrinsicBLAS | Android Developers (頁面存檔備份,存於網際網路檔案館)
外部連結
- BLAS homepage on Netlib.org
- BLAS FAQ
- BLAS Quick Reference Guide from LAPACK Users' Guide