領域分割(decomposePar)
このページは、2026-06-05の勉強会でチームが共有した領域分割(OpenFOAMのdecomposePar)の基礎をまとめたものです。
担当: 松村。
これは何か
decomposeParは、OpenFOAMのメッシュを複数のrank(プロセス)へ分割するコマンドです。
分割方法はdecomposeParDictのmethodで指定します。
ポイントは、分割の断面 = 通信が発生する面ということ。分割の仕方で通信量と負荷分散(load imbalance)が決まります。
なぜ重要か
- 分割の断面積が大きいほど、隣接rankとのMPI通信が増えます。
- rank間で計算量が偏ると、速いrankが遅いrankを待ち、並列効率が落ちます。
- つまり、領域分割は通信量とロードバランスの両方に効く重要な設定です。
主な分割手法
| method | 種類 | 長所 | 短所 |
|---|---|---|---|
simple | 単純分割 | 実装・設定が簡単 | 通信が多い(断面の表面積が大きくなりやすい) |
hierarchical | 階層型分割 | ノード構造を考慮、通信削減。速くて設定簡単 | 軸の指定が必要 |
scotch | グラフ分割 | 通信量を最小化。最も一般的で高品質 | ライブラリ依存 |
ptscotch | scotchの並列版 | 巨大メッシュ(100万セル以上)向け。MPI版Scotch | セットアップがやや複雑 |
コンテスト視点:試す順番
チームのおすすめの順番です(経験談)。
hierarchical… 速い・設定簡単scotch… まず比較対象にするptscotch… 超大規模メッシュ向け
実際のHPCコンテストでは、
decomposeParDictのmethodをscotchに変えただけで10〜30%高速化するケースも珍しくありません(経験談・環境依存)。
設定例:
// decomposeParDict
method scotch;
最初に見るべき指標・設定
| 観点 | 見るもの | なぜ重要か |
|---|---|---|
| 分割手法 | decomposeParDictのmethod | 通信量・負荷分散に直結 |
| rank数 | numberOfSubdomains | 多すぎると通信・同期が増える |
| 負荷の偏り | rankごとのcell数・計算時間のばらつき | load imbalanceの有無 |
注意点
ptscotchは巨大メッシュで効果的ですが、小さいメッシュでは恩恵が小さいことがあります。- 分割を変えたら、必ずbaselineと同じ条件で再測定し、効果をプロファイルで確認します。
- 大会で変更可能な設定範囲は要確認です。