領域分割法(並列PDE計算)
偏微分方程式の数値計算がなぜプロセッサ台数を増やしても素直に速くならないのか、通信とアルゴリズムの両面から原理的に理解できる。
- 1.計算領域を部分領域に切り分け各プロセスへ割り当てる領域分割法は、境界のゴースト(ハロ)交換という通信を必然的に生む。
- 2.シュワルツ法は部分領域を重ねて反復的に境界値を交換し合うことで、分割しても元の方程式の解に収束させる仕組み。
- 3.性能は負荷分散(計算量の均等化)と通信オーバーヘッド(表面積対体積比)のトレードオフで決まり、分割形状の設計が速度を左右する。
なぜ「切るだけ」では並列化できないのか
偏微分方程式(PDE)を数値的に解く際、計算領域を格子に離散化し、各格子点の値を連立方程式として解きます。格子点数が数億〜数兆に達する問題は1台のプロセッサに収まらないため、計算領域を部分領域に切り分け、各プロセスへ割り当てる領域分割法が使われます。
見落としやすいのが、PDEの離散化(差分法・有限要素法・有限体積法いずれでも)では、ある格子点の更新に隣接する格子点の値が必要という点です。部分領域の境界付近を更新するには隣の部分領域の値が要るため、空間を切った瞬間にプロセス間通信が構造的に必須になります。
機械学習のデータ並列がバッチを割って勾配を同期するのに対し、領域分割法は空間(格子点)を割って境界値を同期します。割った結果として通信が必然的に発生する構造は同じです。
ゴースト(ハロ)交換
各プロセスは担当領域の周囲に、隣接プロセスの格子点のコピーを1〜数層だけ余分に保持します。これを**ゴースト層(ハロ)**と呼びます。ステンシル計算(隣接点を使う更新式)が参照する広さの分だけゴースト層を持てば、各プロセスは全体を持っているかのように更新できます。
各反復で:
1. 内部格子点を更新する(隣接プロセスの値は不要)
2. 通信: 自分の境界層を隣接プロセスへ送り、隣接プロセスの境界層を受け取る
3. 境界に接する格子点を更新する(受け取ったゴースト層を参照)
手順1と2は依存関係がないため、内部点を計算している間に非同期通信を裏で進め、境界点の計算直前に完了を待つ計算と通信のオーバーラップが定石です。高次精度の差分ほど参照範囲が広がりゴースト層を厚くする必要があり、通信量は精度とのトレードオフになります。
シュワルツ法:分割してもなぜ同じ解に収束するのか
「部分領域ごとに計算した結果を境界で貼り合わせて、元の方程式の解と一致するのか」に理論的根拠を与えるのがシュワルツ法です。要点は部分領域を重ねること。オーバーラップ領域を持たせて分割し、各プロセスが並列に自領域を解き、境界条件に隣の前回反復の解を使う反復を繰り返します。反復を重ねるほどオーバーラップ部分の値が整合し、全体解に収束します。
| 手法 | オーバーラップ | 特徴 |
|---|---|---|
| 加法的シュワルツ法 | あり | 全部分領域を並列に更新。並列性は高いが収束はやや遅い |
| 乗法的シュワルツ法 | あり | 部分領域を順番に更新。収束は速いが逐次依存があり並列化しにくい |
| 非重複型(FETI系) | なし(境界のみ共有) | 境界の未知数のみ解き、計算・通信を削減 |
実務ではシュワルツ法単体より、共役勾配法などクリロフ部分空間法の前処理として使うのが主流です。部分領域数(≒プロセス数)を増やしても反復回数が増えにくい前処理を設計できるかが、並列PDE計算のスケーラビリティを左右します。
負荷分散と通信オーバーヘッドのバランス
性能は次の2点のバランスで決まります。
- 負荷分散: 各プロセスの計算量(格子点数×コスト)を均等にする。
- 通信オーバーヘッド: 部分領域どうしの境界面積(交換するゴースト層の量)を小さくする。
格子が不均一だと単純な等分割では計算量が偏るため、格子点をグラフとみなして分割するパーティショニングが使われます。通信量は分割の形状にも依存し、同じ格子点数でも細長い短冊状より正方形・立方体に近い塊のほうが境界面積は小さく、表面積対体積比の問題として現れます。
2次元領域を N プロセスに分割する場合:
1次元分割(短冊状): 境界辺は左右2辺。1辺の長さは N によらず長いまま
2次元分割(√N×√N): 境界辺は最大4辺。1辺の長さは 1/√N で N を増やすほど縮む
→ N が大きい大規模計算ほど、2次元・3次元分割が有利
このため大規模計算では1次元分割ではなく2次元・3次元のブロック分割が好まれます。ただし分割次元を上げると隣接プロセス数(通信相手の数)が増えるため、通信の起動レイテンシが効いてくる小規模問題では、あえて分割数を絞ることもあります。
問題サイズを固定してプロセス数を増やす強スケーリングでは、担当格子点数が減り境界比率が相対的に増えて通信が支配的になりやすい。プロセスあたりの担当量を一定に保つ弱スケーリングでは表面積対体積比が保たれ、通信悪化を抑えやすくなります。
まとめ
- 領域分割法は隣接点依存のため、空間を切った瞬間にゴースト(ハロ)交換という通信を必然的に発生させる。
- シュワルツ法は部分領域を重ねて境界値を反復交換し、分割前の解への収束を理論的に保証する。加法的(並列向き)と乗法的(収束が速いが逐次的)にトレードオフがある。
- 性能は負荷分散と通信オーバーヘッド(表面積対体積比)のバランスで決まり、分割の次元・形状、強/弱スケーリングのどちらを狙うかで最適解が変わる。
HPC・科学技術計算 Article
領域分割法(並列PDE計算)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
HPC
比較で見る軸
難易度: advanced / カテゴリ: HPC・科学技術計算 / タグ数: 5
導入後に効く点
シュワルツ法は部分領域を重ねて反復的に境界値を交換し合うことで、分割しても元の方程式の解に収束させる仕組み。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- HPC・科学技術計算
- タグ数
- 5
判断チェックリスト
- 自社の用途が「HPC / 並列計算」に近いか確認する。
- 強みである「計算領域を部分領域に切り分け各プロセスへ割り当てる領域分割法は、境界のゴースト(ハロ)交換という通信を必然的に生む。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。