Gauss-SeidelはなぜJacobiより5倍遅いのか、ループ展開で依存性を断ち切る

Measuring Gauss-Seidel loop-carried dependency and fixing it via loop unrolling

Gauss-SeidelはなぜJacobiより5倍遅いのか、ループ展開で依存性を断ち切る

Gauss-Seidel法はJacobi法より収束が速いのに、実装すると4〜5倍遅くなる。原因はループ運搬依存性で、コンパイラがベクトル化できないことにある。OSACAで解析すると、Gauss-Seidelの依存連鎖は12サイクルでレイテンシ律速、Jacobiはスループット律速と判明。単純なループ展開では依存性は消えず、依存そのものを書き換える必要がある。

Gauss-Seidelの依存連鎖は本質的にアルゴリズムに組み込まれているのであって、コンパイラが見落としたスケジューリング上の事故ではない。

この日のほかの記事

2026-09-16