hp170163
:
「有機半導体・有機分子発光材料の全自
動探索 シミュレーションシステムの開発」
高度化支援作業
理化学研究所 計算科学研究機構 研究部門 量子系分子科学研究チーム 殿
2017年9⽉6⽇(⽔)@AICS R405
⼀般財団法⼈ ⾼度情報科学技術研究機構 利⽤⽀援部
1Outline
• 高度化支援の依頼内容
• 実行環境と計算条件
• PWscf フロー図
• 各ライブラリを使用した場合のプログラム全体の実行時間の比較
• Scalapack と ELPA の全実行時間の比較
• electrons ルーチンの構造と実行時間の比較(Scalapack と ELPA)
• 固有値ライブラリ(
zhegv)部分の FAPP性能分析
• 固有値ライブラリ(zhegv)部分における MPI通信の経過時間
• 固有値ライブラリ(
zhegv)におけるMPIプロセスの中の計算の時間
• 固有値ライブラリ(zhegv)部分の 全演算数
• 固有値ライブラリ(
zhegv)部分の 各rankごとの演算数
• 実行時オプションの指定(
−nd 169)
• まとめ
2高度化支援の依頼内容 • 高度化支援のターゲットアプリ アプリ名: Quantum ESPRESSO バージョン: 6.1 対象モジュール: PWscf(pw.x) • 依頼内容 オープンソースの第一原理電子状態計算プログラムQuantum ESPRESSOの最新版v6.1のPWscfモ ジュール(pw.x)について、実行性能の阻害要因のひとつとなっている対角化計算に対して、EPLAライ ブラリ導入による高速化を行い、ライブラリ導入前の(ScaLAPACKを使用した)コードとELPAライブラリ 導入後のコードに対して並列実行時の並列効率、実行効率の測定を行い、性能特性の検証をしてい ただきたい。また、それぞれのコードについて性能阻害要因の特定を実施していただきたい。 3
実行環境と計算条件 表:実行環境 表:計算条件 計算対象物質 有機発光分子材料集合体 計算規模 単位セル当たり336原子 交換相関汎関数 rev-vdW-DF2 平面波カットオフエネルギー 64Ry k点 3x3x3 (irreducible k点:14 点) step数 1回 scf数 5回 PWscfを用いた構造最適化計算 コード名 Quantum ESPRESSO v 6.1 モジュール PWscf ハードウェア K computer 言語環境 K-1.2.0-22 (Released : 2017/4/8) 数値演算ライブラリ Scalapack version 2.0.2 (富士通汎用数値計算ライブラリSSLII) ELPA release 2016.11 (最新版 release 2017.05 )
コンパイルオプション Scalapack: FDFLAGS = -D__FFTW -D__MPI -D__PARA -D__SCALAPACK -D__OPENMP FFLAGS = -O3 -Nsetvalue -Kopenmp –Kparallel,optmsg=2 -Nlst=t
LDFLAGS = -Kfast -Kparallel,openmp
ELPA_LIBS_SWITCH = disabled
SCALAPACK_LIBS = -SSL2BLAMP -SCALAPACK -Kopenmp,parallel
ELPA: FDFLAGS = -D__FFTW -D__MPI -D__PARA -D__SCALAPACK -D__OPENMP -D__ELPA_2016
FFLAGS = -O3 -Nsetvalue -Kopenmp –Kparallel,optmsg=2 -Nlst=t
LDFLAGS = -Kfast -Kparallel,openmp
SCALAPACK_LIBS = /home/rist/r00065/lib/lib/libelpa_openmp.a -SSL2BLAMP -SCALAPACK -Kopenmp,parallel
PWscf フロー図(v6.1)
Start
read_inputStop
run_pwscf stop_run init_run electrons forces stress punch mp_global iosys setup check_stop 計算のセットアップを行う。 電子状態をself-consistentに計算する。 原子に対する力を計算する。 系の応力を計算する。 environment plugin_arguments_bcast 51076.54 448.75 411.09 1107.99 664.21 580.89 25.27 25.28 25.19 228.81 229.53 231.1 2,443 1,371 1,252 0 500 1000 1500 2000 2500
lapack scalapack ELPA
経過時間
[sec]
ライブラリ
init_run electrons forces stress other 全実行時間
各ライブラリを使用した場合のプログラム全体の実行時間の比較 nodes (= MPI processes) : 192 [TOFU: 4x4x12] theareds : 8 最短 (注) Lapackのコンパイルオプション DFLAGS = -D__FFTW -D__MPI -D__PARA -D__OPENMP FFLAGS = -O3 -Nsetvalue -Kopenmp -Kparallel,optmsg=2 -Nlst=t バンド数:1976
• 各ライブラリ(Scalapack, ELPA, Lapack) の中で、ELPAが、全実行時間が、一番
短いことがわかった。
à init_run と electrons の経過時間が主に短縮
1.1倍高速
1,371 449 664 1,252 411 581 0 200 400 600 800 1,000 1,200 1,400 全実行時間 init_run electrons 経過時間 [ se c ] scalapack elpa Scalapack と ELPA の全実行時間の比較 nodes (= MPI processes) : 192 [TOFU: 4x4x12] theareds : 8
• init_run と electrons では、全実行時間に対して electrons部分の割合が大きく、
Scalapack と ELPA の実行時間の差も electrons の方が大きい
à 今後 electrons の部分に注目
453 599 623 664 334 515 540 581 0 200 400 600 800 cdiaghg cegterg c-bands electrons 経過時間 [ sec ] elpa scalapack
electrons ルーチンの構造と実行時間の比較(Scalapack と ELPA)
• electrons ルーチンの中で、Scalapack と ELPA の経過時間に差がある部分を グラフにした。 àプログラム構造において、一番深い階層の cdiaghg ルーチン(固有値ライブラ リ zhpev を呼ぶ部分) が原因で他の部分にも差が出ていることがわかった。 à cdiaghg ルーチンの中の固有値ライブラリ zhpev 部分を詳しく調べる。 一番下の階層 時間の差が大 きい electrons c-bands cegterg cdiaghg zhpev_modu le.pzheevd_ drv elpa1_comput e.tridiag_com plex_double nodes (= MPI processes) : 192 [TOFU: 4x4x12] theareds : 8 Scalapack と ELPA の 共通部分のルーチン ELPA だけのルーチン 8
1.10 0.68 0.00 0.20 0.40 0.60 0.80 1.00 1.20 scalapack (zhpev) ELPA (zhpev) 1 コ ー ル当た り の時間 [s] ライブラリ 381.20 234.47 0.00 50.00 100.00 150.00 200.00 250.00 300.00 350.00 400.00 scalapack (zhpev) ELPA (zhpev) 経過時間 [s] ライブラリ 固有値ライブラリ(zhegv)部分の FAPP性能分析(1) electrons で呼ばれている固有値ライブラリ(zhegv)部分だけの経過時間を測定 全実行時間から、electrons で呼ばれている固有値ライブラリだけの経過時間を分離した。 à 今後は、この部分の経過時間だけを調べる。 electrons で呼ばれている固有値ライブラリ(zhegv)部分の経過時間(全rankの中の最大値) 1.6倍高速 • バンド数:1976
172.88 59.57 85.16 25.91 0.00 50.00 100.00 150.00 200.00 250.00 300.00 MPI 待ち MPI 通信 ELPA MAX MIN
Scalapack と ELPA における、固有値ライブラリ(zhegv)の経過時間の測定で、
全rank(MPIプロセス)の中で、計算、MPI待ち、MPI通信の最大値(MAX)と最小値(MIN)をプロット
• 全rank(MPIプロセス)中の最大値(MAX)と最小値(MIN)の経過時間を調べると、
Scalapack と ELPA ともに、インバランンスがあることがわかった。
• Scalapack と ELPA を比較すると、ELPAの方が、MPI待ちと、MPI通信の時間が、大きく
減少して、インバランスも緩和されていることがわかった。 固有値ライブラリ(zhegv)部分の FAPP性能分析(2) 318.75 283.02 62.04 31.65 0.00 50.00 100.00 150.00 200.00 250.00 300.00 MPI 待ち MPI 通信 Scalapack MAX MIN • 全rank(MPIプロセス)中の最大値(MAX)と最小値(MIN)の経過時間を調べると、 Scalapack と ELPA ともに、インバランンスがあることがわかった。
• Scalapack と ELPA を比較すると、ELPAの方が、MPI待ちと、MPI通信の時間が、大きく
減少して、インバランスも緩和されていることがわかった。
à ELPA では、Scalapack と比べて、通信方法が大きく改善されていることがわかった。
固有値ライブラリ(zhegv)部分における MPI通信の経過時間 MPI Profile
• scalapack: 主に MPI_Recv と MPI_Bcast に時間が かかっている
ELPA: 主に mpi_allreduce と mpi_bcast に時間が かかっている à 通信方法が違っている。 • 通信サイズ(scalapack:563,859,520バイト、ELPA: 378,760,928バイト)も、コール回数(scalapack: 556,588,288回、ELPA:361,255,968回)も、ELPAの 方が小さくなっている。 scalapack ELPA (全rankの合計の値) Elapsed(s) Wait(s) Byte Call 10,898 ---- 378,760,928 361,255,968 zhpev 119.98 104.14 5,429 847,912 mpi_allreduce_ 149.24 127.68 4,329 1,180,186 mpi_bcast_ 1.19 0 0 2,776 mpi_recv_ 0.02 0 3,562 4,511 mpi_send_ 0 0 2,621 82 mpi_sendrecv_ 1.36 0 95,077 19,085 mpi_sendrecv_replace_ 0.82 0 0 1,575,380 mpi_comm_rank_ 0.75 0 0 1,575,380 mpi_comm_size_ 0.24 0 0 694 mpi_comm_split_ 0.01 0 0 694 mpi_comm_free_
Elapsed(s) Wait(s) Byte Call
20,563 ---- 563,859,520 556,588,288 zhpev 4.31 2.21 3,909 48,459 MPI_Allreduce 319.56 310.83 18,444 631,840 MPI_Bcast 266.98 0 12,970 2,238,168 MPI_Recv 7.18 0 10,931 837,592 MPI_Send 0.05 0 16 43,601 MPI_Irecv 1.37 0 13,417 401,833 MPI_Isend 0.1 0 0 51,929 MPI_Op_create 0.08 0 0 51,929 MPI_Op_free 0.55 0 0 401,833 MPI_Pack 0.2 0 0 401,833 MPI_Pack_size 8.92 8.17 271,898 3,470 MPI_Reduce 0.73 0 16 174,404 MPI_Rsend 2.67 0 0 1,169,050 MPI_Testall 1.3 0 0 1,489,658 MPI_Type_commit 2.73 0 0 1,489,658 MPI_Type_free 0.01 0 0 347 MPI_Type_indexed 3.83 0 0 1,489,311 MPI_Type_vector 3.02 0 0 869,938 MPI_Waitall 通信方法の改善 à インバランスが改善 à MPI待ち、通信の時間の短縮 11
73.83 95.92 26.64 35.42 0.00 20.00 40.00 60.00 80.00 100.00 scalapack ELPA 時間 [s] 計算 MAX MIN
Scalapack と ELPA における、固有値ライブラリ(zhegv)の経過時間の測定で、 全rank(MPIプロセス)の中で、計算時間の最大値(MAX)と最小値(MIN)をプロット
• ELPAの方が、計算には時間がかかている。
固有値ライブラリ(zhegv)におけるMPIプロセスの中の計算の時間
• 全rank(MPIプロセス)中の最大値(MAX)と最小値(MIN)の経過時間を調べると、
Scalapack と ELPA ともに、インバランンスがあることがわかった。
• Scalapack と ELPA を比較すると、ELPAの方が、MPI待ちと、MPI通信の時間が、大きく
減少して、インバランスも緩和されていることがわかった。
à ELPA では、Scalapack と比べて、通信方法が大きく改善されていることがわかった。
通信はELPAの方が速くなっていることがわかった。
次に、計算にかかるコストについて調べてみる。
1,370,213 2,021,247 0 500,000 1,000,000 1,500,000 2,000,000 scalapack ELPA 全演算数
Scalapack と ELPA における、全rank(MPIプロセス)の固有値ライブラリ(zhegv)の演算数の総和
固有値ライブラリ(zhegv)部分の 全演算数 1.5倍 • Scalapack より、ELPAの方が、計算に対するコストがかかっていることがわかる。 計算は、ELPAの方が時間がかかっている à 演算数も確認 13
Scalapack と ELPA における、各rank(MPIプロセス)の固有値ライブラリ(zhegv)の演算数 0 10000 20000 30000 40000 50000 0 20 40 60 80 100 120 140 160 演算数 [E la ps ed (s )*MFL O PS ] rank ELPA 0 10000 20000 30000 40000 50000 0 20 40 60 80 100 120 140 160 演算数 [E la ps ed (s )*MFL O PS ] rank Scalapack 各rankごとにインバランス(演算を行っているrankと行ってないrankがある) à 192プロセスの実行で、実行時オプション(−nd)を指定しないと、9 x 9 = 81 プロセスしか使用しないプログラム構造になっている。 固有値ライブラリ(zhegv)部分の 各rankごとの演算数 14
1,309 379 1,194 268 0 500 1,000 1,500 全実行時間 cdiaghg 経過時間 [ se c ] scalapack (-nd 169) elpa (-nd 169) 1,371 453 1,252 334 0 500 1,000 1,500 全実行時間 cdiaghg 経過時間 [ se c ] scalapack elpa 実行時オプションの指定(−nd 169) • Scalapack も ELPA も実行時オプションの指定(−nd 169)の指定で 同様に全実行時間が 1.05倍 の高速化 à ELPA も Scalapack と同様の指定で高速化が可能である。 • 無指定 9 x 9 = 81 プロセスで実行 • 13 x 13 = 169 プロセスで実行 −nd 169 を指定 1.1倍 1.05倍高速 1.4倍 1.4倍 1.2倍高速 15
まとめ
Quantum ESPRESSO (PWscf) v 6.1 における使用ライブラリを変えての 実行時間の比較(Scalapack, ELPA, lapack の比較)
ノード数 192 (3次元形状指定 [4 x 4 x 12]) ハイブリッド並列(OMP_NUM_THREADS=8) • ELPAが最短 à Scalpack より、1.1 倍高速 • cdiaghg ルーチンにおける、固有値ライブラリ(zhegv)部分の違いが大きく寄与している ことがわかった。 • zhegv部分のMPI待ちと、MPI通信の経過時間が大きく減少している à ELPAは、Scalpack よりも通信方法が大きく改善されていることがわかった。 • Scalapack より、ELPAの方が計算はコストがかかっている。 à ELPAは、計算にコストをかけて、通信で得するようになっている。 • Scalapack も ELPA も実行時オプションの指定(−nd 169)の指定で 同様に全実行時間が 1.05倍の高速化 à ELPA も Scalapack と同様の指定で高速化が可能である。 16
付録
コスト分布調査:fipp測定結果(Scalapack と ELPAの比較) 表:基本プロファイラによるアプリケーションの手続きコスト分布(MPIプロセス数192[TOFU: 4x4x12]の場合) No. Cost コールグラフ調査による (手続きコスト) 処理フローにおける該当の Barrier MPI 手続き名 有(○)/無(ー) (%) (スレッド同期 待ちのコスト) (%) (MPIライブラリ
のコスト) (%) init_run electrons forces stress
77,849,640 100 558,933 0.72 26,117,396 33.55 Application 1 15,600,174 20.04 5,084 0.03 14,699,602 94.23 scatter_mod.fft_scatter_ ○ ○ ○ ○ 2 12,260,470 15.75 191,083 1.56 0 0 fft_scalar_fftw.cft_2xy._OMP_3_ ○ ○ ー ー 3 10,790,797 13.86 160,627 1.49 0 0 fft_scalar_fftw.cft_2xy._OMP_4_ ○ ○ ー ○ 4 6,844,378 8.79 0 0 6,844,305 100 mp_synchronize_ ○ ○ ○ ○ 5 4,029,372 5.18 1,814 0.05 0 0 stres_us.stres_us_k_ ー ー ー ○ 6 3,779,652 4.86 5,290 0.14 3,388,666 89.66 zhpev_module.pzheevd_drv_ ○ ○ ー ー 7 3,172,423 4.08 0 0 0 0 vloc_psi_k._OMP_3_ ○ ○ ー ー No. Cost コールグラフ調査による (手続きコスト) 処理フローにおける該当の Barrier MPI 手続き名 有(○)/無(ー) (%) (スレッド同期 待ちのコスト) (%) (MPIライブラリ
のコスト) (%) init_run electrons forces stress
81,034,984 100 615,865 0.76 24,681,216 30.46 Application 1 15,674,784 19.34 5,267 0.03 14,794,361 94.38 scatter_mod.fft_scatter_ ○ ○ ○ ○ 2 12,283,632 15.16 169,692 1.38 0 0 fft_scalar_fftw.cft_2xy._OMP_3_ ○ ○ ー ー 3 10,767,466 13.29 140,233 1.30 0 0 fft_scalar_fftw.cft_2xy._OMP_4_ ○ ○ ー ○ 4 6,164,210 7.61 0 0 6,164,017 100 mp_synchronize_ ○ ○ ○ ○ 5 4,831,304 5.96 78,541 1.63 495,789 10.26 elpa1_compute.elpa_transpose_vectors_complex_double._OMP_3_ ○ ○ ー ー 6 4,001,447 4.94 1,806 0.05 0 0 stres_us.stres_us_k_ ー ー ー ○ 7 3,205,774 3.96 0 0 0 0 vloc_psi_k._OMP_3_ ○ ○ ー ー Scalapack ELPA ELPAでは、MPIのコストが大幅に減少 18
旧バージョン5.4.0(scalapack) との全実行時間の比較
nodes (= MPI processes) : 192 [TOFU: 4x4x12] theareds : 8
コンパイルオプション
DFLAGS = -D__FFTW -D__MPI -D__PARA -D__SCALAPACK -D__OPENMP $(MANUAL_DFLAGS)
FFLAGS = -O3 -Nsetvalue -Kopenmp -Kparallel,optmsg=2 -Nlst=t は、同じ • バージョンが変わっても実行時間は同じ 448.75 448.76 664.21 661.51 25.28 25.34 229.53 227.28 1,371 1,367 0 200 400 600 800 1000 1200 1400 v6.1(scalapack) v5.4.0(scalapack) 経過時間 [sec]
init_run electrons forces stress other 全実行時間
PWscf フロー図(旧バージョン v5.4.0)