Skip to content

ヤコビ法と並列計算

ヤコビ法(Jacobi反復法)は、巨大かつ疎な連立一次方程式 Ax=b を、行列の対角成分を用いた反復更新で解く定常反復法である。差分化・有限要素化で現れるポアソン型・拡散型・弾性型の線形方程式を、単純な構造で扱える点が特徴である。

参考ドキュメント

1. 取り扱う問題と記号

n 元連立一次方程式

Ax=b,ARn×n, x,bRn

を考える。A は疎であり、n が大きくても A の全要素を保持しない(スパース形式で保持する)状況を想定する。

行列分割として

A=D+L+U

を用いる。ここで D は対角成分のみ、L は下三角(対角成分を除く)、U は上三角(対角成分を除く)である。

2. ヤコビ法の反復式

ヤコビ法は、D のみを左辺に残して反復更新する方法である。

(D+L+U)x=b  Dx=b(L+U)x

よって、反復 k=0,1,2, に対して

x(k+1)=D1(b(L+U)x(k))

となる。

成分表示は

xi(k+1)=1aii(bijiaijxj(k))(i=1,,n)

である。更新に必要なのは「前の反復 x(k)」のみであり、各 i の更新は互いに独立である。

3. 誤差伝播と収束条件

真の解を x、誤差を e(k)=x(k)x とする。ヤコビ法の誤差は

e(k+1)=Be(k),B=D1(L+U)

に従う。したがって収束条件は

ρ(B)<1

ρ はスペクトル半径)である。

よく使われる十分条件として「対角優位」がある。例えば行ごとに

|aii|>ji|aij|

が成り立つと、ヤコビ法は収束しやすい(ただし十分条件であり必要条件ではない)。

4. 緩和ヤコビ法

ヤコビ法は単純である一方、収束が遅い場合が多い。そこで緩和係数 ω を導入した緩和ヤコビ法(Weighted / Relaxed Jacobi)が用いられる。

x(k+1)=(1ω)x(k)+ωD1(b(L+U)x(k))

ω=1 で基本のヤコビ法に一致する。ω を適切に選ぶことで、特に多重格子法の平滑化(高周波誤差の減衰)に有用な更新となることが多い。

5. 反復停止条件

計算では誤差 e(k) を直接評価できないため、残差

r(k)=bAx(k)

で停止判定する。典型例は

r(k)2b2<εまたはr(k)2<ε

である。疎行列では r(k) の計算は「疎行列ベクトル積(SpMV)」として実装されることが多い。

6. ガウス・ザイデル法との違い

ヤコビ法とガウス・ザイデル法の反復式を並べると差が見えやすい。

  • ヤコビ法(全成分を前反復から計算)
xi(k+1)=1aii(bij<iaijxj(k)j>iaijxj(k))
  • ガウス・ザイデル法(更新済み成分を即座に利用)
xi(k+1)=1aii(bij<iaijxj(k+1)j>iaijxj(k))

ガウス・ザイデル法は収束が速い場合が多い一方、x1(k+1)x2(k+1) の依存が生じるため、素朴には並列化が難しい。ヤコビ法はその逆で、収束は遅めでも並列化しやすい。

7. 並列化

7.1 共有メモリ並列(スレッド並列)

ヤコビ法は、反復 k における更新が

  • 入力:x(k)
  • 出力:x(k+1) という二配列モデルで完結する。

したがって、i ループをスレッドで分割しやすい。計算の中心は

  • 各行の非零要素 aijxj(k) の積和(SpMVまたは行単位の積和)
  • 最後に xi(k+1) を書き込む である。

注意点として、ヤコビ法はしばしば「メモリ帯域律速」になりやすい。A(疎行列)と x(k) の参照が不規則になり、キャッシュ効率が性能を左右する。

7.2 分散メモリ並列

空間離散化に由来する A は、格子・要素が空間的に局在した近傍結合を持つことが多い。そこで領域分割(domain decomposition)により、未知数をプロセスごとに分担する。

例として2次元5点差分(ポアソン型)を想起すると、各プロセスは自領域内部の更新はローカルに完結するが、境界付近の更新には隣接領域の値が必要である。これをハロー(ゴーストセル)領域に受け取り、反復ごとに近傍通信する。

概念的には各反復で

  1. 隣接プロセスと境界データを交換(ハロー更新)
  2. 自領域の全点でヤコビ更新(完全にローカル)
  3. 必要なら残差ノルムを全体集約(グローバル還元) という流れになる。

7.3 グローバル還元

残差ノルム r(k)2

r22=i=1nri2

であり、分散メモリでは部分和を足し上げる全体通信(例:Allreduce)が必要になる。反復ごとにこれを行うと、通信遅延が反復全体を支配し得る。

対策としては

  • ノルム評価の頻度を下げる(毎反復ではなく数反復ごと)
  • 近似的な停止判定(ローカル基準を併用)
  • 非同期反復(次節) などが検討対象となる。

7.4 非同期ヤコビ

大規模並列では「同期」のコストが顕在化する。非同期ヤコビは、厳密に同じ x(k) を全プロセスで揃えてから更新するのではなく、

  • 受け取れた最新の境界値を使って更新を進める
  • 同期点を減らす という発想である。

ただし、非同期化は収束解析が難しく、通信遅延・近似誤差・停止判定の設計と一体で扱う必要がある。

7.5 ブロックヤコビ

ヤコビ法は反復法であると同時に「前処理」の基本形でもある。前処理行列を

P=D

とみなせば、P1A の条件を改善して Krylov 法(CG/GMRES等)を加速する入口になる。

分散並列では、対角だけでなく各プロセスのローカルブロックを P とするブロックヤコビ前処理も自然である。これは「各領域内はローカルに解き、領域間は反復でつなぐ」という並列向きの設計である。

8. 位置づけ

ヤコビ法単体は、難しい問題では収束が遅くなりやすい。その一方で、並列性の高さから以下の用途で重要である。

  • 多重格子法の平滑化(緩和ヤコビ)
  • Krylov反復法の前処理(ヤコビ前処理、ブロックヤコビ)
  • 近似解で十分な場面の初期反復(粗い解の獲得)

9. 性質の比較

手法反復更新の依存収束傾向並列化のしやすさ典型的な役割
ヤコビ前反復のみ参照(独立)遅めになりやすい高い(データ並列向き)平滑化・前処理・初期反復
緩和ヤコビ前反復のみ参照(独立)ωで調整可能高い多重格子の平滑化
ガウス・ザイデル更新済み成分に依存速い場合が多い低い(工夫が必要)小規模・逐次向き、または色分割等で並列化
SOR/SSORGSに緩和を追加速い場合が多い低〜中収束加速、ただし設計が難しい