| 初回リリース | 1992年 |
|---|---|
| 安定版リリース | 3.12.0 [1]
/ 2023年11月24日 |
| リポジトリ |
|
| 書かれた | フォートラン90 |
| タイプ | ソフトウェアライブラリ |
| ライセンス | BSD-新 |
| Webサイト | 詳しくはこちら |
LAPACK ("線形代数パッケージ") は、数値線形代数の標準ソフトウェアライブラリです。線形方程式と線形最小二乗法、固有値問題、特異値分解のシステムを解決するためのルーチンを提供します。また、LU 分解、QR 分解、コレスキー分解、シューア分解などの関連する行列分解を実装するためのルーチンも含まれています。[2] LAPACK はもともとFORTRAN 77で書かれていましたが、バージョン 3.2 (2008) でFortran 90に移行しました。 [3]ルーチンは、単精度と倍精度の両方で実数と複素数の両方の行列を処理します。LAPACK は、ルーチンの効率的で移植可能な計算ビルディング ブロックを提供するために、基礎となるBLAS実装に依存しています。[2] : "移植性の鍵としての BLAS"
LAPACK は、 LINPACKの線形方程式と線形最小二乗ルーチン、およびEISPACKの固有値ルーチンの後継として設計されました。1970年代から 1980 年代に書かれたLINPACKは、当時の最新式のベクトル コンピュータで共有メモリを使用して実行するように設計されました。対照的に、LAPACK は、最新のキャッシュ ベース アーキテクチャのキャッシュと最新のスーパースカラー プロセッサの命令レベルの並列性を効果的に活用するように設計されており、[2] : 「パフォーマンスに影響を与える要因」 そのため、適切に調整されたBLAS実装があれば、そのようなマシンで LINPACK よりも桁違いに高速に実行できます。[2] : 「移植性の鍵となる BLAS」 LAPACK は、 ScaLAPACKや PLAPACKなどの後のパッケージで、分散メモリシステムで実行できるように拡張されました。[4]
Netlib LAPACKは、3条項BSDスタイルライセンス、つまり制限の少ない寛容なフリーソフトウェアライセンスに基づいてライセンスされています。[5]
命名規則
LAPACK のサブルーチンには、識別子を非常にコンパクトにする命名規則があります。これは、最初のFortran標準では 6 文字までの識別子しかサポートされていなかったため、この制限に収まるように名前を短くする必要があったため必要でした。[2] : 「命名規則」
LAPACK サブルーチン名の形式はpmmaaa次のとおりです。
pは、使用される数値定数の型を表す 1 文字のコードです。S、はそれぞれ単精度と倍精度の実数浮動小数点演算Dを表し、と はそれぞれ単精度と倍精度の複素数演算を表します。 新しいバージョンの LAPACK95 では、データ型を明示的に指定する必要性を解消するために汎用サブルーチンを使用しています。CZmmは、アルゴリズムが期待する行列の種類を表す 2 文字のコードです。さまざまな種類の行列のコードは以下に示します。実際のデータは、特定の種類に応じて異なる形式で保存されます。たとえば、コードDIが指定されている場合、サブルーチンは対角要素を含む長さのベクトルを期待しますnが、コードGEが指定されている場合、サブルーチンは行列のエントリを含むn × n配列を期待します。aaaは、サブルーチンに実装されている実際のアルゴリズムを記述する 1 ~ 3 文字のコードです。たとえば、は線形システムをSV解くサブルーチンを表し、はランク 1 更新を表します。R
例えば、実倍精度演算を使用して一般(非構造化)行列を持つ線形システムを解くサブルーチンは、と呼ばれますDGESV。[2] :「線形方程式」
他のプログラミング言語やライブラリと併用する
今日の多くのプログラミング環境は、Cバインディング(標準化されたCインターフェースであるLAPACKE [6] はバージョン3.4.0 [7]以降LAPACKの一部となっている)を備えたライブラリの使用をサポートしており、いくつかの制限を守ればLAPACKルーチンを直接使用することができる。さらに、 R [8] 、MATLAB [9]、SciPy [10]など、科学計算や数値計算のための他の多くのソフトウェアライブラリやツールがLAPACK上に構築されている。
いくつかの代替言語バインディングも利用可能です:
- C++用Armadillo
- C++ 用IT++
- C++ 用LAPACK++
- OCaml用の Lacaml
- Python用SciPy
- Goの Gonum
- Perl データ言語の PDL::LinearAlgebra
- Perl用の Math::Lapack
- .NET用 NLapack
- 組み込みシステムにおけるCの CControl
- 錆び止め用ラパック
実装
BLAS と同様に、LAPACK は特定のシステムでより優れたパフォーマンスを提供するためにフォークまたは書き換えられることがあります。実装の一部を以下に示します。
- 加速する
- AppleのmacOSとiOS向けのフレームワークで、 BLASとLAPACKの調整バージョンが含まれています。[11] [12]
- ネットライブラリ LAPACK
- 公式LAPACK。
- Netlibスキャラパック
- PBLAS上に構築されたスケーラブルな (マルチコア) LAPACK 。
- インテルMKL
- Intel の x86 CPU 用の Math ルーチン。
- オープンBLAS
- BLAS と LAPACK のオープンソースの再実装。
- ゴナム LAPACK
- 部分的なネイティブGo実装。
LAPACK は通常、計算の大部分を実行するために基礎となる BLAS ルーチンを呼び出すため、より適切に調整された BLAS 実装にリンクするだけで、パフォーマンスを大幅に向上させることができます。その結果、LAPACK は BLAS ほど頻繁に再実装されることはありません。
類似プロジェクト
これらのプロジェクトは LAPACK と同様の機能を提供しますが、主なインターフェースは LAPACK とは異なります。
- リブフレーム
- 密な線形代数ライブラリ。LAPACK互換のラッパーを持つ。BLASで使用できるが、BLISが推奨される実装である。[13]
- アイゲン
- 線形代数のヘッダー ライブラリ。互換性のために BLAS と部分的な LAPACK 実装を備えています。
- マグマ
- Matrix Algebra on GPU and Multicore Architectures (MAGMA) プロジェクトは、LAPACK に似た高密度線形代数ライブラリを開発しますが、GPGPUで加速されたマルチコア システムを含む異種およびハイブリッド アーキテクチャ向けです。
- プラズマ
- スケーラブルなマルチコアアーキテクチャのための並列線形代数(PLASMA)プロジェクトは、マルチコアアーキテクチャ向けのLAPACKの現代的な代替品です。PLASMAは、非同期操作の開発のためのソフトウェアフレームワークであり、依存関係を有向非巡回グラフで表現する任意のコードに使用できるQUARKと呼ばれるランタイムスケジューラを使用した順序外スケジューリング機能を備えています。[14]
参照
- 数値ライブラリのリスト
- 数学カーネルライブラリ(MKL)
- NAG 数値計算ライブラリ
- SLATEC、数学および統計ルーチンの FORTRAN 77 ライブラリ
- QUADPACK、数値積分用の FORTRAN 77 ライブラリ
参考文献
- ^ “リリース 3.12.0”. 2023年11月24日. 2023年12月19日閲覧。
- ^ abcdef アンダーソン、E.;バイ、Z.ビショフ、C.ブラックフォード、S.デメル、J.ドンガラ、J. ;デュ・クロス、J.グリーンバウム、A .ハマーリング、S.マッケニー、A.ソレンセン、D. (1999)。 LAPACK ユーザーガイド (第 3 版)。ペンシルバニア州フィラデルフィア: 工業および応用数学協会。ISBN 0-89871-447-8. 2022年5月28日閲覧。
- ^ 「LAPACK 3.2 リリースノート」。2008 年 11 月 16 日。
- ^ 「PLAPACK: 並列線形代数パッケージ」www.cs.utexas.edu。テキサス大学オースティン校。2007年6月12日。 2017年4月20日閲覧。
- ^ “LICENSE.txt”. Netlib . 2022年5月28日閲覧。
- ^ 「LAPACK への LAPACKE C インターフェース」。LAPACK — 線形代数パッケージ。2024 年 9 月 22 日閲覧。
- ^ "LAPACK 3.4.0". LAPACK — 線形代数パッケージ. 2024年9月22日閲覧。
- ^ 「R: LAPACK ライブラリ」. stat.ethz.ch . 2022年3月19日閲覧。
- ^ 「MATLAB の LAPACK」。Mathworksヘルプ センター。2022年5 月 28 日閲覧。
- ^ 「低レベル LAPACK 関数」。SciPy v1.8.1 マニュアル。2022年5 月 28 日閲覧。
- ^ 「ガイドとサンプルコード」。developer.apple.com 。 2017年7月7日閲覧。
- ^ 「ガイドとサンプルコード」。developer.apple.com 。 2017年7月7日閲覧。
- ^ 「amd/libflame: DLA計算用の高性能オブジェクトベースライブラリ」。GitHub。AMD。2020年8月25日。
- ^ “ICL”. icl.eecs.utk.edu . 2017年7月7日閲覧。
