行列演算ライブラリ 各パッケージ概要とインストール手順
行列演算ライブラリをいくつか導入してみたのでメモ。
BLAS(ATLAS): Fortranで実装された行列の基本演算ライブラリ
- BLAS(Basic Linear Algebra Subprograms): ベクトルと行列の基本演算ライブラリ。
- ATLAS(Automatically Tuned Linear Algebra Software): CPUなどの計算期環境を自動的に判定し、BLASを最適チューンしてコンパイルしてくれるパッケージ。
BLASの機能は以下の3レベルに分類される。(Ref. Basic Linear Algebra Subprograms - Wikipedia)
- インストール: synapticで入る。やったね!野良ビルドしたい場合は、referしたwebページなどを参考に。
- 参考ページ
LAPACK: Fortranで実装された線形代数計算ライブラリ。BLASを利用して計算を行う。
Lapackには、大きく分けて4つの機能がある.
- 連立一次方程式を解く
- 線形の最小2乗問題を解く
- 固有値を求める
- 特異値を求める
- インストール: synapticで入る。やったね!
CLAPACK: F2Cを利用して、LAPACKをCに対応させたもの。
- インストール:以下の手順で、ver3.2.1 を導入。
$: tar zxvf clapack.tgz $: cd CLAPACK $: cp make.inc.example make.inc $: make cblaswrap $: make f2clib $: cd ./TESTING/MATGEN $: make $: cd ../.. $: mv tmglib_LINUX.a libtmglib.a $: cd ../../SRC $: make $: cd .. $: mv lapack_LINUX.a libclapack.a $: sudo cp lib*.a ./F2CLIBS/libf2c.a /usr/local/lib $: sudo cp ./INCLUDE/*.h /usr/local/include
$: gcc dgemm_sample.c -O2 -Wall -L/usr/lib/atlas -lblas -lm -L/usr/local/lib -lf2c
-
-
- 結果: "4.000 8.000 12.000"が4行が表示されれば成功
- 連立一次方程式を解く from http://homepage3.nifty.com/~yonishi/Program/CLapack/Begin/index.html
-
$: gcc dgesv_sample.c -O2 -Wall -L/usr/local/lib -lclapack -lcblaswr -lf2c -L/usr/lib/atlas -lblas
-
-
- 結果: "1.000"が3個と"OK"が表示されれば成功
- 上記2つの組み合わせ from http://homepage3.nifty.com/~yonishi/Program/CLapack/Example/match_pump/index.html
-
$: gcc match_pump.c -O2 -Wall -L/usr/local/lib -lclapack -lcblaswr -lf2c -L/usr/lib/atlas -lblas
-
-
- 結果: ソース本文中に入力した[B]と、計算で解いて出力される[B]とが一致すればOK。
-
- 参考ページ
Blitz: C++で実装されたベクトル/行列演算ライブラリ
- インストール: configureで以下を指定して、後は流れのままに。
- インストール場所
- コンパイラ
$: ./configure --prefix=/usr/local CXX=g++ $: make lib $: make check-testsuite $: make check-examples $: sudo make install
$: g++ matmult.cpp -I/usr/local/include/blitz -lblitz -lm
- 雑感
- 結構メジャーなライブラリらしく、webに落ちてる情報は割と多め。
- 行列indexを表すための型が用意されている点が特徴的か。うまく使えたら便利そう。
- 参考ページ
Eigen: C++で実装されたベクトル/行列演算ライブラリ
- インストール: 展開して Eigenディレクトリ以下のヘッダファイルを移すだけ。(.hついてないけど中身は単なるヘッダファイル)
$: tar zxvf eigen.tar.gz $: cd eigen $: sudo cp -r Eigen /usr/local/include
- テスト: http://eigen.tuxfamily.org/dox/TutorialCore.htmlからてけとーに。
- 雑感
- 行列型の宣言と代入が少し面倒
- 行列の足し算とかの書き方はmatlabっぽい
- 参考ページ
DMatrix: C++行列演算ライブラリ。CLAPACKを利用。
- インストール: Psoptをインストールする経過でライブラリができるので、/usr/local とかに移す。
- CXSparse(sparse行列ライブラリ)とlusol(sparse lu分解ライブラリ)もついでに移す。
- テスト: exampleディレクトリからてけとーに。
g++ ricc.cxx -DLAPACK -DUNIX -DSPARSE -I/usr/local/include/CXSparse -I/usr/local/include/lusol -ldmatrix -L/usr/lib/atlas -llapack -lblas -L/usr/local/lib -lf2c -llusol -lcxsparse -ldl
- 雑感
- 参考ページ