ホーム » HPCソリューション » HPCアプリケーション » 計算物理・物性物理・材料・電子構造 » VASP » VASPのtips

Share |

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

ファイル:Hg-NPAR1-NSIM1-timeline1.jpg

スレッド同士で、非常に多くの通信が行なわれている亊がよく分ります。ノード間を高速インターコネクタを使わないと、こ れでは、通信がボトルネックになってしまいます。もうすこし詳細に見てみると、

ファイル:Hg-NPAR1-NSIM1-timeline2.jpg

さらに拡大してみると、

ファイル:Hg-NPAR1-NSIM1-
timeline3.jpg

どうやら、このだいだい色の部分に時間を取られているようです。

ファイル:MPI-call.jpg

どうやら、MPI_Waitall、つまり、スレッド間の通信での待ち時間のようです。ログを集計してみると、

ファイル:Hg-NPAR1-NSIM1-
duration.jpg

かなり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にした場合を見てみましょう。


ファイル:Hg-NPAR2-NSIM1-timeline1.jpg


ファイル:Hg-NPAR2-NSIM1-
timeline2.jpg

かなり異ってきます。詳細に見てみると、

ファイル:Hg-NPAR2-NSIM1-
timeline3.jpg

かなり異ります。ログの統計をとってみると、

ファイル:Hg-NPAR2-NSIM1-
duration.jpg

こんなに違います。

このログを取った場合のelapsed timeを見てみると

NPAR=1 84.63 sec
NPAR=2 77.13 sec

大きく異ります。実際のHgのINCARは、NPAR=4で、更にNSIM=4となっています。

この場合のMPIのログを見てみますと、

ファイル:Hg-NPAR4-NSIM4-
timeline1.jpg


ファイル:Hg-NPAR4-NSIM4-timeline2.jpg

一見NPAR=1と同じようですが、

ファイル:Hg-NPAR4-NSIM4-timeline3.jpg

固まって、MPI_Waitallが全てのスレッドと通信していません。

ここまできたら、NPAR=8, NSIM=8を見てみましょう。


ファイル:Hg-NPAR8-NSIM8-timeline1.jpg


ファイル:Hg-NPAR8-NSIM8-timeline2.jpg


詳細にみてみると、

ファイル:Hg-NPAR8-NSIM8-timeline3.jpg

まったく異ります。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にした方が速いという結果が出ています。