Quantum ESPRESSOの並列って7種類あんねん

QE

Quantum ESPRESSOの並列計算について(あまり詳しくないですが)解説します。

スレッド並列

OpenMPです。

export OMP_NUM_THREADS=2
mpiexec -n 2 pw.x -in hogehoge.pwi

これを実行するとログの最初のほうに以下のように出力されます。

     Parallel version (MPI & OpenMP), running on       4 processor cores
     Number of MPI processes:                 2
     Threads/MPI process:                     2
     R & G space division:  proc/nbgrp/npool/nimage =       2

OpenMPとかThreads/MPIの出力がない場合は、ビルド時に –enable-openmp を指定していないかもしれません。

プロセス並列

MPI並列です。

mpiexec -n 8 pw.x -in hogehoge.pwi

ログはこうなります。

     Parallel version (MPI), running on     8 processors

これが出ていればちゃんと動いています。

これ以降に紹介する並列オプションは、計算対象や計算設定によってはエラーになることがありますが、MPI並列の何倍も速くなることもあります。

k点並列 -nk (-npools)

k点の計算をプロセスに分割します。k点の数が多い時に有効です。デフォルト値は1。

mpiexec -n 8 pw.x -nk 2 -in hogehoge.pwi

ログはこうなります。

     Parallel version (MPI), running on     8 processors

中略

     K-points division:     npool     =       2
     R & G space division:  proc/nbgrp/npool/nimage =       4

FFT並列 -nt (-ntg)

SCF計算ではFFT(高速フーリエ変換)が頻繁に使われます。このFFT処理を各プロセスに分散して効率化します。デフォルト値は1。

mpiexec -n 8 pw.x -nt 2 -in hogehoge.pwi

ログはこうなります。

     Parallel version (MPI), running on     8 processors

中略

     R & G space division:  proc/nbgrp/npool/nimage =       8
     wavefunctions fft division:  Y-proc x Z-proc =       2      4
     wavefunctions fft division:  task group distribution
                                  #TG    x Z-proc =       2      4

線形代数関係の並列 -nd (-ndiag or -northo)

行列計算の並列オプションです。subspace hamiltonianの対角化、ScaLAPACK等が関係します。

mpiexec -n 8 pw.x -nd 8 -in hogehoge.pwi

また、大規模な計算を数百コア以上の環境で計算する場合は -nk -nt -nd を組み合わせることが多いです。

バンド並列 -nb (-nband )

バンドグループの並列です。これを使うところはあまり見かけない気がします。

イメージ並列(NEB用?) -ni (-nimage)

NEB計算では始状態・終状態と、それらの間にある複数の中間状態(イメージ)を計算します。イメージ並列によって、これらのイメージを複数同時進行で計算します。デフォルト値は1。

コメント

  1. harrods より:

    私は、export OMP_NUM_THREADS=1
    を.bashrcに記述して、MPI並列で使っています。
    スレッドを使うと遅くなるようですね。

    2つ質問があります。

    Q1
    温度を300Kから2000Kまで昇温しながら、NPT計算を行ないたいのですが、どうすればいいのでしょうか?

    Q2
    計算結果から、各時刻毎にxsfフォーマットのファイルで書き出すにはどうすればいいですか?

    ご存じでしたらご教授頂けますと幸いです。

    • オレンジ酸 オレンジ酸 より:

      スレッド並列は遅くなりますよね。有効活用できたことがないです。

      Q1
      MDですね。&IONSセクションのion_temperatureでrescale-Tかreduce-Tを指定して、delta_tやnraiseを指定すると昇温降温ができるようです。

      Q2
      ASEがxsf出力できるみたいです。QEのMD結果をASEで毎ステップ読み込んでxsfにできるはずです。

  2. harrods より:

    いつの間にか、QE7.4が出てるようですね。

タイトルとURLをコピーしました