問題タブ [branch-prediction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 分岐予測と分岐先予測
if
ステートメントは分岐予測により依存しており、v-table ルックアップは分岐ターゲット予測により依存しているということを正しく理解していますか? vテーブルに関しては、「分岐予測」はなく、ターゲット予測だけですか?
v-table が CPU によってどのように処理されるかを理解しようとしています。
x86 - 分岐予測ユニットへの入力?
ここでスライド 13 を見ています。
http://research.engineering.wustl.edu/~songtian/pdf/intel-haswell.pdf
(Haswell の大きなブロック図が表示されるはずです)
上部には「Branch Predictors」と呼ばれるブロックがあり、2 つの矢印が出ています。ここでのプロセスの正しい順序は何ですか? まず、「分岐予測子」ブロックには入力がありません?!
分岐予測子が他の要素とどのように相互作用するか (図を使用して) 誰かが説明してくれませんか?
さらに、ブランチ ターゲット (予測) バッファーが接続するダイアグラムの要素はどれですか? ブランチ プレディクタから矢印で離された同じ 2 つ (オレンジと紫) でしょうか?
x86 - 分岐予測と組み合わせた分岐ターゲット予測?
編集:確かにどのブランチが取られるかを予測することによって、あなたも効果的にターゲット予測を行っているので、私の混乱が生じます??
この質問は、このトピックに関する最初の質問に本質的にリンクしています。
受け入れられた答えを見る:
無条件分岐、固定対象
- 無限ループ
goto
声明break
またはcontinue
ステートメント- ステートメントの「then」節の終わり
if/else
(節を飛び越えるためelse
)- 非仮想関数呼び出し
無条件分岐、可変ターゲット
- 関数から戻る
- 仮想関数呼び出し
- 関数ポインタ呼び出し
switch
ステートメント (ジャンプ テーブルにコンパイルされている場合)条件分岐、固定対象
if
声明switch
ステートメント (一連のif/else
ステートメントにコンパイルされている場合)- ループ条件テスト
&&
and||
演算子_- 三項
?:
演算子条件分岐、可変ターゲット
- 通常の状況では発生する可能性は低くなりますが、コンパイラは上記の 2 つのケースを組み合わせて、最適化として 1 つを合成する場合があります。たとえば、x86 では、テール コールの最適化により、コンパイラがコード
if (condition) { obj->VirtualFunctionCall(); }
を条件付き間接ジャンプのようにjne *%eax
最適化して、関数の最後に表示される場合があります。
次のコードがある場合:
(BP = 「分岐予測」および BTP = 「分岐ターゲット予測」)
その非常に明白な BP は、条件を評価するために使用されますsomething
。ただし、ブランチで何が起こるかを判断するために BTP も関与しているかどうかを理解しようとしていa
ます。BTPは、BP の結果に応じて、ブランチa
/にあるコードのアドレスも決定しますか?b
このウィキペディアのページ ( http://en.wikipedia.org/wiki/Branch_target_predictor ) でお願いします:
コンピューター アーキテクチャでは、分岐ターゲット プレディクターは、プロセッサの実行ユニットによって分岐命令のターゲットが計算される前に、実行される条件付き分岐または無条件分岐命令のターゲットを予測するプロセッサの一部です。
条件が予測された後、ターゲットを予測するために BTP が使用されることを示唆しています。
1) 誰かが上記を明確にしてくれませんか?
関連する 2 つ目の質問 - BP と BTP は、CPU のフェッチ/デコード/実行/ライトバック パイプラインと対話する方法がどのように異なるのですか? BP はフェッチ段階またはデコード段階から開始しますか? 条件付きコードの実行段階の後、予測が正しかったかどうかを確認し、分岐予測キャッシュを更新できます。
2) フェッチ/デコード/実行/ライトバック CPU ステージに関して、BTP はどのように機能しますか?
branch-prediction - 分岐先予測と分岐予測
分岐ターゲット述語 (BTP) は、分岐述語 (BP) と同じではありません。BTP はブランチがジャンプする場所を見つけますが、BP はどのブランチがおそらく取られるかを決定するだけであることを理解しています。
BTP は BP に依存していますか? BTP が BP を使用してどのブランチが取られるかを予測しない場合、どうすればブランチのターゲットを知ることができますか?
なぜこんなに大きな違いがあるのか わかりませんか?分岐が行われると予測されると、命令でアドレスを読み取るのと同じくらい簡単にターゲットを見つけることができませんか?