PC GAMESSのSMP環境における並列化

PC GAMESSはWindows環境でも簡単に並列化することができます。最近はデュアルコアCPU(人によってはクアッドコアも?)を利用している方も多いと思いますので、SMP環境に適応した簡単な並列化の方法をお示しします。

PC GAMESS(ver.7)のパッケージを解凍すると、BINDINGSというフォルダがあります。この中に、「mpibind.nt-mpich-smp.dll」というファイルがありますので、これを「mpibind.dll」にリネームし、pcgamess.exeと同じ階層にあるmpibind.dllと入れ替えます。計算に必要なのは、以下のファイルです。

pcgamess.exe
fastdiag.dll
mpibind.dll
mpich_smp.dll
p4stuff.dll
pcgp2p.dll

これらを同じフォルダに入れ、別のハードディスク上にコピーを置きます。そして、どちらか一方のフォルダ内に以下の内容のbatファイルを作成します。

(1)RunGAMESS.bat

@echo off for %%f in (*.inp) do call operate %%f

(2)operate.bat

echo The PC-GAMESS calculation for %1 is currently running. echo [start : %date% %time% ] @echo off pcgamess.exe -i %1 -o %~n1.out H:\node1 I:\node2 -np 2 ren PUNCH %~n1.pun del input del DICTNRY if exist IRCDATA (ren IRCDATA %~n1.irc) if exist EFPIND (del EFPIND) if exist MOINTS (del MOINTS) if exist AOINTS (del AOINTS) if exist WORK16 (del WORK16) if exist WORK15 (del WORK15) echo [finish : %date% %time% ] echo --------------------

RunGAMESS.batは、同じフォルダ内にある.inpファイルを順に実行するための簡単なコマンドで、operate.batが細かい実行操作です。operate.bat内で重要なのは太字&下線部3箇所です。2つのパスは、実行ファイルがあるフォルダのパスを絶対パスで入れ、後ろの数字はコア数です。私の場合、Athlon 64 X2を使っていて、Hドライブのnode1フォルダとIドライブのnode2フォルダに実行ファイルを置いているため、上記のような記述になっています。皆さんがこのコマンドを用いるときはそれぞれの環境に合わせて書き換えてください。

ちなみに、計算内容によっては並列化に対応していないもの(MP2での構造最適化やPCM法による溶媒和計算など)があります。その場合は、「mpibind.seq.dll」を上記と同じ要領でリネームして置換するとともに、batファイルの中で太字で示した部分を削除し、

pcgamess.exe -i %1 -o %~n1.out

の形にすることで対応できます。逐次処理の場合と並列処理の場合で実行フォルダを別に作るとよいでしょう。

exefolder.jpg Fig.1 実行フォルダ構成例

実行ファイルと同じフォルダに計算するための入力ファイル(拡張子はinp)を置き、RunGAMESS.batをダブルクリックすることで計算は開始されます。計算が終わると自動的に出力ファイルは整理され、メインの出力は.out、PUNCHファイルは.pun、もしIRCDATAファイルがあれば.ircの拡張子が付けられます。他のファイルは全て削除されます。
Fig.1は私のワークステーションのメインノードです。ここに入力ファイルを入れて計算を実行しています。basis.libというファイルがありますが、これは外部基底関数ファイルです。

コメント

クアッドコアの場合はHDDを4台搭載しないと並列化できないのでしょうか?それともパーテションきってHDD2台でクアッドコアの並列化も可能なのでしょうか?
その場合効率がかなり悪くなるとか?

パーティションを切れば、例え1台であっても並列化は可能です。ただし、ファイルのロケーションにもよるのでしょうが、パフォーマンスは落ちる可能性が高いと思います。私が実施した限りでは、1台の物理HDD(120GB)を2つのパーティション(各60GB)に切り並列化を実施したところ、2台の物理HDDを使った場合に比べて20~30%パフォーマンスが低下していたと思います(うろ覚え)。これは極端な例かもしれませんが…

マルチコアでのPC-Gamessでも、ハードディスクのパーティションを切る必要はありません。

上の例で、H:\node1 I:\node2 とやっていますが、これを
C:\PG1 C:\PG2 C:\PG3 C:\PG4 C:\PG5
と同じドライブに置いても、可能です。

scytheさん、貴重な情報ありがとうございます。
どうしてもHDDを追加できないときの苦肉の策ですね。
私の経験は上記の通りですし、Granovsky先生も物理的に分けることを推奨しています(計算の種類によっては影響大)ので、可能な限り物理的に区切るのが良いのは間違いないと思います。

Post Comment

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

(C) 2002-2006 s2k (W. Sasaki) All Rights Reserved.