開発元 | The University of Tennessee and The University of Tennessee Research Foundation, The University of California Berkeley, The University of Colorado Denver[1] |
---|---|
初版 | 1992年2月29日 |
最新版 |
3.12.0
/ 2023年11月24日[2] |
リポジトリ |
github |
プログラミング 言語 | Fortran 90、C言語 |
種別 | 数値線形代数 |
ライセンス | 三条項BSDライセンス |
公式サイト |
www |
LAPACK (Linear Algebra PACKage)は数値線形代数のための数値解析ソフトウェアライブラリで、線型方程式や線型最小二乗問題、固有値問題、特異値問題等を数値的に解くために利用される。本ライブラリは複素数または実数を成分とする行列を扱うことが可能であり、LU分解やコレスキー分解、QR分解、シュア分解等の行列の分解を行うためのサブルーチンを含む。サブルーチンは単精度版と倍精度版が提供される。1992年 のLAPACKの初版はFORTRAN 77 で実装されていたが、現在はFortran 90が用いられている。LAPACK 3.4.0からはC言語インターフェースであるLAPACKEが統合され、C言語やC++からの利用が容易になった。
LAPACKはLINPACKおよびEISPACKの後継と見做されている。ただし、LINPACKの設計が開発当時近代的であった共有メモリ型ベクトルコンピュータを意識したものであるのに対して、本ライブラリの設計はキャッシュを用いたアーキテクチャを有する、より近代的なコンピュータを意識したものである。LAPACKはLINPACK同様にBLAS(Basic Linear Algebra Subprograms、基本線型代数サブプログラム群)ライブラリ上に構築されている。LAPACKは後に分散メモリ型のコンピュータ向けにScaLAPACKやPLAPACKへと拡張された。
Reference LAPACKは三条項BSDライセンスで提供されるオープンソースソフトウェアである。
LAPACKのサブルーチンは以下の三種類に大別される。
LAPACKとBLASのサブルーチンの名称は機能の判別が平易である範囲で短くなるような規則で命名されている。 これは初期のFORTRANにおける関数の名称に関する仕様上の制限を受けたものである。
サブルーチンはpmmaaa
の規則で命名される。
以下、LAPACKのDGESV
(倍精度一般行列の方程式系の求解)とBLASのDGEMM
(倍精度行列の積の計算)を例に挙げる。
p
は通常は一文字の英字で数値データの型を表現するために利用される[注釈 1]。S
とD
はそれぞれ単精度と倍精度の実数を意味し、C
とZ
はそれぞれ単精度と倍精度の複素数を意味する。なお、一文字目を別の文字に置き換えてサブルーチンの名称を記述することがある[注釈 2]。ただし、サブルーチンが採用するアルゴリズムによっては例外が存在することに注意が必要である[注釈 3]。mm
は二文字の英字でサブルーチンが採用するアルゴリズムが想定する行列の型を意味する。行列の型を現す略号は以下に表で示す。サブルーチンが想定する行列データの格納方法は型ごとに異なる。例えば、対角行列を意味するDI
が与えられた場合は対角要素が格納された長さnの配列を、一般行列を意味するGE
が与えられた場合は行列の要素が格納されたn×nの配列という具合いである。aaa
は一文字から三文字の英数字でサブルーチンの処理内容を表現する。例えばSV
は線型方程式系の求解を意味し、MM
は行列の積を意味する。略号 | 説明 |
---|---|
BD | 二重対角行列 |
DI | 対角行列 |
GB | 帯行列 |
GE | 一般行列 |
GG | 一般行列、一般化された問題(一般行列の対) |
GT | 一般三重対角行列 |
HB | エルミート帯行列 |
HE | エルミート行列 |
HG | 上ヘッセンベルグ行列、一般化された問題(ヘッセンベルグ行列と三角行列) |
HP | エルミート行列、圧縮格納形式行列 |
HS | 上ヘッセンベルグ行列 |
OP | 直交行列、圧縮格納形式行列 |
OR | 直交行列 |
PB | 正値対称帯行列 または 正値エルミート帯行列 |
PO | 正値対称行列 または 正値エルミート行列 |
PP | 正値対称行列 または 正値エルミート行列、圧縮格納形式行列 |
PT | 正値対称三重対角行列 または 正値エルミート三重対角行列 |
SB | 対称帯行列 |
SP | 対称行列、圧縮格納形式行列 |
ST | 対称三重対角行列 |
SY | 対称行列 |
TB | 三重対角行列帯行列 |
TG | 三角行列、一般化された問題(三角行列の対) |
TP | 三角行列、圧縮格納形式行列 |
TR | 三角行列(または準三角行列) |
TZ | 台形行列 |
UN | ユニタリ行列 |
UP | ユニタリ行列、圧縮格納形式行列 |
命名規則の詳細はLAPACK Users' Guideの当該項目[3]を参照。
LAPACKにはサブルーチンの機能とインターフェースに互換性のある実装が多く存在する。それぞれの動作環境についてはリンク先を参照。
LAPACKはFortran 90以外のプログラミング言語から利用することが可能であり、これを目的とした言語バインディングのためのライブラリも開発されている。LAPACK 3.4.0よりC言語インターフェースであるLAPACKEが統合された。
以下に例を示す。
多くの処理系ではライブラリのC言語バインディングが可能であるため、いくらかの制約があるにせよLAPACKのサブルーチンをC言語の関数のように利用できる。ただし、Fortranコンパイラが存在しない処理系ではCLAPACKも有効な選択肢となる。なお、Automatically Tuned Linear Algebra Softwareが提供するC言語インターフェース[4]も存在するが、これはf2cのCLAPACKとは互換性が無い。
C言語では慣用のrow-major orderingな行列を計算させる場合、LAPACKEでは指定オプションが用意されている。その場合、内部で行列転置が行われオーバヘッドが発生する。例えば行列積は、内部の計算は下記のように行われる。ここで「」はBLAS/LAPACK本来のcolumn-major orderingな行列積を意味している。