Intel(R) Math Kernel Library の使い方メモ

インテルのFortran Composer XEなんたらとかいうやつでコンパイラをインストールすると、 一緒にデバッガとMKL(Math Kernel Library)というライブラリがついてきます。 大規模行列の固有値・固有ベクトルをガリガリと計算するのに最近このMKLを使ってみたので、 (はじめはゼロから組んでたなぁ。Householder変換とか。) 忘れないうちに使い方をメモ。

ライブラリをはじめて使ってみて、リンクやらコンパイルオプションやらがややこしいなぁと感じたのだけれど、 MKLには Intal(R) Math Kernel Library Link Line Advisor なる便利なものがあって、 マウスでポチポチやると必要なリンクコマンドとコンパイルオプションを吐き出してくれます。 簡単。

でまぁこれに従ってMakefileを書けばいっちょ上がりなわけですが、 面倒くさい場合はコンパイルオプションには -mkl とだけ書いておけばいいらしい(シリアルコードだけ?要確認)。

一方リンクは、今回僕が使ったのはLAPACKのFortran95インターフェースだったわけですが、 結果だけ書いてしまうと、

$(MKLROOT)/lib/intel64/libmkl_lapack95_lp64.a

を加えておけばOK。MKLROOT変数は mklvars.sh で設定してるはず。

あとは実際にプログラムの中に

use lapack95
implicit none
・・・
call geev(matrix, eigenvalues, vr=righteigenvectors)

とかなんとか書いておけば無事MKL付属のLAPACKが使えるようになってしあわせ。 自分で書くより数段速く計算が終わってしあわせ。

ついでに書くと、Ubuntuのデフォルトだとスタックサイズが8MBだかなんだかになってるので、

$ ulimit -s unlimited

とか .bashrc に書いとくと大きい行列を確保してもセグフォにならなくてもっとしあわせ。