PARDISO 使用時のヒント

インテル® oneMKL

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Tips for using PARDISO」(http://software.intel.com/en-us/articles/pardiso-tips/) の日本語参考訳です。


はじめに

インテル® マス・カーネル・ライブラリー (インテル® MKL) の PARDISO ソルバーのインターフェイスには多くの引数があり、使用法を習得するには時間がかかります。PARDISO の DSS インターフェイスは、機能に対する単純なインターフェイスを提供するために作成されたにもかかわらず、PARDISO インターフェイスの使用を続けているユーザーは少なくありません。この記事では、DSS インターフェイスの使用を開始するにあたってのヒントと、初心者がよく起こす (場合によっては熟練者も起こす) ミスを回避する方法について説明します。

全般的なヒント

サンプルの確認: インテル® マス・カーネル・ライブラリー (インテル® MKL) の examples/solver ディレクトリーに含まれている、解く問題に最も近いサンプルプログラムを選択することで、適切な引数の設定を参考にできます。

行列チェッカーの使用: PARDISO の iparm(27) の引数は入力チェッカーを制御します。デフォルトでは、この引数はオフ (iparm(27)=0) に設定されているため、オン (iparm(27)=1) にして使用してください。PARDISO はデータ構造に関するチェックを行い、誤りを見つけた場合はエラーメッセージを返します。このエラーメッセージを確認することで、問題を特定して、PARDISO が行列を表現および格納する方法 (例えば、対称行列は三角形式で格納) について正しく理解することができます。

リンク行の確認: プログラムが (特定のスレッディング・ランタイムを仮定する) 間違ったスレッドレイヤーやインターフェイス (例えば、ILP64 ではなく LP64、cdecl ではなく stdcall) にリンクされたために、動作がおかしくなる (クラッシュ、ハングアップ、その他) ことがあります。インテル® MKL の最新バージョンを使用している場合は、リンク・アドバイザー を使用することを推奨します。以前のバージョンを使用している場合は、『インテル® MKL ユーザーズガイド』の第 5 章を参照してください。

重要な設定

引数の完全なリストは、リファレンス・マニュアル (http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/mkl/refman/index.htm) または PARDISO 引数表 (http://software.intel.com/en-us/articles/pardiso-parameter-table/) に記載されています。初めて使用する場合や予期しない結果が引き起こされる場合は、以下の設定を知っておくと便利です。

メッセージレベル情報の使用: ソルバーは、入力引数が msglvl=1 の場合は統計情報を画面に出力します。msglvl=0 の場合は何も出力しません。このオプションのデフォルト値はありません。

単精度と倍精度: インテル® MKL は、10.2 から単精度の計算と倍精度の計算をサポートしています。単精度モードと倍精度モードを切り替えるには、iparm(28) を使用します。デフォルトモード (iparm(28)=0) の場合、内部の計算はすべて倍精度で行われます。iparm(28)=1 の場合、内部の計算はすべて単精度で行われます。

デフォルト値の使用: iparm 配列の各要素にデフォルト値を使用できます。iparm(1)=0 に設定すると、PARDISO は配列の残り (iparm(2) および iparm(4) ~ iparm(64)) にデフォルト値が使用されます。iparm(1)=0 に設定しない場合、iparm 配列の値をすべて設定する必要があります。

解の書き換え: 出力される解を配列 b の右側に格納する必要がある場合、iparm(6)=1 を選択します。
デフォルト値 (iparm(6)=0) の場合、解は配列 x に格納されます。

バージョン (インコアまたはアウトコア) の選択: (メモリーのサイズを超える) 非常に大規模な問題を解く必要がある場合は、iparm(60)=2 に設定して、アウトオブコア PARDISO を使用します。このオプションについての詳細は、http://software.intel.com/en-us/articles/how-to-use-ooc-pardiso/ を参照してください。

パフォーマンスに関する推奨事項

最高のパフォーマンスを得るため、小行列にアウトオブコア (OOC) PARDISO を使用することは推奨しません。PARDISO 要素の格納に必要なメモリーがシステムメモリーの 30% 未満の場合は、インコア PARDISO を使用することを推奨します。フェーズ 11 の後に iparm(17) を使用してサイズ (KB 単位) を取得できます (『インテル® MKL リファレンス・マニュアル』を参照)。

その他の情報

問題が解決しない場合や、インテル® MKL の問題点を見つけたと思われる場合は、インテル® MKL のナレッジベース (http://software.intel.com/en-us/articles/intel-mkl-kb/all/1/) で既知の問題点 (http://software.intel.com/en-us/articles/known-limitations-in-intel-mkl-10-2/) を確認してください。あるいはインテル® MKL フォーラム (http://software.intel.com/en-us/forums/intel-math-kernel-library/) で同様の問題が報告されていないか検索してください。詳細は、http://software.intel.com/en-us/articles/intel-mkl-sparse-solvers-training-material/ を参照してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました