ヤコビ法と並列計算
ヤコビ法(Jacobi反復法)は、巨大かつ疎な連立一次方程式
参考ドキュメント
- SolverIterative-25-29(ヤコビ法・GS法の収束条件と対角優位性, 東京大学) https://nkl.cc.u-tokyo.ac.jp/15n/SolverIterative-25-29.pdf
- R. Barrett et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods(反復法の定番資料, PDF) https://www.netlib.org/templates/templates.pdf
- MPI programming by the example of Jacobi computations(MPIと領域分割の例, PDF) https://www.uio.no/studier/emner/matnat/ifi/IN3200/v22/teaching-material/in3200-jacobi-2022.pdf
1. 取り扱う問題と記号
を考える。
行列分割として
を用いる。ここで
2. ヤコビ法の反復式
ヤコビ法は、
よって、反復
となる。
成分表示は
である。更新に必要なのは「前の反復
3. 誤差伝播と収束条件
真の解を
に従う。したがって収束条件は
(
よく使われる十分条件として「対角優位」がある。例えば行ごとに
が成り立つと、ヤコビ法は収束しやすい(ただし十分条件であり必要条件ではない)。
4. 緩和ヤコビ法
ヤコビ法は単純である一方、収束が遅い場合が多い。そこで緩和係数
5. 反復停止条件
計算では誤差
で停止判定する。典型例は
である。疎行列では
6. ガウス・ザイデル法との違い
ヤコビ法とガウス・ザイデル法の反復式を並べると差が見えやすい。
- ヤコビ法(全成分を前反復から計算)
- ガウス・ザイデル法(更新済み成分を即座に利用)
ガウス・ザイデル法は収束が速い場合が多い一方、
7. 並列化
7.1 共有メモリ並列(スレッド並列)
ヤコビ法は、反復
- 入力:
- 出力:
という二配列モデルで完結する。
したがって、
- 各行の非零要素
と の積和(SpMVまたは行単位の積和) - 最後に
を書き込む である。
注意点として、ヤコビ法はしばしば「メモリ帯域律速」になりやすい。
7.2 分散メモリ並列
空間離散化に由来する
例として2次元5点差分(ポアソン型)を想起すると、各プロセスは自領域内部の更新はローカルに完結するが、境界付近の更新には隣接領域の値が必要である。これをハロー(ゴーストセル)領域に受け取り、反復ごとに近傍通信する。
概念的には各反復で
- 隣接プロセスと境界データを交換(ハロー更新)
- 自領域の全点でヤコビ更新(完全にローカル)
- 必要なら残差ノルムを全体集約(グローバル還元) という流れになる。
7.3 グローバル還元
残差ノルム
であり、分散メモリでは部分和を足し上げる全体通信(例:Allreduce)が必要になる。反復ごとにこれを行うと、通信遅延が反復全体を支配し得る。
対策としては
- ノルム評価の頻度を下げる(毎反復ではなく数反復ごと)
- 近似的な停止判定(ローカル基準を併用)
- 非同期反復(次節) などが検討対象となる。
7.4 非同期ヤコビ
大規模並列では「同期」のコストが顕在化する。非同期ヤコビは、厳密に同じ
- 受け取れた最新の境界値を使って更新を進める
- 同期点を減らす という発想である。
ただし、非同期化は収束解析が難しく、通信遅延・近似誤差・停止判定の設計と一体で扱う必要がある。
7.5 ブロックヤコビ
ヤコビ法は反復法であると同時に「前処理」の基本形でもある。前処理行列を
とみなせば、
分散並列では、対角だけでなく各プロセスのローカルブロックを
8. 位置づけ
ヤコビ法単体は、難しい問題では収束が遅くなりやすい。その一方で、並列性の高さから以下の用途で重要である。
- 多重格子法の平滑化(緩和ヤコビ)
- Krylov反復法の前処理(ヤコビ前処理、ブロックヤコビ)
- 近似解で十分な場面の初期反復(粗い解の獲得)
9. 性質の比較
| 手法 | 反復更新の依存 | 収束傾向 | 並列化のしやすさ | 典型的な役割 |
|---|---|---|---|---|
| ヤコビ | 前反復のみ参照(独立) | 遅めになりやすい | 高い(データ並列向き) | 平滑化・前処理・初期反復 |
| 緩和ヤコビ | 前反復のみ参照(独立) | 高い | 多重格子の平滑化 | |
| ガウス・ザイデル | 更新済み成分に依存 | 速い場合が多い | 低い(工夫が必要) | 小規模・逐次向き、または色分割等で並列化 |
| SOR/SSOR | GSに緩和を追加 | 速い場合が多い | 低〜中 | 収束加速、ただし設計が難しい |