LAPACK
初版 1992年 (1992)
最新版
3.10.0 / 2021年6月28日 (2021-06-28)
リポジトリ https://github.com/Reference-LAPACK/lapack
プログラミング
言語
Fortran 90
種別 数値解析ソフトウェア
ライセンス BSDライセンス
公式サイト Linear Algebra PACKage
テンプレートを表示

LAPACK (Linear Algebra PACKage) 数値線形代数のための数値解析ソフトウェアライブラリで、線型方程式線型最小二乗問題固有値問題特異値問題等を数値的に解くために利用される。本ライブラリは複素数または実数を成分とする行列を扱うことが可能であり、LU分解コレスキー分解QR分解シュア分解等の行列の分解を行うためのサブルーチンを含む。サブルーチンは単精度版と倍精度版が提供される。1992年 (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英語版へと拡張された。

LAPACKはBSDライセンスで提供されるオープンソースソフトウェアである。

サブルーチン

構成

LAPACKのサブルーチンは以下の三種類に大別される。

ドライバルーチン(driver routines)
LAPACKが扱うことが可能な問題を解くためのルーチン。 問題の例として線型方程式系を解く問題や対称行列固有値問題などが挙げられる。利用者の要請に合致する機能のドライバルーチンが存在する場合にはそのルーチンの利用が推奨される。
計算ルーチン(computational routines)
問題を解くために必要な計算タスクを実行するためのルーチン。LAPACKのドライバルーチンは計算ルーチンを連続的に呼び出すことで問題を解く。計算タスクの例として行列をLU分解することや対称行列三重対角行列に変換することなどが挙げられる。前者は線型方程式系を解くために、そして後者は対称行列の固有値問題を解くために必要である。利用者の要請に合致するドライバルーチンが存在しない場合は計算ルーチンを組み合わせて問題を解くことになる。
補助ルーチン(auxiliary routines)
補助的に利用されるルーチン。ブロックアルゴリズム内部で利用される計算タスクの一部を実行するものや、BLASの機能をわずかに拡張したものが含まれる。

命名規則

LAPACKとBLASのサブルーチンの名称は機能の判別が平易である範囲で短くなるような規則で命名されている。 これは初期のFORTRANにおける関数の名称に関する仕様上の制限を受けたものである。

サブルーチンはpmmaaaの規則で命名される。 以下、LAPACKのDGESV(倍精度一般行列の方程式系の求解)とBLASのDGEMM(倍精度行列の積の計算)を例に挙げる。

LAPACKの命名規則における行列の型
略号 説明
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の当該項目[1]を参照。

実装

LAPACKにはサブルーチンの機能とインターフェースに互換性のある実装が多く存在する。

以下に例を示す。それぞれの動作環境についてはリンク先を参照。

LAPACKと言語バインディング

LAPACKはFortran 90以外のプログラミング言語から利用することが可能であり、これを目的とした言語バインディングのためのライブラリも開発されている。LAPACK 3.4.0よりC言語インターフェースであるLAPACKEが統合された。

以下に例を示す。

C言語

多くの処理系ではライブラリのC言語バインディングが可能であるため、いくらかの制約があるにせよLAPACKのサブルーチンをC言語の関数のように利用できる。ただし、Fortranコンパイラが存在しない処理系ではCLAPACKも有効な選択肢となる。なお、Automatically Tuned Linear Algebra Software英語版が提供するC言語インターフェース[2]も存在するが、これはf2cのCLAPACKとは互換性が無い。

C言語では慣用のrow-major orderingな行列を計算させる場合、LAPACKEでは指定オプションが用意されている。その場合、内部で行列転置が行われオーバヘッドが発生する。例えば行列積は、内部の計算は下記のように行われる。ここで「」はBLAS/LAPACK本来のcolumn-major orderingな行列積を意味している。

脚注

[脚注の使い方]

注釈

  1. ^ ただし、LAPACK95のサブルーチンはデータの型を自動判別するためLA_GESVといった名称を持つ。詳細は[1]を参照。
  2. ^ 例えば、インテルのMath Kernel LibraryのリファレンスマニュアルではDGESV?GESVと表記している。
  3. ^ LAPACK 3.1.1のDSGESVは行列の分解を単精度で実行して得た解を反復改良することで倍精度の解を得るためにDSで始まる名称を持つ。詳細は[2]を参照。

出典

  1. ^ LAPACK Users' Guide, Naming scheme
  2. ^ ATLAS ANSI/ISO C LAPACK API REFERENCEを参照。

関連文献

関連項目

外部リンク