LAPA
CK (Linear Algebra PA
CKage) は、線形方程式、最小二乗問題、固有値問題、特異値問題といった線形代数計算を高速かつ効率的に実行するための数値解析
ソフトウェアライブラリです。
実数、
複素数の
行列演算に対応し、LU分解、コレスキー分解、QR分解、シュア分解といった様々な
行列分解アルゴリズムを提供しています。単精度版と倍精度版の
サブルーチンが用意されており、幅広い計算ニーズに対応可能です。
LAPACKの設計と歴史
LAPA
CKは、以前の線形代数ライブラリであるLINPA
CKとEISPA
CKの後継として開発されました。LINPA
CKが共有メモリ型ベクトルコンピュータを前提としていたのに対し、LAPA
CKはキャッシュメモリを持つ現代的なコンピュータアーキテクチャを考慮した設計となっています。 基本線形代数サブプログラム(BLAS)の上に構築されており、そのパフォーマンスを最大限に活用しています。さらに、分散メモリ型コンピュータ向けのScaLAPA
CKやPLAPA
CKといった拡張版も存在します。当初はFORTRAN 77で実装されていましたが、現在はFORTRAN 90が使用されており、LAPA
CK 3.4.0からは
C言語インターフェースであるLAPA
CKEが統合され、
C言語や
C++からの利用が容易になりました。
LAPA
CKの
サブルーチンは、主に以下の3種類に分類されます。
1.
ドライバルーチン (driver routines): 線形方程式系の求解、固有値問題の求解など、特定の線形代数問題を直接解くためのルーチンです。利用者のニーズに合致するドライバルーチンがあれば、それを利用するのが最も簡単で効率的です。
2.
計算ルーチン (computational routines): 行列のLU分解、
対称[[行列]]の三重
対角化など、問題解決に必要な個々の計算タスクを実行するルーチンです。ドライバルーチンは、これらの計算ルーチンを組み合わせて問題を解きます。利用可能なドライバルーチンがない場合は、計算ルーチンを組み合わせて自分でアルゴリズムを実装する必要があります。
3.
補助ルーチン (auxiliary routines): ブロックアルゴリズム内部で使用される計算タスクや、BLAS機能の拡張などを提供するルーチンです。
LAPACKの命名規則
LAPA
CKとBLASの
サブルーチンの名前は、機能を分かりやすく表現しつつ、短く簡潔になるように設計されています。これは、初期のFORTRANにおける関数名に関する制約を反映したものです。一般的に`pmmaaa`という形式で命名され、それぞれの文字列は以下のような意味を持ちます。
`p`: データ型を表す文字(`S`:単精度実数、`D`:倍精度実数、`C`:単精度複素数、`Z`:倍精度複素数)
`mm`:
行列の種類を表す2文字の略語(`GE`:一般
行列、`SY`:
対称[[行列]]、`HE`:エルミート
行列など)
`aaa`: サブルーチンの処理内容を表す1~3文字の英数字(`SV`:線形方程式系の求解、`MM`:行列の積など)
詳細な命名規則は、LAPACK Users' Guideを参照してください。
LAPACKの実装
LAPACKには、様々なプラットフォームやデバイスに対応した複数の実装が存在します。
汎用実装: Netlibによる公式
リファレンス実装、OpenBLASなど、様々なOSやアーキテクチャで動作する実装。
*
特定デバイス向け実装: AppleのAccelerateフレームワーク、AMDのAO
CL-LAPA
CK、ARMのArm Performance Libraries、
NVIDIAのcuSOLVER、IntelのoneAPI Math Kernel Libraryなど、特定のハードウェアを最適化したもの。
LAPACKと言語バインディング
LAPA
CKはFORTRAN以外にも様々なプログラミング言語から利用可能です。様々な言語バインディングライブラリが開発されており、FORTRAN 95対応のLAPA
CK95、
C言語対応の
CLAPA
CKやLAPA
CKE、
C++対応のLAPA
CK++、Armadillo、
CPPLAPA
CK、
Python対応のSciPyなどがあります。
特に、
C言語については多くの処理系でライブラリの
C言語バインディングが提供されているため、Fortranコンパイラがなくても利用できます。ただし、慣習的なrow-major ordering(行優先)の
行列を扱う場合、LAPA
CKEでは内部で
行列転置が必要となりオーバーヘッドが発生することがあります。
関連文献
LAPA
CKに関する参考文献としては、LAPA
CK Users' Guideを始め、様々な書籍や論文が公開されています。これらは、LAPA
CKの使用方法や内部アルゴリズムの詳細を理解するのに役立ちます。
まとめ
LAPA
CKは、高度な線形代数計算を効率的に実行するための強力なツールです。その高いパフォーマンスと幅広いプラットフォーム/言語サポートから、科学技術計算、機械学習など様々な分野で広く利用されています。将来的には、より高度な並列計算技術や量子コンピューティングへの対応も期待されます。