Basic Linear Algebra Subprograms

Basic Linear Algebra Subprogramsは数値線形代数の基礎的演算に必要な関数を定義するAPIである。ベクトル・行列演算を含む38の関数からなるLevel 1 BLASが1979年に発表されたのち、Level 2 および Level 3 まで拡張された。多数の実装が作成・整備され続けており、この分野におけるデファクトスタンダードとなっている。BLASの基礎演算を利用してLAPACKなどの上位パッケージが構築されており、科学技術計算・高性能計算で多用される。

BLASの関数を多用するソフトウェアにおいてBLAS実装の質は速度に直結する。高度な最適化は実装が動くハードウェアに依存するため、多くのハードウェアベンダーが自社デバイスに特化したライブラリを提供している。オープンソースの最適化 BLAS 実装として OpenBLAS などがある。

LINPACK ベンチマークの性能は、BLAS のサブルーチンである DGEMMの性能に大きく影響される。

対応しているデータ型は単精度浮動小数点数と倍精度浮動小数点数。近年 CPU および GPU で広く実装されている bfloat16 は、各 BLAS 実装が独自拡張として実装していていて、今のところ、公式の BLAS 実装では実装されていない。

1. 機能
-----

BLASの機能は以下の3レベルに分類される。

1.1. Level 1
------------

このレベルには、以下のような形式のベクトル演算が含まれる。

他にもドット積やノルムなどが含まれる。

1.2. Level 2
------------

Level 2 BLAS は の行列を含み //の//オーダーを持つ演算のセットである。元々の BLASを拡張し1段階抽象度の高い演算セットとして提案された。

行列の種類を示す記号には //GE// 、//HE// 、//SY// 、//TR//  などがある。演算を示す記号には //MV// 、 //R// 、 //R2// 、 //SV//  がある。

1.2.1. GEMV
-----------

一般行列ベクトル積は一般行列を用いた行列ベクトル積である。すなわち次の演算である。

1.3. Level 3
------------

このレベルには、以下のような形式の行列同士の演算が含まれる。

また、 を三角行列 について解く演算なども含まれる。このレベルにはよく使われる汎用行列乗算操作が含まれる。

2. API
------

BLASはAPIであり、各演算関数を次のように定義する。

2.1. GEMM
---------

各行列の変換フラグ・次元・係数・アクセスオフセットを引数に取り、行列積和演算を実行、演算結果がCへ書き出される。 Trans = "N" | "T" | "C" T = float32 | float64 | complex

def _GEMM TRANSB: Trans, # Flag of B transformation  M: int, # The number of C row ==  OR A col ) N: int, # The number of C col ==  OR B row ) K: int, # The number of A_col & B_row  OR A_row & B_col  ALPHA: T, # a scalar of "C <- aAB + bC" A: Matrix[T], # A matrix of "C <- aAB + bC" LDA: int, # Leading dimension of A B: Matrix[T], # B matrix of "C <- aAB + bC" LDB: int, # Leading dimension of B BETA: T, # b scalar of "C <- aAB + bC" C: Matrix[T], # C matrix of "C <- aAB + bC"  LDC: int ) -> None<WtXmlEndTag />

3. Sparse BLAS
--------------

Sparse BLASは、疎行列を対象としたBLASである。疎行列は格納形式と演算実装を工夫することで高効率の計算が可能である。Sparse BLAS はこの用途に特化した実装をもつBLASである。疎行列を示す記号には //Sp//  が用いられる。

3.1. SpMV
---------

疎行列ベクトル積は疎行列を用いた行列ベクトル積である。すなわち次の演算である。

4. PBLAS
--------

PBLASは、コンピュータ・クラスター向けの並列BLAS。MPI などの上で動作する BLACS を通信プロトコルとして利用する。

5. 実装
-----

BLAS演算は多数の積和演算からなる。またLevel 2およびLevel 3ではベクトル・行列を扱う。ゆえに計算機におけるBLAS実装ではSIMD命令をもちいた最適化が可能である。利用される命令とその特性は命令セットアーキテクチャにより異なり、またメモリ等の実行環境によっても最適設定は異なる。その結果、特定CPUに特化したBLAS実装や実行時に環境へのチューニングをおこなうBLASなど、異なる特性をもつ様々なBLAS実装が存在する。

