領域分割(decomposePar)

このページは、2026-06-05の勉強会でチームが共有した領域分割(OpenFOAMのdecomposePar)の基礎をまとめたものです。 担当: 松村。

これは何か

decomposeParは、OpenFOAMのメッシュを複数のrank(プロセス)へ分割するコマンドです。 分割方法はdecomposeParDictmethodで指定します。

ポイントは、分割の断面 = 通信が発生する面ということ。分割の仕方で通信量と負荷分散(load imbalance)が決まります。

なぜ重要か

  • 分割の断面積が大きいほど、隣接rankとのMPI通信が増えます。
  • rank間で計算量が偏ると、速いrankが遅いrankを待ち、並列効率が落ちます。
  • つまり、領域分割は通信量とロードバランスの両方に効く重要な設定です。

主な分割手法

method種類長所短所
simple単純分割実装・設定が簡単通信が多い(断面の表面積が大きくなりやすい)
hierarchical階層型分割ノード構造を考慮、通信削減。速くて設定簡単軸の指定が必要
scotchグラフ分割通信量を最小化。最も一般的で高品質ライブラリ依存
ptscotchscotchの並列版巨大メッシュ(100万セル以上)向け。MPI版Scotchセットアップがやや複雑

コンテスト視点:試す順番

チームのおすすめの順番です(経験談)。

  1. hierarchical … 速い・設定簡単
  2. scotch … まず比較対象にする
  3. ptscotch … 超大規模メッシュ向け

実際のHPCコンテストでは、decomposeParDictmethodscotchに変えただけで10〜30%高速化するケースも珍しくありません(経験談・環境依存)。

設定例:

// decomposeParDict
method scotch;

最初に見るべき指標・設定

観点見るものなぜ重要か
分割手法decomposeParDictmethod通信量・負荷分散に直結
rank数numberOfSubdomains多すぎると通信・同期が増える
負荷の偏りrankごとのcell数・計算時間のばらつきload imbalanceの有無

注意点

  • ptscotchは巨大メッシュで効果的ですが、小さいメッシュでは恩恵が小さいことがあります。
  • 分割を変えたら、必ずbaselineと同じ条件で再測定し、効果をプロファイルで確認します。
  • 大会で変更可能な設定範囲は要確認です。

関連ページ

参考文献