制御ハザード
ジャンプ(分岐)の結果がまだ確定していないため、パイプラインが次にどの命令を取り込むべきか分からなくなる状態。分岐するかしないかが決まるまで、CPUは取り込み先を知らない。
深いパイプラインは毎サイクル新しい命令を取り込むが、条件分岐(ifやループ)の結果が出るのは数ステージ後である。答えを待てば分岐のたびに大きなバブルができるが、コードは分岐だらけ(5〜10命令に1回)である。解決策が分岐予測で、結果を推測し、その経路を投機的に取り込む。予測が当たれば(現代のCPUでは95%超)パイプラインは止まらない。外れれば、投機的に取り込んだ命令をすべて破棄する(分岐予測ミスのフラッシュ、通常15〜20サイクルの無駄)。分岐予測が性能にとって決定的なのも、データ依存の予測しにくい分岐が高くつくのもそのためである。三種類のハザードの一つ。