» www.Giftbox.Az - Bir birindən gözəl hədiyyə satışı
ウィキペディアランダム
毎日カテゴリ
共有: WhatsappFacebookTwitterVK

LAPACK

LAPACK (Linear Algebra PACKage) 数値線形代数のための数値解析ソフトウェアライブラリで、線型方程式線型最小二乗問題固有値問題特異値問題等を数値的に解くために利用される。本ライブラリは複素数または実数を成分とする行列を扱うことが可能であり、LU分解コレスキー分解QR分解シュア分解等の行列の分解を行うためのサブルーチンを含む。サブルーチンは単精度版と倍精度版が提供される。1992年 (1992)のLAPACKの初版は(FORTRAN 77) で実装されていたが、現在は(Fortran 90)が用いられている。LAPACK 3.4.0からはC言語インターフェースであるLAPACKEが統合され、C言語やからの利用が容易になった。

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は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(倍精度行列の積の計算)を例に挙げる。

  • pは通常は一文字の英字で数値データの型を表現するために利用される[注釈 1]SDはそれぞれ単精度と倍精度の実数を意味し、CZはそれぞれ単精度と倍精度の複素数を意味する。なお、一文字目を別の文字に置き換えてサブルーチンの名称を記述することがある[注釈 2]。ただし、サブルーチンが採用するアルゴリズムによっては例外が存在することに注意が必要である[注釈 3]
  • mmは二文字の英字でサブルーチンが採用するアルゴリズムが想定する行列の型を意味する。行列の型を現す略号は以下に表で示す。サブルーチンが想定する行列データの格納方法は型ごとに異なる。例えば、対角行列を意味するDIが与えられた場合は対角要素が格納された長さnの配列を、一般行列を意味するGEが与えられた場合は行列の要素が格納されたn×nの配列という具合いである。
  • aaaは一文字から三文字の英数字でサブルーチンの処理内容を表現する。例えばSVは線型方程式系の求解を意味し、MMは行列の積を意味する。
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の当該項目[注釈 4]を参照。

実装

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

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

LAPACKと言語バインディング

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

以下に例を示す。

  • LAPACK95: Fortran 95用。インターフェースが簡略化される。
  • CLAPACK: C言語用。Fortran版を(f2c)(英語版)によって変換したもの。
  • LAPACKE: C言語用。インテルのMath Kernel Library互換のC言語インターフェース。
  • LAPACK++: 用。
  • Armadillo: 用。
  • CPPLAPACK: 用。
  • Boost Numeric Bindings: 用。
  • SciPy: Python用。
  • jlapack: Java用。
  • CSLapack: C#用。
  • Linalg: Ruby用。
  • LACAML: OCaml用。
  • hmatrix: Haskell用。
  • Accelerateフレームワーク: Objective-C用インターフェースが提供される。
  • Gonum: LAPACK and BLAS in Native Go

C言語

多くの処理系ではライブラリのC言語バインディングが可能であるため、いくらかの制約があるにせよLAPACKのサブルーチンをC言語の関数のように利用できる。ただし、Fortranコンパイラが存在しない処理系ではCLAPACKも有効な選択肢となる。なお、(Automatically Tuned Linear Algebra Software)(英語版)が提供するC言語インターフェース[注釈 5]も存在するが、これは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]を参照。
  4. ^ LAPACK Users' Guide, Naming scheme
  5. ^ ATLAS ANSI/ISO C LAPACK API REFERENCEを参照。

関連文献

  • E. Anderson, Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, D. Sorensen:”LAPACK Users' Guide (Software, Environments and Tools)”、SIAM、(ISBN 978-0898714470)(1987年1月1日)。
  • 村田健郎、J.J.ドンガラ、小国力、三好 俊郎、長谷川 秀彦:「行列計算ソフトウェア―WS、スーパーコン、並列計算機」、丸善、(ISBN 978-4621036549)(1991年12月)。
  • 小国力:「LAPACK利用の手引―行列計算パッケージ」、丸善、(ISBN 978-4621040768)(1995年7月)。
  • 幸谷智紀:「LAPACK/BLAS入門」、森北出版、(ISBN 978-4627848818)(2016年12月16日)。

関連項目

外部リンク

  • LAPACK Users' Guide 公式サイトのマニュアル
  • LAWNs (LAPACK Working Notes) LAPACKの実装に関する文献集
  • LAPACKサンプルプログラム集 NAGによるサンプルプログラム集
  • PLASMA Parallel Linear Algebra for Scalable Multi-core Architectures、BLAS上に構築された(ホモジニアスマルチコア)向けの線型計算ライブラリ
  • CULA NVIDIACUDA対応GPU上で動作する線型計算ライブラリ
  • MAGMA Matrix Algebra on GPU and Multicore Architectures、LAPACKのサブセットでマルチコアCPUGPUのハイブリッドアーキテクチャ向け
  • The MPACK; Multiple precision arithmetic BLAS and LAPACK 多倍長精度版のBLAS/LAPACK
  • 「BLAS,LAPACK チュートリアル」 MPACKの開発者によるチュートリアル
    • パート1 (簡単な使い方とプログラミング)
    • パート2 (GPU編)
ウィキペディア、ウィキ、本、library、論文、読んだ、ダウンロード、自由、無料ダウンロード、mp3、video、mp4、3gp、 jpg、jpeg、gif、png、画像、音楽、歌、映画、本、ゲーム、ゲーム。