インテル® MKL 2020 デベロッパー・ガイド

インテル® Distribution for LINPACK Benchmark のヘテロジニアス・サポート

インテル® Distribution for LINPACK Benchmark は、ノード間で行列データを不均等に配置することによりヘテロジニアスをサポートしています。ヘテロジニアス係数を制御するコマンドライン・パラメーター f は、より強力なノードに割り当てる作業の量を指定し、コマンドライン・パラメーター c はより速いノードのプロセス列の数を制御します。

./xhpl –n <問題サイズ> –b <ブロックサイズ> –p <グリッドの行の次元> –q <グリッドの列の次元> –f <ヘテロジニアス係数> –c <より速いプロセッサー列の数>

2.5 の場合、約 2.5 倍の作業がより強力なノードに配置されます。すべてのノードのメモリー量が同じ場合、より強力なノードに多くの作業を配置すると、ほかのノードで多くのメモリーが未使用になることがあります。クラスターに多くの異なる種類のノードが含まれる場合、複数のヘテロジニアス係数を使用します。

PQ をプロセッサー・グリッド (PxQ) の行数と列数として、ピボットやパネル分解のような縦方向の演算では操作は同期されるため、作業は各プロセッサー列内で「ホモジニアス」でなければなりません。2 つの異なる種類のノードがある場合、MPI を利用して最初により速いノードをすべて処理します。HPL.dat の "PMAP process mapping" (9 行目) が 1 (列優先マッピング) に設定されていることを確認してください。プロセス列内ではすべてのノードが同じでなければならないため、より速いノードの数は常に P の倍数にする必要があります。c コマンドライン・パラメーターでプロセス列の数 C を設定することで、より速いノードを指定することができます。-f 1.0 –c 0 を設定すると、デフォルトのホモジニアス動作に戻ります。

ヘテロジニアス実行の問題サイズ N の選択方法を理解するには、最初にホモジニアス・システムを考えて、N を次のように選択します。

N ~= sqrt(メモリー使用量 * P * Q * メモリーサイズ (バイト) / 8)

メモリー使用量は、ホモジニアスなインテル® Xeon® プロセッサー・システムでは通常、約 0.8 です。ヘテロジニアス・システムでは、同じノードのセットごとに N に異なる式を適用してから、すべてのセットの最小の N を選択することもできます。1 つのホモジニアス係数 F で、そのホモジニアス係数のグループのプロセッサー列の数 (Q の合計) が C と等しいクラスターを仮定すると、このグループには P*C ノード含まれます。最初に、S =F*P*C + P*(Q-C) を計算します。ホモジニアス・システムでは、S=P*QF=1、C=Q になります。N は次のようになります。

N ~= sqrt(メモリー使用量 * P * Q * ((F*P*C)/S) * メモリーサイズ (バイト) / 8)

あるいは、sqrt(F*P*C)/S) にしてホモジニアス・システムの N の値を小さくします。

クラスターに 100 のノードがあり、各ノードのメモリーが 64GB で、20 ノードがほかの 80 ノードよりも 2.7 倍速いとします。ノードごとに 1 つの MPI プロセスを実行します (全部で 100 プロセス)。正方形のプロセッサー・グリッド P=Q=10 を仮定して、より速いノードを均等に分割します。通常、HPL ドキュメントではメモリーの 80% を利用する行列サイズを選択することを推奨しています。N が行列サイズの場合、行列は 8N^2/(P*Q) バイトのメモリーを使います。ホモジニアス実行は次のようになります。

./xhpl –n 820000 –b 256 –p 10 –q 10

行列を再配置してヘテロジニアスなインテル® Distribution for LINPACK Benchmark を実行すれば、より速いノードを活用することができます。一部のノードにはほかのノードの 2.7 倍のデータが含まれるため、(より速いノードのメモリーが 2.7 倍にならないのであれば) 問題サイズを小さくする必要があります。合計メモリーサイズは、0.8*64GB*100 ではなく、0.8*64GB*20 + 0.8*64GB/2.7*80 (元のサイズの半分未満) になります。したがって、問題サイズは 526000 になります。P=10 で 20 のより速いノードがあるため、2 つのプロセッサー列がより高速になります。最初にこれらのノードにアプリケーションを送るように MPI を設定するには、コマンドラインで次のように指定します。

./xhpl –n 526000 –b 1024 –p 10 –q 10 –f 2.7 –c 2

m パラメーターはすべてのノードが同じ量のデータであると仮定して問題サイズを計算するため、ヘテロジニアス計算では注意が必要です。

警告

より速いノードの数は C*P になります。より速いノードの数が P で割り切れない場合、より速いノードに多くの作業を割り当ててパフォーマンスを向上させることはできません。

1 つのヘテロジニアス係数のみ必要な場合、f および c コマンドライン・パラメーターを指定するだけで十分ですが、複数のヘテロジニアス係数をサポートするには、HPL.dat に行を追加する必要があります。上記の例 (2 つのプロセッサー列に 2.7 倍高速なノードがある場合) では、f および c コマンドライン・パラメーターを指定する代わりに、HPL.dat の最後に次の 2 行を追加します。

1         number of heterogeneous factors
0 1 2.7   [start_column, stop_column, heterogeneous factor for that range]

プロセッサー列の番号は 0 から始まります。開始および停止番号は 0 から Q-1 (包括的) の範囲です。

クラスター上に 3 つの異なる種類のノードがあり、少なくとも 2 つのヘテロジニアス係数が必要な場合、上記の最初の行の数を 1 から 2 に変更し、開始列、停止列、ヘテロジニアス係数を指定する 2 行を追加します。

HPL.dat にヘテロジニアス・サポートのパラメーターを指定する場合、最も強力なノードに注目します。ヘテロジニアス係数を大きくすると、パフォーマンスの観点からはクラスターのバランスが良くなりますが、メモリーの観点からはバランスが悪くなることがあります。パフォーマンスのバランスを優先するとメモリーに大きな影響を与えることがあります。その場合、より速いノードに対する (ブロックサイズなどの) 値を減らしてください。間違った値を設定するとパフォーマンスが大幅に低下する可能性があるため、HPL.dat の値を変更するときは十分に注意してください。

ヘテロジニアス・クラスターをチューニングする場合、すぐにヘテロジニアス実行を行うのではなく、次の操作を行ってください。

  1. クラスターを複数のホモジニアス・クラスターに分割します。

  2. パフォーマンスのバランスがとれるようにヘテロジニアスを調整します。例えば、2 つの異なるセットのノードがあり、一方がほかのノードの 3 倍強力である場合、その強力なノードで 3 倍の作業を行います。

  3. 各部分で実行できる (ノードあたりの) 問題サイズを決定します。

  4. ノードあたりこれらの問題サイズで、そしてヘテロジニアス実行に必要なブロックサイズでホモジニアス実行を行い、最適なパラメーターを調べます。

  5. これらのパラメーターを最初のホモジニアス実行に使用します。

最適化に関する注意事項

インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。

注意事項の改訂 #20110804