... | ... | @@ -4,8 +4,8 @@ |
|
|
分岐予測とは、「(1)分岐命令であるか」「(2)分岐命令であれば、その飛び先」「(3)条件分岐であるか」「(4)条件分岐命令であれば、そもそも条件が成立するか」の四つを予測するものです((3)は必須ではありません[^1])。
|
|
|
|
|
|
この中では(1)(2)が重要な部分です。
|
|
|
(4)のみを分岐予測器と呼ぶことが多いですが、それよりも(1)(2)の方がはるかに重要です。
|
|
|
以下では区別するために(4)を「分岐方向予測器」と呼ぶことにします。
|
|
|
(4)のみを分岐予測と呼ぶことが多いですが、それよりも(1)(2)の方がはるかに重要です。
|
|
|
以下では区別するために(4)のことを「分岐方向予測」と呼ぶことにします。
|
|
|
遅延分岐を使うことで(1)(2)を不要とできますが、遅延分岐は過去の遺物です。忘れましょう。
|
|
|
|
|
|
(1)(2)(3)の予測を行うためには、分岐先バッファ(branch target buffer, BTB)というハードウェアが用いられます。
|
... | ... | @@ -19,7 +19,7 @@ |
|
|
普通の五段パイプラインで考えてみます。
|
|
|
分岐先バッファがなければ、フェッチしてデコードするまで分岐命令であることが分かりません。
|
|
|
したがって、分岐命令をデコードしているサイクルでフェッチされた命令は破棄しなければいけません。
|
|
|
つまり最低1 cycleのペナルティが生じます。
|
|
|
つまり分岐方向予測が100%当たったとしても、分岐が成立するたびに最低1 cycleのペナルティが生じます。
|
|
|
分岐先バッファがあれば、フェッチと並行して分岐であることが分かるため、その次のサイクルのフェッチは分岐先の命令をフェッチすることができます。
|
|
|
|
|
|
### 予測方法
|
... | ... | |