GAMESSの並列数

GAMESS

量子化学計算プログラムのGAMESSのWindows版で並列計算をする際の負荷について検証します。

スポンサーリンク

2倍のコアを使ってる疑惑

rungms benzene.inp 2023.R1.intel 2 benzene.out

これは並列数2で指定したときの実行コマンドです。
これで計算を実行したときの標準出力が

=========================================================================

Job Properties

Input Filename               : benzene.inp
GAMESS Version               : gamess.2023.R1.intel.exe
Compute Processes Requested  : 2
Nodes Required               : 1

=========================================================================

Compute Processが2です。ここまではいいですね。
一番下には

Microsoft MPI (MS-MPI) will be running GAMESS on 1 node(s).
The binary will be kicked off by 'mpiexec' is gamess.2023.R1.intel.exe
MS-MPI will run 2 compute process(es) and 2 data server(s).

2 compute process(es) and 2 data server(s) ???
計算結果のoutファイルは

 ----------------------------------------
 CPU timing information for all processes
 ========================================
 0: 3.703125 + 0.453125 = 4.156250
 1: 3.937500 + 0.421875 = 4.359375
 2: 1.281250 + 3.125000 = 4.406250
 3: 1.125000 + 3.234375 = 4.359375
 ----------------------------------------

ということで、並列数2を指定したところ4プロセスが動いていたようです。
なお、タスクマネージャを見ても4プロセスが動いていました。

どういうこと?

GAMESSはcompute processdata server2種類のプロセス同数動くようになっています。
その名の通り、計算を担当するプロセスデータ通信を担当するプロセスです。
このようにすることで、通信が計算に与える影響を抑えているらしいです。

スポンサーリンク

6コア12スレッドのCPUだといくつが最適?

ノートPCですが6コア12スレッドのCPUを載せていますので、これで時間を計ってみます。
指定した並列数と、outファイルの一番下の部分の関係ありそうな部分を抜き出しました。

#並列数 = 1

 TOTAL WALL CLOCK TIME=          7.4 SECONDS, CPU UTILIZATION IS    96.45% 

----------------------------------------
 CPU timing information for all processes
 ========================================
 0: 6.890625 + 0.265625 = 7.156250
 1: 2.265625 + 5.000000 = 7.265625
 ----------------------------------------
#並列数 = 2

 TOTAL WALL CLOCK TIME=          4.6 SECONDS, CPU UTILIZATION IS    90.61% 

----------------------------------------
 CPU timing information for all processes
 ========================================
 0: 3.703125 + 0.453125 = 4.156250
 1: 3.937500 + 0.421875 = 4.359375
 2: 1.281250 + 3.125000 = 4.406250
 3: 1.125000 + 3.234375 = 4.359375
 ----------------------------------------
#並列数 = 3

 TOTAL WALL CLOCK TIME=          3.6 SECONDS, CPU UTILIZATION IS    78.10%
#並列数 = 4

 TOTAL WALL CLOCK TIME=          4.7 SECONDS, CPU UTILIZATION IS    96.79%
#並列数 = 6

 TOTAL WALL CLOCK TIME=          4.4 SECONDS, CPU UTILIZATION IS    77.33%
#並列数 = 12

 TOTAL WALL CLOCK TIME=          7.4 SECONDS, CPU UTILIZATION IS    31.78%

というわけで最速は並列数3でした。(奇数???)
OSが認識している論理プロセッサ数と同数である並列数12はかなり遅くなりました。24プロセスが走るので当然ですね。
また6コアCPUに合わせて並列数6を指定した場合も微妙でした。

3並列では6プロセスが稼働しますが、CPUが6コア12スレッドなので実コアと同数の6プロセスが速いのは納得です。

また2並列(4プロセス)のCPU timing information for all processesを見ると、

 0: 3.703125 + 0.453125 = 4.156250
 1: 3.937500 + 0.421875 = 4.359375
 2: 1.281250 + 3.125000 = 4.406250
 3: 1.125000 + 3.234375 = 4.359375

のように、各コアの計算処理の時間とデータ通信処理の時間の足し算になっています。
#0と#1のコアは計算処理をメインで担当して、#2と#3のコアはデータ通信をメインで担当していたようです。
このようにプロセスが2グループに分かれるのは全ての並列数に共通しています。

スポンサーリンク

まとめ

GAMESSのWindows版は、CPUの実コア数の半分を指定しましょう。奇数でも構いません。

コメント

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