WinGAMESSのSMP環境における並列化

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さんに、深く御礼申し上げます。

Post Comment

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

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