問題タブ [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.

0 投票する
1 に答える
670 参照

cpu-architecture - 単純に両方を並行して実行するのではなく、なぜ分岐を予測するのでしょうか?

CPU を作成する場合、間違った分岐が選択されると、分岐予測が大幅に遅くなると思います。では、CPU 設計者は、単純に両方のブランチを実行し、どちらが選択されたかを確認してから 1 つを切断するのではなく、ブランチを選択するのはなぜでしょうか?

これは、短い数の命令内で 2 つまたは 3 つの分岐の深さしかできないこと、または並列ステージの数が途方もなく大きくなることを認識しています。このようないくつかの段階は意味がありませんか?物事を大幅にスピードアップし、少し複雑にする価値があるように思えます。

たった 1 つの深さのブランチでさえ、間違ったブランチによってほぼ半分の時間が費やされますよね?

それとも、このようにすでにある程度行われているのでしょうか?ブランチは通常、アセンブリに取り掛かるときに 2 つの選択肢から選択するだけですよね?

0 投票する
0 に答える
338 参照

assembly - 2ビット予測子で無条件分岐を予測するにはどうすればよいですか?

私が見つけた:

(サンディブリッジ)

間接ジャンプとコールのパターン認識

分岐命令と同じ 2 レベルの予測子を使用して、間接的なジャンプと間接的な呼び出し (リターンは除く) が予測され ます。

ここの27ページ:

http://www.agner.org/optimize/microarchitecture.pdf

条件分岐と無条件分岐の両方で 2 ビットの予測子を使用する方法がわかりません。無条件分岐は Branch Target Buffer (BTB) を使用すると思いました。2 ビットの予測子を使用して無条件分岐を予測するにはどうすればよいでしょうか?!

たとえば、最近の Intel CPU について、予測子、履歴テーブル、および BTB キャッシュに関して、分岐予測が条件付きおよび無条件の分岐に対してどのように機能するかを説明してもらえますか? 両方のタイプのブランチで一緒に機能するのか、それとも両方が存在するが異なるブランチタイプのみを処理するのかは不明です??

0 投票する
0 に答える
37 参照

architecture - どのプロセッサが優れていますか?

コンピューター アーキテクトが、単純な 5 ステージのインオーダー プロセッサの分岐予測子よりも、動的なアウトオブオーダー プロセッサの分岐予測子の精度に注意を払うのはなぜですか?

0 投票する
0 に答える
98 参照

assembly - 一般的なプロセッサは、次の命令に分岐する命令を「最適化」することが知られていますか?

Visual Studio で一部のプログラムの逆アセンブルを確認していますが、次のように表示されます。

このコードはばかげています。条件付きジャンプ コントロールがjae原因で、他の方法ではフォールスルーするであろうまったく同じ命令に渡されます。

問題は、CPU の分岐予測がそれにどのように対処するかです。CPU は、「ジャンプ」するか「フォールスルー」するかを予測します。コードの以前の実行に関する統計を収集するまで、Intel x86 プロセッサは条件付きジャンプを「実行されない」と予測します。したがって、これjaeは「起こらない、フォール スルー」と予測され、CPU は「フォール スルー」パスを選択します。

予測ミスが発生した場合 (「フォール スルー」パスが誤って選択されたことが判明した場合)、CPU は正式にパイプラインをリセットし、代わりに「分岐」パスを実行する必要があります。

ここでの秘訣は、「フォール スルー」と「ブランチ」が実質的に同じことを行い、 と同等であることnopです。

このシナリオが分岐に関するドキュメントで分析されているのを見たことがありません。

一般的な CPU は通常、これを通常の予測ロジックjaeとして扱うことができますか?nop

0 投票する
3 に答える
79 参照

c++ - 関数の選択と関数呼び出しのオーバーヘッドを最小限に抑えますか?

大きな配列 (画像) があり、そのデータに対して多くの小さな構成可能な計算を行う必要があります。ここに例を投稿します。 注:これは実際の問題ではありませんが、私がしなければならないことの最小限の/できれば例示的な例です。

私のコードでは、各関数内にループを配置しても意味がありません。

ただし、param1 と param2 はループ中に一定のままであり、コンパイル時に認識されます。

if/elseif ステートメントの影響を取り除く方法はありますか?