5.1. 特定のデバイスに限定していない汎用の実装
-------------------------

[1]: netlib による公式リファレンス実装。C言語版とFORTRAN版がある。 [2]: BLASのC++ API。C言語版のAPIと1対1で対応する。Intel, AMD, NVIDIA, IBM などのハードウェアベンダーの出しているBLAS実装を利用して動作する。 BLIS: BLASのスーパーセット。 OpenBLAS: オープンソース実装。x86, x86-64, MIPS32, MIPS64, ARM, ARM64, POWER, IBM zEnterprise, RISC-V 上の Linux, Microsoft Windows, macOS, FreeBSD, OpenBSD, NetBSD, DragonFly BSD, Android, iOS, AIX, Haiku, Solaris で動作。

5.2. ハードウェアベンダーによる、特定のデバイス向けの実装
-------------------------------

[3]: Apple による macOS および iOS 向けフレームワーク。ARM と Intel Core と PowerPC 向けに最適化された BLAS と LAPACK を含む。 [4]: AMD の CPU  上のLinuxとWindowsをサポート。 [5]: ARM64上のLinuxで動作。 [6]: NVIDIA CUDA SDK には、NVIDIA の GPU 上で動作するBLAS機能が含まれる。 [7]: IBMによる実装。POWER上のAIXおよびLinuxで動作。 Intel oneAPI Math Kernel Library: インテルによる実装。インテルの CPU および GPU をサポート。Linux/Windows/macOS で動作。 [8]: 日本電気による実装。NEC SX上のSUPER-UXと、Itanium上のLinuxをサポート。 [9]: SPARC と x86-64 上の Oracle Solaris と Linux で動作する BLAS および LAPACK 実装。旧称Sun Performance Library。 [10]: AMD の GPU 向けのオープンソース実装。

5.3. かつて開発されていたライブラリ
--------------------

[11]: オープンソース実装 [12]: AMD が提供する、主に GPU 向けの OpenCL 上で動くオープンソース実装。2017年が最後のバージョン。後継はrocBLAS。 [13]: 後藤和茂が GotoBLAS を開発し、OpenBLAS へと引き継がれている。GotoBLAS は2010年2月が最後のバージョン。 Hewlett-Packard Mathematical Software Library : ヒューレット・パッカードの数学ライブラリ。IA-64/PA-RISC/x86/Opteron上のHP-UXおよびLinuxで動作。 [14]: 1994年に発表された日本電気のSX-4向け数学ライブラリ。現在は配布されていない。 [15]: SGIの実装。LAPACK も含む。IRIX上で動作。

6. BLASではないが類似ライブラリ
-------------------

[16]: 分散メモリ用の密行列・疎行列の線形代数および最適化ライブラリ。 GNU Scientific Library: C言語での実装。 [17]: BLAS機能を提供する汎用C++テンプレートクラスライブラリ。Boostライブラリの一部。高性能を追求するというよりも、C++の最新機能を使ってアルゴリズムを正しく実装することに注力している。

7. 関連項目
-------

数値解析
LAPACK

8. 脚注
-----

9. 参考文献
-------

C. L. Lawson, R. J. Hanson, D. R. Kincaid, F. T. Krogh. . //Basic Linear Algebra Subprograms for Fortran Usage//. doi: 10.1145/355841.355847
BLAS  提唱論文
Dongarra, Croz, Hammarling and R. J. Hanson. . //An Extended Set of FORTRAN Basic Linear Algebra Subprograms//. doi: 10.1145/42288.42291
Level 2 BLAS 提唱論文

10. 外部リンク
---------

[18]
[19] GNU Scientific Library reference manual
[20] LAPACK Users' Guide
[21] BLAS設計者の1人 Charles L. Lawson のインタビュー。by Thomas Haigh, 6 and 7 November, 2004, San Clemente, California. Society for Industrial and Applied Mathematics, Philadelphia, PA.
[22] BLAS、LINPACK、ATLAS 設計に関わった Jack J. Dongarra のインタビュー。 by Thomas Haigh, 26 April, 2005, University of Tennessee, Knoxville TN. Society for Industrial and Applied Mathematics, Philadelphia, PA