PC GAMESSの並列化については以前に書きましたが、ここではWinGAMESSの簡潔な並列化について紹介します。PC GAMESSとWinGAMESSはどちらも「GAMESS」とつきますが、その中身はかなり違っていて、例えばPC GAMESSではMP3/4計算やRSURFACE計算,Cube出力の実装,そして何より計算が高速なのが特長で、WinGAMESSではCCやNEO,EFP/PCM,NMR,TinkerによるQM/MM,UMP2 GradientなどPC GAMESSより幅広い計算が可能になっています。
注:最新版のWinGAMESSとFacioには、Facioの作者である末永さんが作成したDrag&Drop実行ファイルが同梱されており、このバッチファイルの中の変数「CPU」を変更するだけで、並列計算を実施可能です。
(2008/02/12 追記)
WinGAMESSを公式ページから入手したら、インストールを行います。通常インストールはC:\WinGAMESSに行われ、それ以外のロケーションは推奨しないとされています。実際にはパスに半角スペースがないところであれば、どこでも支障はありません(Program FilesやDocuments and Settings以下は回避すべき)。以下、現時点で最新のバージョン(2007.03 R1)について説明します。
インストール直後のWinGAMESSフォルダ内は以下の構成です。
WinGAMESS
│[フォルダ(9)]
├manuals (マニュアル類のPDFファイル)
├mcpdata (Model Core Potentialのデータ)
├neotests (NEOの入力例)
├params (TINKERの分子力場パラメータ)
├scratch (計算中の一時的なデータ保存フォルダ)
├temp (punchファイルの格納フォルダ)
├tests (マニュアルにある入力例がファイル単位で格納)
├Utilities (FMOutilなどの入力作成等支援用ユーティリティ)
├VB2000 (VB2000関連)
│[ファイル(9)]
├batmaker.exe (計算用バッチファイル作成ユーティリティ)
├batmaker.ini (上記プログラムの設定保存ファイル)
├csh.exe (c shell)
├cygpopt-0.dll (cygwinライブラリの1つ)
├cygwin1.dll (cygwinのコアライブラリ)
├ddikick.exe (並列計算制御プログラム)
├ericfmt.dat (計算に必要なデータ/詳細は私は詳しくないのでわかりません)
├gamess.07.exe (GAMESS本体)
└runscript.csh (計算実行用シェルスクリプト)
この中で、一番下にあるrunscript.cshを編集します。
まず、21行目のノード数指定をCPU数指定と同じ引数にします。
set NNODES=1 # provisional, if not please specify
↓
set NNODES=$3 # provisional, if not please specify
次に、229行目の実行コマンド指定にある$HOSTLISTを、並列化したい数の「localhost」に置き換えます。
-ddi $NNODES $NCPUS $HOSTLIST \
↓
-ddi $NNODES $NCPUS localhost localhost \
上記の例はデュアルコアCPUを使う場合で、クアッドコアをフルに使いたいときはさらにlocalhostを半角スペースで区切りながら2つ書き足します。
実際の計算では、Batmakerでバッチファイルを作成して実行することが多いかと思います。Batmakerで作成されたバッチファイルで並列計算を実行するには、CPU数の引数を使用したいプロセス数に書き換えます。例えば、
@echo off
echo Gamess runs on HOSTNAME using 1 CPU
echo Running INPUTFILE.inp ...
cd C:\WinGAMESS\temp
del INPUTFILE.*
cd C:\WinGAMESS\
copy C:\WinGAMESS\INPUTFILE.inp C:\WinGAMESS\scratch\INPUTFILE.F05
csh -f runscript.csh INPUTFILE 07 1 C:\WinGAMESS HOSTNAME yyyy/mm/dd
hh:mm:ss > C:\WinGAMESS\INPUTFILE.out (上と合わせて一行)
echo Job INPUTFILE.inp finished.
@echo off
echo All jobs processed.
↓
8行目を以下のように書き換え
↓
csh -f runscript.csh INPUTFILE 07 2 C:\WinGAMESS HOSTNAME yyyy/mm/dd
hh:mm:ss > C:\WinGAMESS\INPUTFILE.out
あとはバッチファイルのダブルクリックで、2プロセスの並列計算が実行できます。
追記:並列化効率について
WinGAMESSを上記の方法で並列化した場合、並列化効率は理論モデルなどによりかなり変動します。DFTの並列化効率は高い(>1.8)ですが、MP2はあまり高くない(~1.4)ようです。ソースコードを入手し、自分でcygwin上でコンパイルした場合にMP2の並列化効率の改善が見られることがあります。
【謝辞】
本稿執筆にあたり、重要な情報を提供してくださったscytheさんに、深く御礼申し上げます。