BLAS

BLAS#

  • 読み: ぶらす

  • 英名: BLAS

Basic Linear Algebra Subprograms の略称.科学技術計算の核となる線形演算の API 仕様群.J.J.Dongarra らによって提唱された.この API を用いて作成されたプログラムは,実装部分をチューニングすれば,パフォーマンスの向上を図ることができる.level-1(スカラとベクトルの演算),level-2(ベクトルと行列の演算),level-3(行列と行列の演算) に分類されている.インターフェースとして例えば DAXPY(ベクトル \(y\) にベクトル \(x\) のスカラ倍を足す: level-1),DGEMV(ベクトル \(y\) に行列 \(A\) )とベクトル \(x\) の積を足す:level-2),DGEMM(行列 \(C\) に行列 \(A\) に行列 \(B\) の積を足す:level-3)が良く知られている.

通常,簡素な実装が付属して配布されているが,主に動作チェックのためであり,その実装自体にはパフォーマンスを向上させる意味はない.ただ,BLAS にはマシンスペックに応じた様々な実装が多数存在し,それらのうち特に level-3 の API 群のパフォーマンスは簡易な実装に比べて圧倒的な差があるので,BLAS の API を用いてプログラムを作っておくことは,プログラムの性能向上に大きな意味がある.科学技術計算のソフトウェア作りにおいては,計算の大部分を BLAS ルーチンに「押し込める」ことがパフォーマンス向上の上で大きな意味を持つ.ただ,あまりに小さなベクトルや行列についてまで BLAS ルーチンを用いるとルーチン呼び出しのオーバーヘッドによって速度が低下することもあり注意が必要である.

例えば Nuorium Optimizer においても,内点法の実装に用いられる疎行列を係数行列とする一次方程式の解法の核心部分は DSYRK という level-3 の BLAS インターフェースを用いており,BLAS の適切な実装を与えることによって,大規模問題では 20〜40% の速度向上が得られている.

オリジナルは FORTRAN であるが,C に置きかえた API(CBLAS)も存在する.