バーゼル大学 (UB: Universität Basel) からリリースされた PARDISO* 4.0 は、インテル® マス・カーネル・ライブラリー (インテル® MKL) 10.3 以前の PARDISO と下位互換性がないため、インテル® MKL で利用可能な PARDISO の実装とは一部の API の互換性がありません。この記事では、2 つのインターフェイスの相違点を、インターフェイス、機能、エラーの面から表にまとめています。ここでは、UB PARDISO* (http://pardiso-project.org/) とインテル® MKL PARDISO のオンライン・ドキュメントのみを基に比較した結果を紹介しています。
この記事には、次の内容が含まれます。
- 表 1 – 外部関数の相違点
- 表 2 – UB PARDISO* 4.0 以上およびインテル® MKL 10.3 以上でサポートされている機能
- 表 3 – iparm の入出力値の説明
- 表 4 – 出力エラーの相違点
IA-64 システムの場合: インテル® MKL 10.3 は、IA-64 ベースのシステムをサポートしていません。IA-64 システムを使用している場合は、インテル® MKL 10.3 と同じ機能 (ただし、入力データにおけるゼロベースの配列インデックスのサポートは除く) を備えたインテル® MKL 10.2.7 をお使いください。 |
表 1: インターフェイスの相違点
機能の説明 | UB PARDISO* | MKL PARDISO |
---|---|---|
メインルーチン、 C および Fortran インターフェイス | C: PARDISO (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error, &dparm); double dparm [64]; Fortran: pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error ,dparm) REAL*8 dparm(64) dparm は UB 4.0.0 以上に追加 | C: PARDISO (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error); Fortran: pardiso (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error) |
DSS インターフェイス (一般的な機能を提供する単純な PARDISO インターフェイス) |
サポートされていません。 |
C、Fortran: dss_create(handle, opt ); dss_define_structure(handle, opt, rowIndex, nRows, nCols, columns, nNonZeros); dss_reorder(handle, opt, perm); dss_factor_real(handle, opt, rValues ); dss_factor_complex(handle, opt, cValues); dss_solve_real(handle, opt, rRhsValues, nRhs, rSolValues); dss_solve_complex(handle, opt, cRhsValues, nRhs, cSolValues); dss_delete(handle, opt); dss_statistics(handle, opt, statArr, retValues); mkl_cvt_to_null_terminated_str (destStr, destLen, srcStr); インテル® MKL 10.3 以上で実装 |
ILP64 サポート (すべての整数データは integer*8 として定義される) |
サポートされていません。 |
C: pardiso_64 (pt, &maxfct, &mnum, &mtype, &phase, &n, a, ia, ja, &perm, &nrhs, iparm, &msglvl, b, x, &error); Fortran: pardiso_64 (pt, maxfct, mnum, mtype, phase, n, a, ia, ja, perm, nrhs, iparm, msglvl, b, x, error) インテル® MKL 10.3 以上で実装 |
外部関数による PARDISO 環境の制御 |
サポートされていません。 |
pardiso_setenv(); pardiso_getenv(); インテル® MKL 10.3 以上で実装 |
PARDISO の初期ステップでのデフォルト値の設定 | pardisoinit(pt, mtype, solver, iparm, dparm, error); UB PARDISO* 4.0.0 以上で実装 | pardisoinit(pt, mtype, iparm); インテル® MKL 10.3 Update 5 以上で実装 |
ユーザーデータの確認と PARDISO 統計の出力 | pardiso_chkmatrix() pardiso_chkvec() pardiso_printstats() UB 4.1.2 以上で実装 | サポートされていません。 インテル® MKL 10.3 以上で iparm スイッチによる行列チェッカーを実装 |
表 2: UB PARDISO 4.0.0 以上およびインテル® MKL 10.3 以上で統合された機能
機能名 | UB PARDISO* 4.0.0 以上 | MKL PARDISO (インテル® MKL 10.3 以上) |
---|---|---|
ILP64 サポート (すべての整数データは integer*8 として定義される) により、大規模な線形代数方程式の解を算出 | サポートされていません。 | サポートされています。 |
転置/共役行列で表される問題の解の算出 | サポートされています。 | インテル® MKL 10.3 Update 5 以上でサポートされています。 |
2 段階の並列因数分解 | サポートされています。UB PARDISO 4.1.2 以上では完全にサポートされています。 | サポートされています。 |
並列に解を算出 | サポートされています。 | インテル® MKL 10.3 Update 5 以上でサポートされています。 |
順方向/逆方向算出の分割 | (iparm(26) で) サポートされています。 | (phase=331,332,333 で) サポートされています。 |
入力データにおけるゼロベースの配列インデックスのサポート | サポートされていません。 | サポートされています (10.2.6 を除く)。 |
スーパーノードのサイズの制御 | サポートされています。 | サポートされていません。 |
右辺と解がスパースの場合の部分解 | 右辺 (rhs) と解がスパースの場合のみサポートされています。 | サポートされています。 多くのオプションを利用できます:右辺 (rhs) と解がスパースの場合、rhs がスパースで解が密の場合、rhs が密で解がスパースの場合 (インテル® MKL 10.3 Update 3 以上)。 |
PARDISO のクラスターサポート | 対称不定値行列のサポート (UB PARDISO* 4.1.2 以上) |
サポートされていません。 |
PARDISO のアウトオブコア・サポート(ハードディスクを使用して RAM に収まらない大規模行列で表された問題の解を算出) |
サポートされていません。 |
サポートされています。 |
再帰的反復線形ソルバー | サポートされています。 | サポートされていません。代わりに、OOC モードを使用してください。 |
実対称不定値行列の行列式 | サポートされています。 | サポートされていません。 |
プロセッサー数に関係なく解が同じになる | サポートされています。 | サポートされていません。 |
ユーザーにより入力された行列の正当性チェック | 追加の関数によりサポートされています (UB PARDISO* 4.1.2 以上)。 | iparm(27) スイッチによりサポートされています。 |
表 3: IPARM の入出力値の相違点
C/Fortran の iparm の入力値 | UB PARDISO* 4.0.0 以上 | MKL PARDISO (インテル® MKL 10.3 以上) |
---|---|---|
iparm[1]/iparm(2) | =0、最小次数アルゴリズムが適用されます。 =2、入れ子アルゴリズムが適用されます。 | =0、最小次数アルゴリズムが適用されます。 =2、入れ子アルゴリズムが適用されます。 =3、並列入れ子アルゴリズムが適用されます。 |
iparm[2]/iparm(3) | プロセッサー数。 | 使用されていません (計算スレッド数の設定には、MKL 環境変数 MKL_NUM_THREADS が使用されます)。 |
iparm[11]/iparm(12) | =0、Ax=b の解を算出します。 =1、ATx=b の解を算出します。 | =0、Ax=b の解を算出します。 =1、ATx=b の解を算出します。 =2、A*x=b の解を算出します。 (インテル® MKL 10.3 Update 5 以上) |
iparm[16]/iparm(17) | 因数分解と解のフェーズで必要なメモリー。フェーズ 22 の後に返されます。 | 因数分解と解のフェーズで必要なメモリー。フェーズ 22 の後に返されます。 注: インテル® MKL 10.3 Update 5 以上では、このパラメーターはフェーズ 11 で計算され、利用できるようになります。 |
iparm[23]/iparm(24) | = 0、PARDISO は 1 レベルの因数分解アルゴリズムを使用します。 = 1、PARDISO は 2 レベルの因数分解アルゴリズムを使用します。 デフォルト値。 | = 0、PARDISO は 1 レベルの因数分解アルゴリズムを使用します。デフォルト値。 = 1、PARDISO は 2 レベルの因数分解アルゴリズムを使用します。 |
iparm[24]/iparm(25) | = 0、PARDISO は解の算出ステップに並列アルゴリズムを使用します。デフォルト値。 = 1、PARDISO は順方向、逆方向にシーケンシャルに解を算出します。 | = 0、PARDISO は解の算出ステップに並列アルゴリズムを使用します。 = 1、PARDISO は順方向、逆方向にシーケンシャルに解を算出します。デフォルト値。 注: インテル® MKL 10.3 Update 5 以上で実装。 |
iparm[25]/iparm(26) | 解の算出ステップを分割します。 | 使用されていません (解の算出ステップの分割は phase=331,332,333 で使われています)。 |
iparm[26]/iparm(27) | 使用されていません (UB PARDISO* 4.1.2 以上で外部関数 pardiso_chkmtrx による行列チェッカーを実装)。 | = 0、行列チェッカーは無効にされています。 = 1、行列チェッカーは有効にされています。 |
iparm[27]/iparm(28) | = 0、METIS* 再配置の逐次バージョンが使用されます。 = 1、METIS* 再配置の並列バージョンが使用されます。 | = 0、PARDISO の倍精度バージョンが使用されます。 = 1、PARDISO の単精度バージョンが使用されます。 注: METIS* 再配置の逐次/並列バージョンは iparm[1]/iparm(2) により制御されます。 |
iparm[28]/iparm(29) | = 0、因数分解の 64 ビット・バージョンが使用されます。 = 1、因数分解の 32 ビット・バージョンが使用されます。 | 使用されていません。 注: インテル® MKL PARDISO の単精度/倍精度バージョンは iparm[27]/iparm(28) により制御されます。このバージョンが、UB PARDISO* の因数分解の 32 ビット/64 ビット・バージョンの代わりに使用されます。 |
iparm[29]/iparm(30) | PARDISO のスーパーノードの最大サイズを制御する入力パラメーター。 | ゼロ/負のピボットの数を返す出力パラメーター。 |
iparm[30]/iparm(31) | = 0、Ax=b の部分解の算出を無効にします。デフォルト値。 = 1、右辺はスパースであると仮定され、perm[i-1]/perm(i)=1 は右辺の i 番目のコンポーネントがゼロ以外であることを示し、解ベクトルのこのコンポーネントが計算されます。 | = 0、Ax=b の部分解の算出を無効にします。デフォルト値。 = 1、右辺はスパースであると仮定され、perm[i-1]/perm(i)=1 は右辺の i 番目のコンポーネントがゼロ以外であることを示し、解ベクトルのこのコンポーネントが計算されます。 = 2、右辺はスパースであると仮定され、perm[i-1]/perm(i)=1 は右辺の i 番目のコンポーネントがゼロ以外であることを示し、解ベクトルのすべてのコンポーネントが計算されます。 = 3、右辺は任意の型です。perm[i-1]/perm(i)=1 の場合、解ベクトルの i 番目のコンポーネントが計算されます (オプション 3 はインテル® MKL 10.3 Update 3 以上でサポートされています)。 |
iparm[31]/iparm(32) | =0、再帰反復アルゴリズムは無効にされています。=1、再帰反復アルゴリズムは有効にされています。 | 使用されていません。 |
iparm[32]/iparm(33) | 入力: =1、実対称不定値行列の行列式を計算し、その結果を dparm(33)/ dparm[32] で返します。出力: パラメーターは、実対称不定値行列の行列式の自然対数を返します。 | 使用されていません。 |
iparm[33]/iparm(34) | = 0、プロセッサー数に関係なく同じ解を算出するオプションは無効にされています。 = 1、プロセッサー数に関係なく同じ解を算出するオプションは有効にされています。 | 使用されていません。 |
iparm[34]/iparm(35) | 使用されていません。 | = 0、1 ベースの配列インデックス。列と行のインデックスは ia、ja、perm は 1 から始まります。 デフォルト値。 = 1、ゼロベースの配列インデックス。列と行のインデックスは ia、ja、perm は 0 から始まります。 |
iparm[50]/iparm(51) | 並列分散メモリーソルバーを使用します。 | 使用されていません。 |
iparm[51]/iparm(52) | 並列分散メモリーソルバーの計算ノード数。 | 使用されていません。 |
iparm[59]/iparm(60) | 使用されていません。 | = 0、インコア PARDISO が使用されます。 = 1、行列の因数を格納するのに必要なメモリーの合計が環境変数 MKL_PARDISO_OOC_MAX_CORE_SIZE と MKL_PARDISO_OOC_MAX_SWAP_SIZE の合計よりも小さい場合、インコア PARDISO が使用されます。そうでない場合、アウトオブコア (OOC) PARDISO が使用されます。 = 2、アウトオブコア (OOC) PARDISO が使用されます。OOC PARDISO は、行列の因数をディスク上のファイルに保存することで、非常に大きな問題を解くことができます。そのため、OOC PARDISO では RAM の使用量が大幅に軽減されます。 |
iparm[60]/iparm(61) | 使用されていません。 | 解析および因数分解フェーズのピークメモリー総量を返す出力パラメーター。 インテル® MKL 10.3 Update 5 以上では使用されていません。 |
iparm[61]/iparm(62) | 使用されていません。 | 解析および因数分解フェーズで消費された倍精度のメモリー総量を返す出力パラメーター。 インテル® MKL 10.3 Update 5 以上では使用されていません。 |
iparm[62]/iparm(63) | 使用されていません。 | OOC PARDISO で内部浮動小数点配列に必要な最小メモリー量を返す出力パラメーター。このパラメーターはフェーズ 1 で計算されます。 |
表 4: 出力されるエラー値の相違点
エラー値 | UB PARDISO* | インテル® MKL PARDISO |
---|---|---|
-9 | 使用されていません。 | OOC に必要な十分なメモリーがありません。 |
-10 | ライセンスファイル pardiso.lic が見つかりません。 | OOC 一時ファイルを開けません。 |
-11 | ライセンスが失効しています。 | OOC データファイルの読み取り/書き込みを行うことができません。 |
-12 | ユーザー名またはホスト名が正しくありません。 | 使用されていません。 |
-100 | 反復ソルバーは、クリロフ部分空間反復の最大数に達しました。 | 使用されていません。 |
-101 | 25 回のクリロフ部分空間反復では十分に収束していません。 | 使用されていません。 |
-102 | クリロフ部分空間反復のエラーです。 | 使用されていません。 |
-103 | クリロフ部分空間反復で問題が発生しました。 | 使用されていません。 |
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。