CPU は AP コンピュータシステム分野の出発点。命令サイクル (フェッチ→デコード→実行) と、それを並列化するパイプラインの仕組みを押さえます。
CPU って中で何してるの?
基本は『命令フェッチ → 命令デコード → 実行』のサイクル。
これを 1命令ずつ順番にやるのが古典的な動作よ。
このサイクルを段階的に重ねるのが パイプライン。
命令1がデコード中に、命令2がフェッチを始める、という具合に並行処理して、見かけの命令スループットを向上させます。
重なって動かしてるんですねぇ。
何か問題は出ないんですかぁ?
はい、発生します。
これらを総称してハザードと呼びます。
データハザード (前の命令の結果に依存)・制御ハザード (分岐) ・構造ハザード (資源競合) の3種ですね。
分岐ハザードは 分岐予測 で軽減。
当たれば高速、外れたらパイプラインを破棄してやり直し。
投機実行 のような技術と組み合わせて性能を上げる代わりに、Spectre/Meltdown のようなセキュリティ問題も生んだわ。
確認クイズ
CPU パイプラインで『データハザード』が発生する典型的なケースはどれか。
- 後続命令が前命令の結果を入力として必要とする
- 条件分岐の結果が確定する前に後続命令を投機実行する
- 同じ機能ユニットを2つの命令が同時に使おうとする
- メモリアドレスが境界を跨がってアクセスされる
こたえを見る
正解: 1. 後続命令が前命令の結果を入力として必要とする
データハザードは『後続命令が前命令の結果を入力として必要とする』場合に発生。フォワーディングやストールで対処します。2 は制御ハザード、3 は構造ハザード。