大規模並列計算2011年4月9日 | |
はじめにOpenFOAM で大規模並列計算 (ノード間並列計算) を行う方法について。 使用バージョンOpenFOAM 1.7.1 必要なものOpenFOAM (OpenMPI) でノード間並列計算を行うには、互いに SSH で接続可能なマシンを用意する必要がある。 ノード間並列計算の準備並列計算自体は 1 ノード内のマルチコア並列計算と同様である。ノード間並列計算の場合、ケースディレクトリの置き方が問題である。3 つの方法がある。
共有ディレクトリに置くNFS を使って、全ノードで同じパスに共有ディレクトリを作るのが一番使いやすい。共有ディレクトリにケースディレクトリを置いて計算を実行するだけである。データを分散させたり回収したりする必要がない。難点は、各ノードへのデータ転送がパフォーマンスを悪化させることである。 同じパスに置く共有ディレクトリを使わない方法としては、ケースディレクトリを全ノードで同じパスに置くという方法がある。各ノードですべてのデータが必要なわけではないので、decomposePar でできる "processor*" をそれぞれ必要な分だけ設置すればよい。結果もそれぞれそこに入る。共有ディレクトリを使うよりはパフォーマンスが良い。手動での操作は煩雑なので (特にノードが増えると)、データ転送の工夫が必要になる。 バラバラに置く各ノードでデータを置くパスを一致させないこともできる。その指定は decomposeParDict で行う。"distributed" キーワードで "yes" を指定し、"roots" に各 CPU コアごと (ノードごとではない) のパス ("..." の形) を並べればよい。 ノード間並列計算の実行計算は mpirun で行う。1 ノード内の計算と異なるのは、マシンのリストを指定することである。 $ mpirun --hostfile machines -np 32 icoFoam -parallel "--hostfile" で指定している machines はテキストファイルで、マシンと使用 CPU コア数を指定する。 host1 cpu=4 host2 cpu=4 ... mpirun は別のノードにアクセスする際に SSH を使う。ノード数分の認証が必要になるので、ノード数分のパスワードを聞いてくる (8 ノード並列なら自分以外の 7 ノード分の認証が必要)。実行のたびにこれを行うのは面倒なので、SSH の公開鍵認証 (パスフレーズなしで) の設定を行っておくとよい。 | |
| PENGUINITIS | |