PARDISOの利用
PARDISOとは
構造、流体など、数値解析されている方の多くは、 連立一次方程式(Ax = b)を解く、ということをされているかと思います。
さらに、そのソルバー部分がプログラムのボトルネックになっている方も多いのではないでしょうか。
そのソルバー部分をPARDISOに入れ替えることで、プログラムの高速化が期待できます。
PARDISOはスイスのバーゼル大学(Universität Basel)で開発され、提供されている疎行列連立一次方程式の直接法ソルバーで、 Parallel Sparse Direct Solver の略です。
PARDISOはインテル®マス・カーネル・ライブラリー (インテル®MKL)にも含まれており、 次のような特徴があります。
- 実数または複素数、対称、構造対称または非対称、正定値、不定値またはエルミートの行列に対応
- Fortran、C/C++から利用可能
- 高速で、メモリー効率が良い
- 共有メモリ型のプロセッサーでの並列計算に対応し、並列化効率がよい
Intelコンパイラをご利用の方でも、PARDISOをご存じでない方が意外と多いという印象があるのですが、 せっかくコンパイラに高性能なソルバーが付いていますので、 是非試して頂きたいと思います。
特に、メモリ節約のために工夫してあるプログラムなど、 代々受け継いできた古いコードをお使いの方は、想像以上の効果を得られることもあります。
実際、弊社でPARDISOの組み込みをさせて頂いたケースでは、 元の直接法ソルバーに対して、数倍から数十倍の高速化となっています。
下記は、ご紹介できるPARDISOの導入事例になります。
PARDISOの組み込み
- PARDISOの利用の仕方は、インテル
®
- マス・カーネル・ライブラリ・リファレンス・マニュアルにもあるように、
Fortran:
call pardiso(pt, maxfct, mnum, mtype, phase, n, a, ia, ja,
perm, nrhs, iparm, msglvl, b, x, error)
call pardiso(pt, maxfct, mnum, mtype, phase, n, a, ia, ja,
perm, nrhs, iparm, msglvl, b, x, error)
C/C++:
pardiso(pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja,
perm, &nrhs, iparm, &msglvl, b, x, &error);
pardiso(pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja,
perm, &nrhs, iparm, &msglvl, b, x, &error);
- と、引数が多く、特に行列・ベクトル情報以外の部分で何を渡していいかお困りではないでしょうか。
- また、行列の格納形式が異なる、あるいは行列自体を保持していないプログラムをお使いの方は PARDISO で用いられる CRS(Compressed Row Storage) 形式での行列を作成する必要があります。
- これらの理由で、なかなかうまく PARDISO を組み込めない、あるいは時間が取れないといった方が多いのではないかと思います。
- 弊社では、そのような方のために、プログラムのソルバー部分を PARDISO に入れ替えるサービスも行っておりますので、お気軽に
- 。
- 必要であれば、ソルバー以外の並列化やチューニングもいたします。
高速化・並列化サービス カタログ高速化・並列化サービスのカタログです。 ( PDF形式, 全4ページ, 849KB )
OpenMPを用いた Fortranコードの並列化基礎セミナー 一部資料OpenMPを用いた Fortranコードの並列化基礎セミナーの一部資料です。 ( PDF形式, 全32ページ, 2.26MB )
続きの資料、デモプログラムをご希望の方は、お気軽にお問い合わせください。高速化・並列化事例01早稲田大学草鹿研究室と共同で行った、流体と化学反応の連成解析コードの並列化に関する資料です。 ( PDF形式, 全4ページ, 439KB )