インテル® ディストリビューションの LINPACK ベンチマークは、ノード間で行列データを不均等に配置することにより異種 (ヘテロジニアス) をサポートしています。異種係数を制御するコマンドライン・パラメーター f は、より強力なノードに割り当てるワークの量を指定し、コマンドライン・パラメーター c はより速いノードのプロセス列の数を制御します。
xhpl.exe –n <問題サイズ> –b <ブロックサイズ> –p <グリッドの行の次元> –q <グリッドの列の次元> –f <ヘテロジニアス係数> –c <より速いプロセッサー列の数>
異種 (ヘテロジニアス) 係数が 2.5 の場合、より強力なノードで約 2.5 倍のワークが費やされることになります。すべてのノードのメモリー容量が同じであれば、より強力なノードで多くのワークを実行すればするほど、他のノードで無駄になるメモリーが増える可能性があります。クラスターにさまざまな種類のノードが含まれている場合、複数の異種要素が必要になることがあります。
P と Q をプロセッサー・グリッド (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*Q、F=1、および C=Q になります。N は、
N ~= sqrt(メモリー使用量 * P * Q * メモリーサイズ (バイト) / 8)
あるいは、sqrt(F*P*C/S) にして同種システムの N の値を小さくします。
クラスターに 100 個のノードがあり、各ノードに 64 GB のメモリーがあり、そのうち 20 個のノードのパフォーマンスが他の 80 個のノードの 2.7 倍であるとします。ノードごとに 1 つの MPI プロセスを実行します (全部で 100 プロセス)。正方形のプロセッサー・グリッド P=Q=10 を仮定して、より速いノードを均等に分割します。通常、HPL ドキュメントでは、使用可能なメモリーの 80% を消費する行列サイズを選択することを推奨しています。N が行列サイズの場合、行列は 8N^2/(P*Q) バイトのメモリーを使います。同種実行は次のようになります。
xhpl.exe –n 820000 –b 256 –p 10 –q 10
行列を再配置して異種なインテル® ディストリビューションの LINPACK ベンチマークを実行すれば、より速いノードを活用することができます。しかし、一部のノードに他のノードの 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.exe –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 の値を慎重に試してください。
異種クラスターをチューニングする場合、すぐに異種実行を行うのではなく、次の操作を行ってください。
クラスターを複数の同種クラスターに分割します。
パフォーマンスのバランスがとれるように異種を調整します。たとえば、2 つの異なるノードセットがあり、一方が他方の 3 倍の性能を持っている場合、3 倍のワークを実行する必要があります。
各部分で実行できる問題のおよそのサイズ (ノードあたり) を把握します。
ノードあたりこれらの問題サイズで、そして異種実行に必要なブロックサイズで同種実行を行い、最適なパラメーターを調べます。
これらのパラメーターを最初の同種実行に使用します。
製品および性能に関する情報 |
|---|
性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。 改訂 #20201201 |