分岐予測
静的予測は最も単純な分岐予測技法であり、コード実行時の動的な履歴を情報として必要としない。その代わり、分岐命令の内容にのみ基づいて分岐予測を行う。
SPARCとMIPS(最初の2つの商用RISCアーキテクチャ)で初期に実施された分岐予測は単純なものだった。それは、常に分岐しないと予測して命令順に実行を行おうとするものである。実際に分岐すると判明した時点(分岐命令の解釈フェーズ)で不連続なアドレスへの分岐を準備する。
これらのCPUはデコード段階で分岐命令を評価し、1サイクルで命令をフェッチする。従って分岐アドレスの命令をフェッチするには2サイクルかかり、その間にどうしても分岐命令の次の命令をフェッチしてしまう。これを有効利用するために、これらのアーキテクチャでは分岐遅延スロットを定義した。
より複雑な静的予測方式では、プログラムの流れる方向とは逆行する分岐命令(=前に戻る分岐命令)をループを繰り返すための分岐と見なし、分岐する(=ループする)可能性大と予測する。逆にプログラムの流れる方向に分岐する命令(=先に進む分岐命令)はループからの脱出や例外的な処理と見なして、分岐しない可能性大と予測する。
また、静的予測方式には、何らかの静的な分岐予測情報(分岐命令に付与されたヒントビット等)に基づいて、分岐する/分岐しないを予測する方式もある。インテルの Pentium 4 では分岐予測ヒントを付与する方式だったが、後継のプロセッサではこれを採用していない。
静的予測は、動的分岐予測を使用するプロセッサの予備の技術(動的予測のためのどのような情報もない時の予備手段)として使われる。モトローラMPC7450 (G4e)とインテルPentium 4は予備手段としてこの技術を使っている。
歴史的にはパイプラインも分岐予測も、マイクロプログラム方式のCISCプロセッサで生まれ発達した技術であり、RISCを含むマイクロプロセッサでの分岐予測は最初は簡単なものであった。なお「マイクロプログラム方式のプロセッサは分岐予測を必要としなかった」という説があるが間違いである。一般論としてRISCの方がパイプラインの効果が発揮しやすい(逆に言えばパイプラインが乱れると性能劣化が大きい)ため、結果的に分岐予測が重要というだけである。
IBM 7030 (Stretch) は1950年代末に設計され、インデックスレジスタに依存する全ての無条件分岐と全ての条件分岐を事前評価する。他の条件分岐については、最初の2つの生産モデルで「分岐しない」という静的予測を実装していたが、その後のモデルでは(今日の条件コードに相当する)インジケータビットの現在値に基づく分岐予測を実装している。設計の早い段階で、分岐命令にヒントビットを持たせることも検討されたが、最終的にはやめている。予測失敗時のリカバリは先読みユニットで行ったが、このリカバリに時間がかかったことが性能が目標に達しなかった一因だとされた。その後のIBMの大型機は分岐予測と投機的実行を行わず、再び実装したのは1985年の IBM 3090 からである。
2ビット飽和カウンターは1977年、Tom McWilliams と Curt Widdoes が考案しローレンス・リバモア国立研究所の S-1 というスーパーコンピュータで採用した、また、CDCの Jim Smith がそれとは独立に1979年に考案している。