万人のためのハイパフォーマンスコンピューティング

HPC Do It Yourself Club

      HOMEE5-2600v3製品情報お役立ち情報購入案内お問い合わせ会社案内
      ムービーダウンロードドキュメント最新トピックスおもしろLinkHPCノウハウ

4 Node FDR Infiniband Cluster性能評価
OpenMPIとOpenMPのHybrid実行でのMustオプション
OpenMPIで別ノードの環境変数をセットするには

E5-2600シリーズはNUMA、NUMAで性能を出すには

その4: MPIなら性能が出る

 前回の記事では、OpenMPで16CPUの並列計算をしたとき、numactl -i all を使うことで計算速度が上がることを説明しました。OpenMPでは使用されるメモリーは一塊になっており、デフォールトでは最初に使用されたノードにローカルなメモリーが割り当てられます。従って、16CPUの並列計算では8CPUはローカルメモリー、8CPUはリモートメモリーを使うことになります。全CPUがローカルメモリーを使うことは不可能です。しかし、使用されるメモリーの塊を細かくスライスして、そのスライスの最初ををノード0、次をノード1に、その次をノード0に、その次をノード1に、というように繰り返して割り当てていけば、どのCPUも使用する約半分はローカルメモリー、残り約半分はリモートメモリーとすることができます。これがnumactl -i allで実現されるメモリー割り当てです。これを使うことで速くなったとはいえ、折衷案という感は否めません。全てのCPUがローカルメモリーだけを使って計算することはできないのでしょうか。それが出来れば、もっと速く計算できるのでは、とは、誰しもが当然思うことでしょう。
 この回答がMPIです。MPIはローカルメモリだけを使って計算することが可能です。今回は、MPIでの並列計算を姫野ベンチで試します。
 姫野ベンチは、Fortran90+MPIをダウンロードし、コンパイルします。
$ mpif90 -O3 -xHost -ipo himenoBMTxpr.f90 -o mpi_himeno
 mpirun -npで使用するコア数を16に指定し、実行します。
$ mpirun -np 16 ./mpi_himeno
 配列のサイズはOpenMPと同じXLとします。
 結果は、MFLOPS: 34492.48となりました。
 前回、OpenMPでinterleaveを使い16コアの計算を実行した結果がMFLOPS: 22608.07でした。MPIは、OpenMPよりもかなり速い計算結果となっています。
 ここで、実行の状態を見てみます。
 まず、OpenMPで計算したときです。

 上のように、プログラムは1つだけ動いていることが分かります。OpenMPでは、1個のプログラムの中に16のスレッドができ、16のCPUを使って計算しています。
 では、MPIで計算したときはどうなっているでしょうか。

 OpenMPとは違い、16個のプログラムが動いていることが分かります。MPIでは、-npで指定した数だけプログラムが同時に動き、プログラム間で通信をしながら計算を進めていきます。1つのプログラムでは、1個のCPUしか使いません。そのため、必ずローカルメモリを使うことができます。
 ローカルメモリとリモートメモリを使って計算するしかないOpenMPに対して、MPIはローカルメモリだけを使って計算できるため、計算速度は大幅に上がります。

(次回に続く)


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Copyright (C) HPCシステムズ株式会社. All Rights Reserved.