ホーム » HPCソリューション » HPCアプリケーション » 計算物理・物性物理・材料・電子構造 » VASP » VASPのtips
VASP のtips
VASPを導入する際、CPUパワーは下げても、インターコネクタの速度はなんとしても確保しろ、というのは、VASPヘビーユーザ ーには当然の亊なのですが、それはなぜでしょう?
「OpenMPIでmpilogを取ろう」で、MPIのトレースやログを取れるOpenMPIへのMPE2の実装を行ないましたが、VASP 5.2.2 のMPIのログを解析してみました。CPUは、X5570 2.93GHz OSはCent5.3です。
使用したINCARは、標準ベンチーマークによく使われるHgを使用しました。ただ、あまりにもサイズが小さいので、 NGX,NGY,NGZを60に、NGXF,NCYF,NGZFを96と倍にしました。
1 node
スレッド同士で、非常に多くの通信が行なわれている亊がよく分ります。ノード間を高速インターコネクタを使わないと、こ れでは、通信がボトルネックになってしまいます。もうすこし詳細に見てみると、
さらに拡大してみると、
どうやら、このだいだい色の部分に時間を取られているようです。
どうやら、MPI_Waitall、つまり、スレッド間の通信での待ち時間のようです。ログを集計してみると、
かなりMPI_Waitallが占める割り合いが多いようです。
VASPのユーザーマニュアルに載っている亊なのですが、多数コアが載っているノードの場合、NPARの値を1から8まで変化させ る亊で、disterの扱いが変化します。
NPARを1にした場合、dister 8node 1groupに、 NPARを2にした場合、dister 4node 2groupに、 NPARを4にした場合、dister 2node 4groupに、 NPARを8にした場合、dister 1node 8group になります。
それでは、NPARを2にした場合を見てみましょう。
かなり異ってきます。詳細に見てみると、
かなり異ります。ログの統計をとってみると、
こんなに違います。
このログを取った場合のelapsed timeを見てみると
- NPAR=1 84.63 sec
- NPAR=2 77.13 sec
大きく異ります。実際のHgのINCARは、NPAR=4で、更にNSIM=4となっています。
この場合のMPIのログを見てみますと、
一見NPAR=1と同じようですが、
固まって、MPI_Waitallが全てのスレッドと通信していません。
ここまできたら、NPAR=8, NSIM=8を見てみましょう。
詳細にみてみると、
まったく異ります。elapse timeをみてみると、
- NPAR=4,NSIM=4 72.18 sec
- NPAR=8,NSIM=8 66.04 sec
それでは、NPARとNSIMを大きくすればいいのか、と単純に考えがちですが、このログを取ったノードは1node 8coreマシンで、 OpenMPIなので、shared memory通信も行なっています。つまり、core間が、可能な限り高速なインターコネクタで接続しているの と、同じ状態という亊です。
VASPのユーザーガイドになるように、ノード内に何コアあり、幾つのノードをどんなインターコネクタで接続してあるかによ って、最適なNPARとNSIMの値は異ります。
| NPAR¥NSIM | 1 | 2 | 4 | 8 |
|---|---|---|---|---|
| 1 | 84.63 | 74.38 | 76.07 | 71.00 |
| 2 | 77.13 | 77.35 | 68.68 | 68.68 |
| 4 | 84.32 | 74.50 | 72.18 | 69.61 |
| 8 | 74.24 | 69.09 | 65.20 | 66.04 |
同じノード内でも、上の表は、X5570で、メモリ帯域が大きい為、CPU内部のcore同士の通信速度と同じ位、shared memory通信 による別のCPU同士の通信の速度がですが、core2世代のE5472を同じバイナリでテストした場合は、NPARとNSIMによるelapsed time(sec)は以下のようになります。
| NPAR¥NSIM | 1 | 2 | 4 | 8 |
|---|---|---|---|---|
| 1 | 144.19 | 118.96 | 108.44 | 118.73 |
| 2 | 145.30 | 115.49 | 112.32 | 107.32 |
| 4 | 167.01 | 141.92 | 127.81 | 122.10 |
| 8 | 190.43 | 160.72 | 148.37 | 146.50 |
となります。
| NPAR 1 dister | 8 node | 1 group |
|---|---|---|
| NPAR 2 dister | 4 node | 2 group |
| NPAR 4 dister | 2 node | 4 group |
| NPAR 8 dister | 1 node | 8 group |
なので、メモリ帯域がX5570に比べて低く、従って、同一CPU内のcore数(E5472は4core)分を1 groupとして、ノード内では2 groupにした方が速いという結果が出ています。