問題タブ [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++ - 分岐時のキャッシュ ミス ペナルティ
分岐を 2 つの乗算に置き換えるか、または (キャッシュ ミスのペナルティにより) 置き換えない方が速いのだろうか?
これが私のケースです:
そして、私はそれを次のものに置き換えようとしています:
performance - より良い分岐予測子は何ですか? バイモーダルまたは Gshare?
あくまで個人の知識として…
Bimodal または Gshare のどちらが、他方よりも正確な予測を提供しますか? なぜ?
x86-64 - Intel X86-64 の関数内の分岐予測の分岐履歴
分岐履歴は関数呼び出し間で保持されますか、または関数が入力されるたびに再初期化されますか?
c++ - フレームごとの分岐を最適化する方法は?
フレームごとにさまざまなものを更新するメイン ループがあるとします。
分岐予測子にとってより使いやすくすることはできますか? 分岐予測子は、各ブロックがn
フレームごとに 1 回実行されると判断できますか? ブランチに依存しない代替手段はありますか (疑わしい、ブロックには十分に異なるロジックが含まれていると仮定します)。
完全な最適化がオンになることに注意してくださいswitch
。大きな違いはありません (もしあれば)。
branch-prediction - 分岐予測子はどのような命令を投機的に実行しますか?
分岐予測について読んでいましたが、分岐予測子が「投機的に」あらゆる種類の命令を実行するかどうか疑問に思っています。特に、例えばハードウェアと通信するかどうかは疑問です。
次のようなものがあるとします。
(アセンブリ レベルでは、if の後の最初の命令が割り込みを発生させるか、ハードウェアと通信します)。この場合、分岐予測子がたまたま「間違っていると推測」するとどうなるでしょうか? これができない場合、なぜですか?分岐予測子はどのような命令を実行しますか? 分岐予測子の機能を誤解していますか?
c++ - アサーションでの分岐予測のヒント
ASSERT(...)
C++ アプリケーションで使用するカスタムマクロがあります。
最近、Linux カーネル モジュールのコードを読んでいて、likely(...)
とunlikely(...)
マクロの存在に出会いました。これらは、特定の分岐の可能性が高く、パイプラインがそのパスを最適化する必要があるというヒントを CPU に提供します。
アサーションは、定義により、true (つまりlikely
) と評価されることが期待されます。
ASSERT
マクロで同様のヒントを提供できますか? ここでの根底にあるメカニズムは何ですか?
明らかに、パフォーマンスの違いを測定しますが、理論的には違いがあるはずですか?
私は自分のコードを Linux でしか実行していませんが、クロスプラットフォームでこれを行う方法があるかどうか知りたいです。gcc も使用していますが、clang もサポートしたいと考えています。