# パイプライン処理 プロセッサが命令を「フェッチ→デコード→実行→ライトバック」の各ステージに分割し、複数の命令を組立ラインのように**重複処理**する技法。1985年以降のあらゆるプロセッサに採用されている。 ## 基本原理 逐次実行では CPI(Cycles Per Instruction)= 4 程度だが、パイプライン化により **CPI = 1** を達成する。4 段パイプラインなら理論上 4 倍のスループット向上になる。 ステージ間は**ラッチ**で区切られ、共通クロック信号が命令をパイプライン上で「送り出す」。隣接するステージへの結果の早期受け渡しを可能にする**バイパス(フォワーディング)**経路も設けられる。 ## バブルと依存関係 命令間に**データ依存**がある場合、後続命令は前命令の結果が揃うまで実行できない。この待機サイクルをパイプラインの**バブル**と呼ぶ。整数加算なら 1 サイクルで済むが、乗算は数サイクルかかるためバブルが発生しやすい。 命令が実行ステージに達してから結果が使えるまでのサイクル数を**レイテンシ**という。典型値: | 操作 | レイテンシ目安 | |---|---| | 整数演算 | 1 サイクル | | 浮動小数点加算・乗算 | 3〜6 サイクル | | 整数除算 | 10+ サイクル | | L1 キャッシュ読み込み | 3〜5 サイクル | ## 超パイプライン(Superpipelining) 各ステージをさらに細分して段数を増やし、クロック周波数を引き上げる手法。スループット(IPC)は変わらないが、同じ回路技術でより高いクロックで動作できる。 代表的なパイプライン段数: | 段数 | プロセッサ例 | |---|---| | 6 | UltraSPARC T1 | | 12 | Pentium Pro/II/III | | 14〜19 | Sandy Bridge / Haswell / Zen 1〜5 | | 20 | Pentium 4 | | 31 | Pentium 4E Prescott(電力の壁で失敗) | > [!key-insight] 深いパイプラインの逓減則 > パイプラインが深くなるほど分岐予測の誤り時のペナルティが大きくなり、バブルも増える。Pentium 4 の 31 段パイプラインはその失敗事例。 x86 プロセッサは RISC より段数が多い傾向がある——複雑な x86 命令のデコードに追加ステージが必要なため。 ## 関連概念 - **分岐によるハザード** → [[分岐予測]] - **複数命令の同時発行** → [[スーパースカラー実行]] - **実行時命令並び替え** → [[アウトオブオーダー実行]] - **メモリレイテンシによるバブル** → [[メモリ階層とキャッシュ]] ## 横断的知見 - 今後の取り込みで、複数ソース間の関係を追記する。 ## 未解決の問い - この概念をどのソース群で継続的に検証するか。