【ぶんきよそく】

分岐予測 とは?

💡 信号が青か赤か、結果を見る前に走り出すCPUの先読み術
📌 このページのポイント
分岐予測 ― 予測ヒット vs ミス 予測ヒット(正解) IF ID 分岐判定 予測命令 予測命令 予測命令 ストールなし! パイプライン継続 予測ミス(不正解) IF ID 分岐判定 破棄 破棄 IF ID EX ペナルティ! パイプライン破棄 正しい命令でやり直し → 通常ステージ 分岐判定 予測成功 予測失敗(破棄)
分岐予測のヒットとミスの比較
ひよこ ひよこ

分岐予測って何を予測してるの?

ペンギン先生 ペンギン先生

プログラムif文みたいな条件分岐で、「次はどっちの道に進むか」を予測してるんだ。CPUはパイプラインといって命令を流れ作業で処理してるから、分岐の結果が出るまで何もしないと大きなロスになるんだよ

ひよこ ひよこ

なんで結果を待ってから進めないの?

ペンギン先生 ペンギン先生

パイプラインは工場のベルトコンベアみたいなもので、複数の命令を同時に処理してるんだ。分岐の結果を待つと、コンベア上の次の命令がすべてストップしちゃう。だから「たぶんこっちだろう」と予測して先に命令を流し始めるんだよ

ひよこ ひよこ

予測が外れたらどうなるの?

ペンギン先生 ペンギン先生

パイプラインフラッシュといって、先読みで処理していた命令を全部捨てて、正しい方向からやり直すんだ。数十クロックサイクルのロスになるよ。だから予測精度がCPUの性能に直結するんだ

ひよこ ひよこ

どうやって予測してるの?

ペンギン先生 ペンギン先生

一番シンプルなのは「ループの分岐は常に戻る」と仮定する静的予測。現代のCPUは過去の分岐履歴をテーブルに記録して、パターンを学習する動的予測を使ってるよ。2ビット飽和カウンタやニューラル分岐予測器など、どんどん高度になってるんだ

ひよこ ひよこ

最近のCPUだとどのくらい当たるの?

ペンギン先生 ペンギン先生

95〜99%くらい当たるよ。ただし、この仕組みを悪用したのが2018年に発見されたSpectreという脆弱性なんだ。投機的に実行された命令がキャッシュに痕跡を残すことを利用して、本来読めないメモリの内容を推測できてしまうという深刻な問題だったよ

ひよこ ひよこ

高速化の仕組みがセキュリティの問題になるなんて意外だね!

ペンギン先生 ペンギン先生

そうなんだ。性能とセキュリティはトレードオフの関係にあることが多いんだよ。Spectre以降、CPUメーカーはマイクロコードの修正やOSレベルの対策を入れてるけど、完全な解決は難しくて今もCPU設計の大きな課題になってるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分岐予測」って出てきたら「if文の結果を先読みして、パイプラインを止めない高速化テクニック」と思えればだいたいOK!
📖 おまけ:英語の意味
「Branch Prediction」 = 分岐の予測
💬 branchは「枝」のことで、プログラムの実行経路が枝分かれするのを予測するから「分岐予測」と呼ばれるんだよ
← 用語集にもどる