Gmm++ドキュメント

Gmm++のダウンロード

スタンドアロンのGmm++ライブラリの最終版の安定リリースは, download GetFEMのページ.

What is Gmm++

Gmm++ は 疎,密,スカイライン 行列用の汎用C++テンプレートライブラリである.これは,任意のインターフェイスベクトル型または行列型に対する汎用アルゴリズム(積, 和, コピー, 部分行列, 密および疎ソルバー...)の集合です. 複数のベクトル型と行列型の協調を可能にする接着ライブラリとして見ることができます. しかし,基本的な疎,密,スカイライン行列/ベクトル型はGmm++に組み込まれているので, スタンドアロン線形代数ライブラリとして 使用することができます. ベクトル型または行列型のインターフェイスとは,"linalg_traits"と呼ばれる "traits" オブジェクトを記述することを意味します.このライブラリには, 定義済みの密,疎,およびスカイライン行列型が用意されています.

目標は,行列計算のための事前定義された方法の一般的で, 適応可能で,使いやすいフレームワークを作ることです. ベクトル型または行列型がインタフェースされている場合(つまり, linalg_traitsが一杯になっています.),すべての汎用アルゴリズムがそれに対して動作します. しかし,効率上の理由から,いくつかの汎用アルゴリズムを特殊化することは常に可能(で簡単)です.i 主要な汎用アルゴリズム は次のとおりです.

  • その他の汎用コマンドの集合(クリア,クリーン, スカラー積,スケール,ノルム, ...)
  • 形式の混在が可能なベクトル-ベクトルの追加 (疎,密,スカイライン)
  • 任意の形式の行列-ベクトル乗算.
  • フォーマットの混在が可能な行列行列積 (疎,密,スカイライン,行優先,列優先,...)
  • 疎行列(ILUTILUTPILDLT,...)のための前処理行列を持つ一般線形ソルバ (cgbicgstagqmrgmres ...).一部はITL (最終的に修正・最適化される)からのインポートで,一部は新しいものです.
  • 読取りまたは書込み操作用の疎の密またはスカイラインの行列の部分行列(部分インターバル,部分スライス, または部分インデックス付き)への参照.
  • 密行列のLUおよびQR分解.
  • 密行列の固有値計算.

Gmm++の構造は,主にMTLから着想を得ています.主な 違いは,より簡単な使用法,既存の行列型のためのインターフェイスとしての構築,任意の行列型のためのサブマトリクスです.効率は同程度である(例えば http://grh.mur.at/misc/sparselib_benchmark/を参照).

注:パフォーマンス上の理由から,LAPACKまたはATLASのインターフェイスは 密行列用に用意されています.documentation (ベンチマークを作成する場合は, 少なくとも-O3で最適化コンパイラオプションを使用することを忘れずに, -dNDEBUGによるチェックを無効にしてください.) を参照.

SuperLU 3.0 (疎行列直接ソルバー)への小さなインタフェイスも, 疎行列に対し提案されています.

Gmm++をQDで テストしました. QDを リンクする方法についてはドキュメントを参照してください. これはGmm++が合理的な任意精度の浮動小数点ライブラリで 動作することを意味します.​ 意味します.

ライセンス

Gmm++はGnu Lesser General Public License, either version 2.1 of the license or any later version の条件の下で 自由に配布されます.

Gmm++への貢献

Gmm++は線形代数の効率的な方法を開発するためのフレームワークを提供します.このライブラリはオープンソースであり,今後もオープンソースである.考えられる拡張の例をいくつか示します.

  • 特定の行列実装のためにそれらを最適化するいくつかのアルゴリズムを特化する.
  • 新しいソルバーと前処理行列.
  • 疎行列の固有値計算.
  • ...

Gmm++ 貢献者

Yves Renard, Julien Pommier, Michel Fournie (Additive Schwarz), Benjamin Schleimer (最小二乗CG).

Gmm++が大いに触発されたMTL-ITLを開発したJeremy G.SiekとLee-Quan Leeの素晴らしい仕事に深く感謝します.

ランダムなテスト手順

汎用プログラミングの問題は,すべての構成が完全にテストされていることを確認することです. これがテストのランダムジェネレータが存在する理由です. これは,いくつかのテスト手順が, ランダムなパラメータ, すなわち, ランダムな基底タイプ(float,double,long double,std::complex<float>,std::complex<double>,dd_real ...)とランダムなサイズと充填で, ランダムな型のベクトル, サブベクトル, 行列または部分行列タイプで呼び出され,mult, add ...のような演算で型を混合する可能性をすべてテストすることを意味します.

Gmm++のディストリビューション上で"make check"を実行し, 失敗した場合はバグレポートを送ってください. 新しいテスト手順を送っていただけると助かります.