BLAS
[Wikipedia|▼Menu]

BLAS
最新版3.11.0 / 2022年11月 (1年前) (2022-11)
プログラミング
言語Fortran
種別数値解析ソフトウェア
公式サイト ⇒BLAS (Basic Linear Algebra Subprograms)
テンプレートを表示

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

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

LINPACK ベンチマークの性能は、BLAS のサブルーチンである DGEMM(倍精度汎用行列乗算)の性能に大きく影響される。

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

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

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

y ← α x + y {\displaystyle {\boldsymbol {y}}\leftarrow \alpha {\boldsymbol {x}}+{\boldsymbol {y}}\!}

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

Level 2 BLAS は m × n {\displaystyle m\times n} の行列を含み O ( m n ) {\displaystyle O(mn)} のオーダーを持つ演算のセットである[4]。元々の BLAS(Level 1 BLAS)を拡張し1段階抽象度の高い演算セットとして提案された[5]

行列の種類を示す記号には GE (GEneral matrix)、HE (HErmitian matrix)、SY (SYmmetric matrix)、TR (TRiangular matrix) などがある[6]。演算を示す記号には MV (matrix-vector product)、 R (Rank-one update)、 R2 (Rank-two update)、 SV (solving a system of linear equations) がある[7]
GEMV

一般行列ベクトル積(: general matrix vector products; GEMV)は一般行列(GE)を用いた行列ベクトル積(MV)である[8]。すなわち次の演算である( A {\displaystyle A} はGeneral Matrix)。

y ← α A x + β y {\displaystyle {\boldsymbol {y}}\leftarrow \alpha A{\boldsymbol {x}}+\beta {\boldsymbol {y}}\!}
Level 3

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

C ← α A B + β C {\displaystyle C\leftarrow \alpha AB+\beta C\!}

また、 B ← α T − 1 B {\displaystyle B\leftarrow \alpha T^{-1}B} を三角行列 T {\displaystyle T} について解く演算なども含まれる。このレベルにはよく使われる汎用行列乗算(GEMM)操作が含まれる。
API

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

各行列の変換フラグ・次元・係数・アクセスオフセットを引数に取り、行列積和演算を実行、演算結果がCへ書き出される。Trans = "N" 。"T" 。"C"T = float32 。float64 。complexdef _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である[9]。疎行列は格納形式と演算実装を工夫することで高効率の計算が可能である。Sparse BLAS はこの用途に特化した実装をもつBLASである。疎行列を示す記号には Sp (Sparse) が用いられる。
SpMV

疎行列ベクトル積(: sparse matrix vector products; SpMV)は疎行列(Sp)を用いた行列ベクトル積(MV)である[10]。すなわち次の演算である( A {\displaystyle A} は Sparse Matrix)。

y ← α A x + β y {\displaystyle {\boldsymbol {y}}\leftarrow \alpha A{\boldsymbol {x}}+\beta {\boldsymbol {y}}\!}
PBLAS

PBLASは、コンピュータ・クラスター並列計算)向けの並列BLAS(Parallel Basic Linear Algebra Subprograms)[11]MPI などの上で動作する BLACS を通信プロトコルとして利用する。
実装

BLAS演算は多数の積和演算からなる。またLevel 2およびLevel 3ではベクトル・行列を扱う。ゆえに計算機におけるBLAS実装ではSIMD命令をもちいた最適化が可能である。利用される命令とその特性は命令セットアーキテクチャにより異なり、またメモリ等の実行環境によっても最適設定は異なる。その結果、特定CPUに特化したBLAS実装や実行時に環境へのチューニングをおこなうBLASなど、異なる特性をもつ様々なBLAS実装が存在する。
特定のデバイスに限定していない汎用の実装
reference BLAS
netlib による公式リファレンス実装C言語版とFORTRAN版がある。
BLAS++
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 で動作。
ハードウェアベンダーによる、特定のデバイス向けの実装
Accelerate

Apple による macOS および iOS 向けフレームワーク。ARMIntel CorePowerPC 向けに最適化された BLAS と LAPACK を含む。
AMD Optimizing CPU Libraries (AOCL)
AMD の CPU (EPYC, Ryzen, Ryzen Threadripper) 上のLinuxWindowsをサポート。
Arm Performance Libraries
ARM64上のLinuxで動作。
cuBLAS
NVIDIA CUDA SDK には、NVIDIA の GPU 上で動作するBLAS機能(C言語インタフェース)が含まれる。
Engineering and Scientific Subroutine Library (ESSL)
IBMによる実装。POWER上のAIXおよびLinuxで動作。
Intel oneAPI Math Kernel Library
インテルによる実装。インテルの CPU および GPU をサポート。Linux/Windows/macOS で動作。
MathKeisan
日本電気による実装。NEC SX上のSUPER-UXと、Itanium上のLinuxをサポート。
Oracle Developer Studio Performance Library
SPARCx86-64 上の Oracle Solaris と Linux で動作する BLAS および LAPACK 実装。旧称Sun Performance Library。
rocBLAS
AMD の GPU 向けのオープンソース実装。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:33 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef