1. inv_Koyama

    Posted

    inv_Koyama
Changes in title
+大規模行列の固有値解析:ARPACK-ng+ARPACKPP
Changes in tags
Changes in body
Source | HTML | Preview

はじめに

目下の悩みである固有値計算のライブラリについて、
implicitly Restarted Arnordi法を用いているARPACK-ngと、
そのC++ラッパーであるARPACKPPを試してみたので、
intelコンパイラを使用してのインストール手順をまとめておく。

謝辞

情報提供
@septcolor さん

理論

下記が一番わかりやすい。
http://www.cms-initiative.jp/ja/events/0627yamamoto.pdf
固有値計算に関する日本語の教科書だと、下記は知る限り記述が明瞭でとっつきやすいが、
さすがにimplicitly restartedのくだりに関する記述はなかった。
https://www.iwanami.co.jp/book/b258658.html

ARPACK-ng

ubuntu環境であればlibarpack2がaptでインストールできるが、
local環境に入れたいので、ソースコードからコンパイルした。

下記よりダウンロード。
git clone https://github.com/opencollab/arpack-ng.git

cmakeもしくはccmakeにてコンパイル。intelコンパイラを用いたが特に問題なし。
intelコンパイラをデフォルト設定でインストールしているなら、
intel MKLのLAPACKとBLASを自動で検知するので、その他のライブラリのインストールは不要。

ARPACKPP

下記よりダウンロード。
git clone https://github.com/m-reuter/arpackpp.git

ARPACKCPPはテンプレートライブラリでありコンパイルは不要。
includeディレクトリを適当な場所に置き、下記にてexampleが実行可能であることを確認した。

icpc example.cpp -I/arpackppDir/include -L/arpackDir/lib/ -mkl -larpack -lifcore

g++,gfortranの場合は-lifcoreの代わりに-lgfortranを使用すれば問題ないかと。

4スレッド並列計算にて、10000自由度の密行列にかかる時間が10秒程度なので、今の最低限の実用には耐えうるか。
そもそもこんな扱いにくい行列の使用が不可避な現状を改善するほうが早いかもしれない…。