LoginSignup
5
5

More than 3 years have passed since last update.

LAPACK/BLAS など行列計算系ライブラリのメモ(C/C++ から使う用)

Last updated at Posted at 2020-03-21

背景

  • C/C++ アプリで行列計算をする必要がある(e.g. SVD など).
    • 主に点群レジストレーション
  • Eigen でもいいが, 計算が速くなるなら専用のライブラリを使うのも検討したい.
    • しかしなるべくクロスプラットフォームで, OSS(non-copyleft)がよくて, アーキテクチャや OS 依存は避けたい.
  • 数値計算界隈はよくわからない

基礎知識

なんとなくの理解です. 基本は BLAS と LAPACK を押さえておけばよさそう.

  • BLAS : 基本となる行列計算ルーチン
  • LAPACK : SVD とか行列計算アルゴリズムが実装されている. BLAS を使っている. 通常 C/C++ アプリではだたい LAPACK の API を呼び出すのが多い... はず

基本 API は変わらない(fortran 時代)まま, みなさん BLAS/LAPACK を使っているようです(みんな昔から使っているので, あとから変えるのが難しいというのもありそう).

コードベース(source repo)はいろいろ派生があってわかりずらいです.

ライブラリのまとめ

C++ 行列ライブラリ

  • Eigen : LAPACK/BLAS を使うオプションがある. https://eigen.tuxfamily.org/dox/TopicUsingBlasLapack.html
    • MPL or GPL なのでちょっとライセンスが微妙(Eigen のコードをいじらなければ MPL で実質 MIT/BSD 系として使えはする)
  • arnmadillo : http://arma.sourceforge.net/ ビルドに LAPACK/BLAS は必須. 疎行列の superlu, ARPACK は optional
    • Apache 2.0 ライセンスなのがよい.
  • blaze: https://bitbucket.org/blaze-lib/blaze/src/master/ BSD ライセンスでよい.
    • Eigen のように基本テンプレートでヘッダオンリー.
    • 自前(?)で疎行列も実装しているっぽい
    • C++14 or later にはなるが, 機能一通りあり, 開発結構アクティブである, 今後の本命かも

疎行列専用ライブラリ

疎行列ライブラリはさらにいろいろあってよくわからない.

とりあえずは suitesparse と, superlu を押さえておけばよいか?

suitesparse はライセンスが混在していてつらい :cry:

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5