パイプライン

パイプライン

執筆済 コンピュータアーキテクチャ

命令の処理を段階に分け、複数の命令を重ねて流す。

時刻 →
命令1: IF ID EX MEM WB
命令2:    IF ID EX  MEM WB
命令3:       IF ID  EX  MEM WB

1 命令の処理時間(レイテンシ)は変わらないが、 スループットが段数倍になる。

工場の流れ作業と同じ発想。

ハザード#

理想どおりには流れない。

ハザード 原因 対処
構造 資源の取り合い 資源を増やす
データ 前の命令の結果が要る フォワーディング、ストール
制御 分岐先が決まらない 分岐予測

分岐予測#

条件分岐の結果は、実行してみないと分からない。 待つと数サイクル無駄になる。

そこで予測して先に進む。 外れたらパイプラインを捨ててやり直す(数十サイクルの損失)。

現代の予測器は 95〜99% 当てる。 過去の分岐履歴のパターンを学習する仕組みで、 実質的に小さな機械学習器といえる。

段数のトレードオフ#

段数を増やすと 1 段あたりが短くなり、クロックを上げられる。 しかし

  • 分岐予測ミスのペナルティが増える
  • ハザードの影響が大きくなる

Pentium 4 は 31 段まで深くしたが、 予測ミスのコストと消費電力で行き詰まり、 以降は 15 段前後に戻った。 深ければ速いわけではないという教訓。

参考文献#

  • David A. Patterson, John L. Hennessy. Computer Organization and Design: RISC-V Edition, 2nd ed. Morgan Kaufmann, 2020.
  • John L. Hennessy, David A. Patterson. Computer Architecture: A Quantitative Approach, 6th ed. Morgan Kaufmann, 2017.
  • Randal E. Bryant, David R. O’Hallaron. Computer Systems: A Programmer’s Perspective, 3rd ed. Pearson, 2016. https://csapp.cs.cmu.edu/
ノート一覧を閉じる