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。
コメント
私は、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にできるはずです。
ありがとうございました。
やってみます。
いつの間にか、QE7.4が出てるようですね。