1

私の質問は、最新の CPU アーキテクチャでそれらがどのように共存し、連携するのかということです。

4

1 に答える 1

12

あなたはそれを少し反転させました。フェッチするたびに、分岐予測子にインデックスを付けます。これにより、受信したばかりの命令が実行されるかどうかがわかります。取られたブランチにデコードされます。そうでない場合は、次の連続したアドレスをフェッチします。しかし、分岐予測子が分岐が発生することを示している場合、この命令をまだデコードしていないため、次にフェッチする命令がわかりません。したがって、分岐が解決するのを待っているサイクルを無駄にしないためには、分岐ターゲット バッファー (または BTB) を使用します。BTB には、ブランチが制御フローをリダイレクトした以前のアドレスが格納されます。このメカニズムを使用して、今度は制御フローがリダイレクトされる場所を予測しようとしています。この手法は、リターン アドレス スタックと組み合わせると、無条件分岐、関数呼び出し、およびリターンの成功率が 100% になります。条件付き分岐では、成功率はわずかに低くなりますが、分岐ターゲットの時間的局所性が高いことを考えると、依然として非常に良好です。

分岐命令が実際に解決されると (通常、実装に応じて、パイプラインのデコードまたは実行段階で)、分岐予測子と BTB の両方の値を調整して、将来の予測のために最新の情報を取得します。

以下は、BTB のルックアップと更新がどのように行われるかを絵で説明したものです。

http://www-ee.eng.hawaii.edu/~tep/EE461/Notes/ILP/buffer.html

于 2014-07-29T06:53:22.643 に答える