東京大学HA8000クラスタシステムでのOpenFOAM-2.0.xの並列化効率
出典: OFWikiJa
目次 |
[編集] 履歴
- 格子ブロックを1つにした。qstatコマンドでジョブの終了を検知するのではなく、標準出力ファイルの存在で検知するようにした。最小ノード数を変更できるようにした。 Masa 2011年9月26日 (月) 12:19 (UTC)
- 高速化率や並列化効率の図が間違っていたので、差し替えた。 Masa 2011年9月17日 (土) 14:37 (UTC)
[編集] サンプルケース
自動的に並列計算して並列化効率を算出するサンプルケースです。
- Channel395-HA8000-2011092801.tar.gz 最新版
- Channel395-HA8000-2011092601.tar.gz
- Channel395-HA8000-2011091702.tar.gz
[編集] 計算条件
計算条件は以下の通りです。
- 流れ場:チャンネル流
- 解析領域: 4m(x)x2m(y)x2m(z)
- 乱流モデル: Smagorinsky
- 時間項時間スキーム: 完全陰解法 (backward)
- 移流項・拡散項離散化スキーム: 中心差分 (linear)
- 線型ソルバー: 全ての場に対してPCG。前処理は圧力についてDIC、他の場についてDILU。
- 初期値: boxTurbで連続式を満す場を生成した。
- 並列化効率算出用積分時間: 初期値から25秒
[編集] 実行方法
上記のファイルを実行用ディレクトリで展開してください。
tar zxpf Channel395-HA8000-*.tar.gz cd channel395-HA8000
さらにsetting.shにおいて各ジョブキュー名と計算を行う最大ノード数を設定してください。
#!/bin/sh INIT_QUEUE_NAME=short DE_QUEUE_NAME=short RUN_QUEUE_NAME=parallel MIN_NODE=1 MAX_NODE=64
- INIT_QUEUE_NAME: 格子生成(blockMesh)と初期値生成(boxTurb)を行う時のジョブキュー名。格子数が多い時はlargeキューを使用する必要があります。
- DE_QUEUE_NAME: 領域分割(decomposePar)を行う時のジョブキュー名。格子数が多い時はlargeキューを使用する必要があります。
- RUN_QUEUE_NAME: 解析(channelFoam)を行う時のジョブキュー名。ノード数や計算時間に応じて適切なキュー名を選択してください。
- MIN_NODE: 最小ノード数。格子数が多くてノード数が少ないとメモリ不足となる場合には、最小ノード数を上げてください。なお、この最小ノード数での計算時間をベースに高速化率や並列化効率が算出されます。
- MAX_NODE: 最大ノード数。
上記設定をした後にAllrun を実行してください。
./Allrun >& log.Allrun &
なお、格子生成・初期値生成や領域分割もジョブキューを投入してバッチで行うので、ジョブ終了後に出来るqstatコマンドの標準出力ファイルが出来るまでsleepのループで待ちます。
[編集] 格子数の変更
mesh/constant/polyMesh/blockMeshDict の以下の青地の部分を変更してください。
blocks
(
hex (0 1 3 2 4 5 7 6) (256 128 128) simpleGrading (1 1 1)
);
初期値を与えるboxTrubはx,y,z方向の分割数が2の階乗である必要がありますので、そのように変更してください。
[編集] 並列化効率
- OpenFOAMバージョン: 2.0.x-90d01e563d97
- 使用ソルバー: channelFoam
- コンパイラ: intel C/C++ Compiler Ver.11.0-074
- コンパイラの最適化オプション: -msse3 -O3 -no-prec-div (参照: 東京大学HA8000クラスタシステムへのOpenFOAM-2.0.xのインストールと実行)
- MPIライブラリ: MPICH-MX
- MPI関連の設定: MX_RCACHE:0。なお、明示的に指定していないが、MX_BONDINGの値は2となっていた。
- NUMA最適化: 有り (MYRANK=$MXMPI_ID; NODE=$(expr $MYRANK % 4); numactl --membind $NODE --cpunodebind $NODE、参照: 東京大学HA8000クラスタシステムへのOpenFOAM-2.0.xのインストールと実行)
- ノード間ネットワーク性能: 2.5 GB/s×双方向 (計算ノードBグループ)
[編集] 大規模ケース
- 格子数: 512(x)x256(y)x256(z)=33,554,432 (約3,400万)
- 解析ジョブキュー: jhpcn064
- 時間間隔: 0.025秒 (並列化効率算出用反復回数=25秒/0.025秒=1,000回)
1ノードや2ノードではメモリ不足で解析が行なえなかったので、以下は4ノード(64プロセッサ)での計算時間を元に算出したノードベースの高速化率、並列化効率です。
64ノード(1024コア)計算でも並列化効率が85%以上出ています。
[編集] 中規模ケース
- 格子数: 256(x)x128(y)x128(z)=4,194,304 (約420万)
- 解析ジョブキュー: jhpcn064
- 時間間隔: 0.05秒 (並列化効率算出用反復回数=25秒/0.05秒=500回)
以下は、1ノード(16プロセッサ)での計算時間を元に算出したノードベースの高速化率、並列化効率です。
格子数が420万とそれほど大規模でないので、64ノード(1024コア)計算では並列化効率が減少します。
[編集] 小規模ケース
- 格子数: 128(x)x64(y)x64(z)=524,288 (約52万)
- 解析ジョブキュー: jhpcn064
- 時間間隔: 0.05秒 (並列化効率算出用反復回数=25秒/0.05秒=500回)
以下は、1ノード(16プロセッサ)での計算時間を元に算出したノードベースの高速化率、並列化効率です。
格子数が少ないので、16ノード(256コア)以上の並列計算では並列化効率が大幅に減少します。






