ユーザーガイド 1.5系 - B.1 MPICHを用いた領域分解ケースの並列実行
出典: OFWikiJa
[編集] B.1 MPICHを用いた領域分解ケースの並列実行
この節では、3.4.2で説明したopenMPIではなく、MPI/MPICHを使ってOpenFOAMのケースを並列計算する方法を説明します。
実行するアプリケーションがすべてのプロセッサノードに同じパス名を持っているかどうかでMPI/MPICHの起動は異なります。以下の2つの場合では、実行ファイルへのパス名は異なります。
・プロセッサが全て同じUNIX/Linux構造に属さない場合。
・すべてのノードから実行ファイルへのアクセスができるネットワークファイルシステム(NFS)がなく、したがって、それは異なったノードの異なった場所にインストールされる場合。
[編集] B.1.1 全てのノードで同じ実行パス名の場合
プロセッサノードがすべてローカルである単一マシンにおいて、以下のコマンドを実行します。その際は ` は逆向きの引用文字であり一般的にはキーボードの最上部右側にある( ' ではない)ことに気をつけてください。
mpirun -np <nProcs> `which <foamExec>` <otherArgs> -parallel < /dev/null >& log &
<nProcs>はプロセッサの数です。 <foamExec>は実行ファイル、例えば、icoFoamです。 そして、出力はログというファイルに転記されます。例えば、icoFoamが、$FOAM_RUN/tutorials/icoFoamディレクトリのキャビティチュートリアルの3つのノードで実行する場合は、以下のコマンドを実行します。
mpirun -np 3 `which icoFoam` $FOAM_RUN/tutorials/icoFoam cavity -parallel < /dev/null >& log &
アクセスしたいプロセッサがマシンのクラスタの向こう側にあるとき、以下のコマンドを実行します。
mpirun -machinefile <machinesFile> -np <nProcs> `which <foamExec>` <otherArgs> -parallel < /dev/null >& log &
ノード名を含む<machinesFile>ファイルが角行にひとつあり、現在ユーザがログオンしているマシンが最初のものであることを除いて、従来と同じです。<machinesFile>は、MPICHで読まれるファイルであり、したがって、マシン名と各マシンで使用するプロセッサ数が必要なだけで、ヘッダーは必要ありません。例えば、マシンarpで1プロセッサ、マシンnoddyで2プロセッサ実行するには、ファイルは以下のようにします。
arp:1 noddy:2
注意: 共有メモリを持つマシンのクラスタにおける性能の最適化は、MPICHライブラリを再コンパイルする必要があるかもしれません。やり方はMPICH資料を見てください。
[編集] B.1.2 ノード間で実行パス名が異なる場合
異なるパス名を持つ実行ファイルを異なるノードで実行するには、全てのノードに同じバーションのOpenFOAMをインストールしrshを使用して実行する能力が必要です。後者は全てのノードで、例えばicoFoamのようなアプリケーションを実行することで確認できます。
rsh <machineName> icoFoam <root> <case>
実行ファイルの異なったパス名はノード名とそれぞれの実行ファイルへのパス名を含む<p4pgFile>ファイルを通してを指定できます。例えばリナックスマシンarpとソラリスマシンnoddy上でicoFoamを実行するためには、<p4pgFile>は以下のように入力します。
arp 0 /usr/local/OpenFOAM/OpenFOAM-1.5/applications/bin/linuxOptMPICH/icoFoam noddy 1 /usr/local/OpenFOAM/OpenFOAM-1.5/applications/bin/solarisOptMPICH/icoFoam
各行の2番目の入力、ここでは0と1、は各マシンあたりの追加プロセスの数です。MPIの実行がarpから始められるので、マスタープロセスはそこで実行され、他の追加プロセスはそこで始めてはいけません。ジョブは実行によって始まります。
mpirun -p4pg <p4pgFile> `which <foamExec>` <otherArgs> -parallel < /dev/null >& log &
