Basic Linear Algebra Subprograms

Basic Linear Algebra Subprograms（BLAS）は数値線形代数の基礎的演算に必要な関数を定義するAPIである。ベクトル・行列演算を含む38の関数からなるLevel 1 BLASが1979年に発表されたのち、Level 2 および Level 3 まで拡張された。多数の実装が作成・整備され続けており、この分野におけるデファクトスタンダードとなっている。BLASの基礎演算を利用してLAPACKなどの上位パッケージが構築されており、科学技術計算・高性能計算で多用される。
BLASの関数を多用するソフトウェアにおいてBLAS実装（ライブラリ）の質は速度に直結する。高度な最適化は実装が動くハードウェアにも依存するため、特定CPUに特化したライブラリが提供される場合もある（インテルCPU向け: Intel Math Kernel Library）。オープンソースの最適化 BLAS 実装として OpenBLAS や がある。
LINPACK ベンチマークの性能は、BLAS のサブルーチンである DGEMM（倍精度汎用行列乗算）の性能に大きく影響される。
機能.
BLASの機能は以下の3レベルに分類される。
Level 1.
このレベルには、以下のような形式のベクトル演算が含まれる。
他にもドット積やノルムなどが含まれる。
Level 2.
Level 2 BLAS は formula_1 の行列を含み formula_2 "の"オーダーを持つ演算のセットである。元々の BLAS（Level 1 BLAS）を拡張し1段階抽象度の高い演算セットとして提案された。
行列の種類を示す記号には "GE" (GEneral matrix)、"HE" (HErmitian matrix)、"SY" (SYmmetric matrix)、"TR" (TRiangular matrix) などがある。演算を示す記号には "MV" (matrix-vector product)、 "R" (Rank-one update)、 "R2" (Rank-two update)、 "SV" (solving a system of linear equations) がある。
GEMV.
一般行列ベクトル積（; GEMV）は一般行列（"GE"）を用いた行列ベクトル積（"MV"）である。すなわち次の演算である（formula_3 はGeneral Matrix）。
Level 3.
このレベルには、以下のような形式の行列同士の演算が含まれる。
また、formula_4 を三角行列 formula_5 について解く演算なども含まれる。このレベルにはよく使われる汎用行列乗算（GEMM）操作が含まれる。
API.
BLASはAPIであり、各演算関数を次のように定義する。
GEMM.
各行列の変換フラグ・次元・係数・アクセスオフセットを引数に取り、行列積和演算を実行、演算結果がCへ書き出される。
Trans = "N" | "T" | "C"
T = float32 | float64 | complex
def _GEMM<T>(
 TRANSA: Trans, # Flag of A transformation (None, Transpose, Conjugate_transpose)
 TRANSB: Trans, # Flag of B transformation (None, Transpose, Conjugate_transpose)
 M: int, # The number of C row == (A row (TRANSA=N) OR A col (TRANSA=T))
 N: int, # The number of C col == (B col (TRANSA=N) OR B row (TRANSA=T))
 K: int, # The number of A_col & B_row (TRANSA=N) OR A_row & B_col (TRANSA=T)
 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" (scaled accumulator)
 LDC: int
) -> None
Sparse BLAS.
Sparse BLASは、疎行列を対象としたBLASである。疎行列は格納形式と演算実装を工夫することで高効率の計算が可能である。Sparse BLAS はこの用途に特化した実装をもつBLASである。疎行列を示す記号には "Sp" (Sparse) が用いられる。
SpMV.
疎行列ベクトル積（; SpMV）は疎行列（"Sp"）を用いた行列ベクトル積（"MV"）である。すなわち次の演算である（formula_3 は Sparse Matrix）。
PBLAS.
PBLASは、コンピュータ・クラスター（並列計算）向けの並列BLAS（Parallel Basic Linear Algebra Subprograms）。MPI などの上で動作する BLACS を通信プロトコルとして利用する。
実装.
BLAS演算は多数の積和演算からなる。またLevel 2およびLevel 3ではベクトル・行列を扱う。ゆえに計算機におけるBLAS実装ではSIMD命令をもちいた最適化が可能である。利用される命令とその特性は命令セットアーキテクチャにより異なり、またメモリ等の実行環境によっても最適設定は異なる。その結果、特定CPUに特化したBLAS実装や実行時に環境へのチューニングをおこなうBLASなど、異なる特性をもつ様々なBLAS実装が存在する。