行列演算ライブラリ 各パッケージ概要とインストール手順

行列演算ライブラリをいくつか導入してみたのでメモ。

BLAS(ATLAS): Fortranで実装された行列の基本演算ライブラリ

  • BLAS(Basic Linear Algebra Subprograms): ベクトルと行列の基本演算ライブラリ。
  • ATLAS(Automatically Tuned Linear Algebra Software): CPUなどの計算期環境を自動的に判定し、BLASを最適チューンしてコンパイルしてくれるパッケージ。

BLASの機能は以下の3レベルに分類される。(Ref. Basic Linear Algebra Subprograms - Wikipedia)

  1. ベクトル-ベクトル演算
  2. マトリックス-ベクトル演算
  3. マトリックス-マトリックス演算

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
$: gcc dgesv_sample.c -O2 -Wall -L/usr/local/lib -lclapack -lcblaswr -lf2c -L/usr/lib/atlas -lblas
$: gcc match_pump.c -O2 -Wall -L/usr/local/lib -lclapack -lcblaswr -lf2c -L/usr/lib/atlas -lblas
CPPLAPACK: BLASおよびLAPACKC++クラスラッパー
  • インストール: 展開して includeディレクトリ以下のヘッダファイルを移すだけ。
$: tar zxvf cpplapack.tar.gz
$: sudo cp -r cpplapack/include /usr/local/include/cpplapack

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

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

MaTX: フリーで使えるmatlab-likeなプログラミング言語

  • インストール: 展開して/usr/localなどに移すだけ。
  • 雑感
    • インタプリタとしても使えるし、コンパイルもできる。
    • 個人的には、名前つき定数とか名前空間とか欲しい。
    • フリーなのは素晴らしいが、利用しているコミュニティが狭すぎる。matlabにはtoolboxを開発しているThirdPartyが多く存在するが、MaTXにはない。
  • 参考ページ