Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@inv_Koyama

大規模行列の固有値計算:ARPACK-ng+ARPACKPP

はじめに

目下の悩みである固有値計算のライブラリについて、
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秒程度なので、今の最低限の実用には耐えうるか。
そもそもこんな扱いにくい行列の使用が不可避な現状を改善するほうが早いかもしれない…。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?