問題タブ [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 投票する
18 に答える
50807 参照

if-statement - 「IF」は高いですか?

私は一生、先生がその日に言ったことを正確に思い出すことはできません。おそらくあなたが知っていることを願っています.

モジュールは「Data Structures and Algorithms」で、彼は次のような内容を教えてくれました。

ステートメントは最もif高価な [何か] です。[何か] が [何か] を登録します。

はい、私には恐ろしい記憶があり、本当に申し訳ありませんが、何時間もグーグルで検索しましたが、何も出てきませんでした. 何か案は?

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

assembly - 分岐予測

単一の静的ブランチの実際の結果の次のシーケンスを検討してください。Tは分岐が行われることを意味します。Nは、分岐が行われないことを意味します。この質問では、これがプログラム内の唯一のブランチであると想定します。

TTTNTNTTTNTNTTTNTN

1ビットの分岐履歴を使用する2レベルの分岐予測子、つまり1ビットのBHRを想定します。プログラムにはブランチが1つしかないため、BHRをブランチPCと連結してBHTにインデックスを付ける方法は重要ではありません。BHTが1ビットカウンターを使用し、ここでもすべてのエントリがNに初期化されていると仮定します。このシーケンスのどのブランチが誤って予測されるでしょうか。以下の表を使用してください。 代替テキスト

今、私はこの質問に対するガイドや指針ではなく、この質問に対する答えを求めているのではありません。2レベルの分岐予測器とは何を意味し、どのように機能しますか?BHRとBHTは何の略ですか?

0 投票する
6 に答える
11879 参照

c++ - ポータブル分岐予測のヒント

分岐予測のヒントを実行するポータブルな方法はありますか?次の例を考えてみましょう。

これは行うことと何か違いがありますか?

または、コンパイラ固有のヒントを使用する唯一の方法ですか?(例:GCCの__builtin_expect)

コンパイラーifは、条件の順序に基づいて条件を異なる方法で処理しますか?

0 投票する
10 に答える
7033 参照

c - If Thensは乗算と割り当てよりも高速ですか?

簡単な質問があります。たとえば、次のコードがあり、同じように10回繰り返されたとします。

評価する方が速いでしょうか:

これも問題を引き起こしますが、ブール値に整数を掛けることができますか(2 ^ nから返される型はわかりませんが、整数か符号なしなど)?(私はエイダで働いていますが、これを一般化してみましょう。)

編集:申し訳ありませんが、私は2のn乗を見ていることを明確にする必要があります。cでこの問題に遭遇した場合、将来自分の学習に興味があったので、そこにcを入れました。これらのボードにいるプログラマー、次にAda(私は推測していて、それが何を意味するのか知っています)、しかし私の現在の問題はAda言語にありますが、質問はかなり言語に依存しないはずです(私は願っています)。

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

x86 - CPU アーキテクチャの進化は、仮想関数呼び出しのパフォーマンスにどのような影響を与えましたか?

何年も前、私は x86 アセンブラ、CPU パイプライン処理、キャッシュ ミス、分岐予測などについて学んでいました。

それは2つの半分の物語でした。プロセッサの長いパイプライン、つまり命令の並べ替え、キャッシュのプリロード、依存関係のインターリーブなどの素晴らしい利点について読みました。

マイナス面は、標準からの逸脱が非常に高くつくことでした。たとえば、初期ギガヘルツ時代の特定の AMD プロセッサである IIRC では、ポインタ (!) を介して関数を呼び出すたびに40 サイクルのペナルティがありましたが、これは明らかに正常でした。

これは無視できる「心配しないで」という数値ではありません。通常、「優れた設計」とは、「関数を可能な限り分解する」ことと、仮想インターフェイスを意味することが多い「データ型にセマンティクスをエンコードする」ことを意味することに注意してください。

トレードオフは、そのような操作を実行しないコードがサイクルごとに 2 つ以上の命令を取得する可能性があることです。これらは、オブジェクト設計が重く、計算処理が少ない高性能 C++ コードを作成する場合に考慮したい数値です。

低電力時代に入り、長い CPU パイプラインの傾向が逆転していることを理解しています。これが私の質問です:

最新世代の x86 互換プロセッサは、依然として仮想関数呼び出し、不適切な分岐予測などの大きなペナルティを被っていますか?

0 投票する
4 に答える
1482 参照

assembly - Intel: 命令のシリアル化と分岐予測

Intel Architecture's Developer's Manual (Vol3A、セクション 8-26) には、次のように記載されています。

Pentium プロセッサおよび最近のプロセッサ ファミリは、分岐予測技術を使用して、分岐命令が実行される前に分岐命令の宛先をプリフェッチすることによってパフォーマンスを向上させます。その結果、分岐命令が実行されるとき、命令の実行は決定論的にシリアライズされません。

これは何を意味するのでしょうか?

それは本当に、本当に悪いですね。CPUID のようなシリアル化命令が分岐予測を破る (またはその逆) ように聞こえますが、それはありそうにありません。このコンテキストで「非決定論的」が何を意味するのかを理解するのに、ASM 関係者は助けてくれますか?

*わかりやすくするために編集

0 投票する
5 に答える
6815 参照

arm - 現在の CPU で分岐予測はどの程度普及していますか?

パフォーマンスに大きな影響を与えるため、現在のデスクトップ CPU に分岐予測があるかどうか疑問に思うことはありません。もちろんそうです。しかし、さまざまな ARM オファリングについてはどうでしょうか。iPhone または Android フォンには分岐予測機能がありますか? 昔のニンテンドーDS?PowerPC ベースの Wii はどうですか?PS3?

それらが複雑な予測ユニットを持っているかどうかはそれほど重要ではありませんが、少なくとも何らかの動的予測があり、予想される分岐に続く命令を実行するかどうかは重要です。

分岐予測を備えた CPU のカットオフは? 私のデスクトップにはありますが、何十年も前のハンドヘルド電卓には明らかにありません。しかし、動的分岐予測がどこで期待できるかをもっと明確に説明できる人はいますか?

不明な場合は、条件が変化し、実行時に予想されるパスが変化する予測の種類について話しています。

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

performance - __builtin_expect を使用した ARM の静的分岐予測が機能しない!!?

Cortex-R4で実行されているCコードで最適化を行っています。まず、条件チェックで「__builtin_expect」を指定したとき、アセンブリ コードの出力に変化は見られませんでした。コンパイラが不要な Jump を生成しているようです。

私のCコード:

---- 生成された ASM コード -------- (ビット => r0)

---- 予想される ASM コード --------

この C コードの一部がループで実行される場合、そのたびにジャンプする必要があるとします (if 条件が 1 回しか渡されないため)。実際に、期待どおりにコードを生成する他のコンパイラ設定はありますか..??

0 投票する
4 に答える
3005 参照

c++ - ステートメント評価の場合、C /C++が最も効率的

Xはほぼ99.9%の確率で真ですが、YとZも処理する必要があります。X条件の本体は空ですが、X条件を省略した場合、他の2つの条件YとZをチェックするよりも高速であると思います。どう思いますか?

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

c++ - 分岐予測 - グローバルシェアの実装説明

私はコンピューター アーキテクチャーのクラスで課題に取り組んでおり、C++ で分岐予測アルゴリズムを実装する必要があります (Alpha 21264 マイクロプロセッサー アーキテクチャー用)。

として提供されているソリューションがあります。このソリューションは、Global Share Predictorの実装です。

私は単に与えられた解決策、具体的には何が起こっているのかを理解しようとしています:

具体的には、

誰でも私に説明を提供できますか?ありがとうございました。