東京大学HA8000クラスタシステムでのOpenFOAM-2.0.xの並列化効率

出典: OFWikiJa

目次

[編集] 履歴

  • 格子ブロックを1つにした。qstatコマンドでジョブの終了を検知するのではなく、標準出力ファイルの存在で検知するようにした。最小ノード数を変更できるようにした。 Masa 2011年9月26日 (月) 12:19 (UTC)
  • 高速化率や並列化効率の図が間違っていたので、差し替えた。 Masa 2011年9月17日 (土) 14:37 (UTC)

[編集] サンプルケース

自動的に並列計算して並列化効率を算出するサンプルケースです。

[編集] 計算条件

計算条件は以下の通りです。

  • 流れ場:チャンネル流
  • 解析領域: 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の階乗である必要がありますので、そのように変更してください。

[編集] 並列化効率

[編集] 大規模ケース

  • 格子数: 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コア)以上の並列計算では並列化効率が大幅に減少します。