LAPACKだと引数が色々と面倒なので、線形代数を使う場合に使えそうなライブラリを比較した。
ライブラリ | LAPACKとの関係 | 線形代数ラッパーとしての役割 | 得意な分野 | 長所 | 短所 |
---|---|---|---|---|---|
Eigen | デフォルトではLAPACK非依存(必要に応じて統合可能) | 線形代数全般をカバー(独自実装が多い) | 小規模~中規模行列、固有値計算、テンソル計算 | – 独自の高性能テンプレート実装 – シンプルな記法 – 動的・固定サイズ両方に対応 – LAPACK統合可能 | – 大規模行列や並列処理でIntel MKLほどの性能が出ない場合がある |
Armadillo | 完全にLAPACK/BLAS依存(内部で利用) | LAPACK/BLASをラップし、MATLABライクな記法を提供 | 行列計算、統計、信号処理 | – 簡潔で直感的な記法 – LAPACK/BLASを利用した効率的な分解や固有値計算 – 動的サイズに強い | – 高次元テンソルのサポートが弱い – 固有値計算などでEigenに劣る場合がある |
Boost uBLAS | LAPACKと統合可能(ユーザーが手動でリンク) | ベクトル・行列演算の基本的操作をラップ | 小規模行列計算、Boostライブラリの統合 | – Boost環境とのシームレスな統合 – 基本的な線形代数操作が簡単 – ヘッダーオンリー | – 性能が他ライブラリ(Eigen, Armadillo)に劣る – LAPACK利用時の設定が必要 |
Intel MKL | LAPACK/BLASの最適化された実装(完全互換) | LAPACKの高性能実装として機能 | 大規模行列計算、並列処理 | – 並列処理対応 – 高性能なBLAS/LAPACK – Intelプロセッサ向け最適化 | – セットアップが複雑 – 商用ライセンスが必要な場合がある |
OpenBLAS | LAPACK/BLASのオープンソース実装 | LAPACKそのものを提供 | ベクトル化された行列計算 | – 無料で利用可能 – 高性能で広範なプラットフォーム対応 – 他のライブラリと組み合わせ可能 | – 低レベルインターフェース – 他の高レベルラッパー(Eigen, Armadillo)ほど使いやすくない |
SciPy (Python) | Python環境でのLAPACKラッパー(NumPyと統合) | LAPACKの全機能をPythonから利用 | プロトタイピング、小規模行列計算 | – 簡単なインターフェース – Pythonの豊富なエコシステムとの統合 | – C++環境では利用できない – 極端に大規模な行列計算には向かない |
固有値などの数値計算でそこまで大きいサイズの行列を扱わないのであれば、Eigenが良さそう。
コメント