Intel Math Kernel Libraryでの大規模疎行列の直接解法<実践>

MKLは普通にLAPACKが使えるのだが、なぜか直接解法ソルバであるPARDISOがデフォルトで使用できる。LAPACKの普通のLU分解とは違い、PARDISOはマルチフロンタル法による高速化、グラフ理論に基づくfill inの削減(metisを使用している?)が行われている。数十万次元くらいの定常解析なら十分実用可能ではないかと期待している。

PARDISOは下記の公式ページにマニュアルがおいてある。サンプルコードを見ればサブルーチンpardisoの使い方がわかるはず。
PARDISO 5.0.0 Solver Project

サブルーチンの引数などは下記をみればだいたいわかるので、正直余裕すぎて書くことがない…と、思っていたが、なぜかプログラムが動かない。サンプルコードは動くが、それをモジュール化して自分のコードに組み込むとセグメンテーション違反が生じる。

仕方ないので調べたところ、/opt/intel/mkl/exampleにpardisoのサンプルコードが入っているらしい。
PARDISO 使用時のヒント | iSUS

確認したところ、公式のサンプルコードと内容が微妙に違う!頭を抱えつつMKLのサンプルを自分のコードにコピペして実行すると、正常に動作することを確認。理不尽。intel MKLのバージョンは2016だけど、PARDISOのバージョンは多少古いのかもしれない。