分岐予測

提供: 自作パソコン入門
2015年5月10日 (日) 16:01時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「分岐予測 (Branch Prediction) とは、プログラムの条件分岐命令の分岐を予測し、命令パイプラインの効果をできるだけ維持し、...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

分岐予測 (Branch Prediction) とは、プログラムの条件分岐命令の分岐を予測し、命令パイプラインの効果をできるだけ維持し、性能を高めるためのCPUの機能です。分岐予測を行うことで、投機的実行が行えます。

読み方

分岐予測
ぶんきよそく
Branch Prediction
ぶらんち ぷれでぃくしょん

概要

条件分岐命令が分岐するか、しないか、は、分岐条件の計算をして、条件分岐命令が実行ステージを過ぎるまではわかりません。

if ( 条件分岐命令 ) {
	// ここに来るのか?
} else {
	// ここに来るのか?
}

分岐予測を行わない場合、条件分岐命令が実行ステージを過ぎるまで、次にフェッチすべき命令が確定しません。その結果、CPUのパイプラインは、フェッチステージで次の命令が確定するまで、待たなければなりません。

分岐予測では、条件分岐を予測し、次に命令される命令をフェッチし、投機的実行を行います。

分岐予測が間違っていた場合、投機的実行は破棄され、パイプラインは、正しい分岐後の処理を実施します。

分岐予測の的中率

Pentium 4 の分岐予測の的中率は、95%以上です。

分岐予測が外れた場合

分岐予測が外れた場合、正しい分岐先から命令を処理します。 分岐予測ミスによるペナルティは、パイプラインのステージ数が多くなるほど、重くなります。

Intel Core i7の分岐予測

Intel Core i7では

  • 2つの分岐ターゲットバッファを持つ
  • 2つ以上の分岐予測器を持つ

となっています。

Coreアーキテクチャでは、パイプラインを大幅に減らし、14段になりました。分岐予測ミスのリスクを極力下げるアプローチです。

分岐ターゲットバッファ

分岐ターゲットバッファとは、分岐命令の実行を高速化するためのCPUのバッファです。BTBとも呼ばれます。分岐ターゲットバッファは、プログラムの条件分岐命令の過去の実行結果を記憶しておきます。条件分岐命令に遭遇したら、分岐ターゲットバッファを参照して、分岐命令を行います。

パイプライン数

Intel CPUのパイプライン段数
CPU パイプライン段数 パイプライン数
Pentium 5 2
Pentium Pro 12 -
Pentium II 12 -
Pentium III 12 -
Pentium M 10 -
Pentium 4 20 -
Pentium 4 Prescott 31 -
Intel Core, Yonah 13 -
Core2 Merom 14 -
第1世代 Core Nehalem 16 -
第2世代 Core Sandy Bridge 16 -
第3世代 Core Ivy Bridge 14 -
第4世代 Core Haswell 14 -

関連項目




スポンサーリンク