問題タブ [likely-unlikely]

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 投票する
10 に答える
175419 参照

linux - Linuxカーネルの可能性の高い/可能性の低いマクロはどのように機能し、それらの利点は何ですか?

Linuxカーネルのいくつかの部分を調べてみたところ、次のような呼び出しが見つかりました。

また

私はそれらの定義を見つけました:

それらが最適化のためのものであることは知っていますが、どのように機能しますか?そして、それらを使用することで、どのくらいのパフォーマンス/サイズの低下が期待できますか?そして、少なくともボトルネックコード(もちろんユーザースペース)では、面倒な(そしておそらく移植性を失う)価値があります。

0 投票する
8 に答える
22277 参照

visual-studio - MSVCと同等である可能性が高い/可能性が低い

GCCコンパイラは、可能性の高いマクロと可能性の低いマクロを定義するために使用される__builtin_expectステートメントをサポートします。

例えば。

Microsoft Visual Cコンパイラと同等のステートメント、または同等のものはありますか?

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

c - ユーザー空間のコードでマクロを使用できる可能性がある/可能性が低いマクロはありますか?

Linux カーネル コードでこれら 2 つのマクロを見つけました。分岐の場合の最適化のためのコンパイラ(gcc)への指示であることは知っています。私の質問は、これらのマクロをユーザー空間コードで使用できるかということです。最適化を提供しますか?どの例も非常に役立ちます。

0 投票する
2 に答える
7072 参照

c - 可能性のある()および可能性の低い()コンパイラヒントの学習サンプル

コンパイラのヒント( )の使いやすlikelyさを学生にどのように示すことができますか?unlikely__builtin_expect

これらのヒントを使用すると、ヒントなしのコードと比較して数倍高速になるサンプルコードを記述できますか。

0 投票する
2 に答える
415 参照

optimization - Linuxカーネルでリターンの引数として可能性/可能性が低いを使用する

Linuxカーネルでこの構造を見るだけで、それが何を意味するのかわかりません。

私はlikely/がここで説明されている機能 unlikelyで作られていることを知っています: http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html__builtin_expect

__builtin_expect を使用して、コンパイラに分岐予測情報を提供できます。

しかし、無条件分岐ではどのような分岐予測ヒントが可能でしょうか??

0 投票する
7 に答える
72979 参照

c - if elseステートメントでのGCCの__builtin_expectの利点は何ですか?

#define私は彼らが使用しているに出くわしました__builtin_expect

ドキュメントには次のように書かれています。

組み込み関数:long __builtin_expect (long exp, long c)

__builtin_expectコンパイラに分岐予測情報を提供するために使用できます。-fprofile-arcs一般に、プログラマーはプログラムが実際にどのように実行されるかを予測するのが苦手なので、これには実際のプロファイルフィードバックを使用することをお勧めします( )。ただし、このデータを収集するのが難しいアプリケーションがあります。

戻り値はの値でありexp、整数式である必要があります。ビルトインのセマンティクスは、が期待されるということ exp == cです。例えば:

fooはゼロであると予想されるため、を呼び出すことを期待していないことを示しxます。

では、直接使用しないのはなぜですか。

__builtin_expect?を使用した複雑な構文の代わりに

0 投票する
2 に答える
4801 参照

performance - gccはおそらくマクロの使用法ではない

私は大まかに次のロジックで重要なコードを書いています

式の周りにマクロを使用することを考えているlikely()ので、それが重要なブランチに到達したときに、最小のレイテンシーが得られます。

私の質問は、プリフェッチする可能性の低いブランチを選択しているため、マクロ名が示唆する使用法とは正反対です。つまり、重要なブランチが発生する可能性は低いですが、発生した場合に最も重要なことです。

パフォーマンスの観点からこれを行うことの明らかな欠点はありますか?

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

c - 「可能性が低い()」のポイントは何ですか?

重複の可能性:
Linux カーネルの可能性が高い/可能性が低いマクロ

Linux カーネルでは、./linux/include/shed.hで次の行に遭遇しました。

ありそうもない点とは正確には何ですか?.arch/x86/tools/insn_sanity.cでその定義を見つけましたが、それは次のとおりです。

私には、使用する意味がまったくないように思えunlikely()ます。の意図された目的はunlikely何ですか?

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

c - Linux カーネル: 可能性が高い () と可能性が低い ()

これら 2 つの方法は、Linux カーネル コード内で広く使用されているようです。分岐予測の基礎は知っていますが、これら 2 つの関数が if() ステートメントの操作にどのように影響するかを知りたいです。また、それらは CPU 命令パイプラインのレベルで機能しますか? それとも、カーネルコードレベルでの抽象化のレベルがはるかに高いですか?

Linux カーネルの初心者である私は、これら 2 つの方法の内部の仕組みを知りたいと思っています。ありがとう!

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

c - セグメンテーション フォールトのある Linux カーネルの like()/unlikely() マクロ

私は、likely()/unlikely() マクロがどのように機能するかを理解しており、分岐予測についても理解しています。残念ながら、私は高度なプログラミングのコンテキストで分岐予測を学びませんでした。

私が知りたいのは、可能性が高い/可能性が低いマクロ内の評価がセグメンテーション違反になるかどうか、それが分岐予測履歴または現在の結果/パイプラインにどのように影響するかです。

予測の検証が完了しなかった場合、それが成功したか失敗したかをどうやって知ることができるか理解できません。