0

__builtin_expectプログラマーはGCCからを使用して、どのバリアントが非常に頻繁に発生すると予想され、どのバリアントがまれであるかを示すことができます。ただし __builtin_expect、「真」と「偽」のみがあります(0%または100%の確率)

いくつかの大きなプロジェクトでは、プロファイルのフィードバック(-fprofile-arcs)を取得するのは困難であり、プログラマーは、プログラムのある時点で分岐する可能性がどの程度あるかを知っている場合があります。

ブランチの確率が0%以上100%未満であるというヒントをコンパイラーに与えることは可能ですか?

4

3 に答える 3

7

ここから:

長い__builtin_expect_with_probability

(long exp、long c、 doubleprobential )関数のセマンティクスはと同じですが、呼び出し元は期待される確率を提供します。最後の引数である確率は、0.0fと1.0fの包括的範囲の浮動小数点値です。確率引数は、定数浮動小数点式である必要があります。__builtin_expectexp == c

Jesinはコメントで指摘しました、Clang11にもそれがあります

于 2018-10-17T12:57:06.840 に答える
4

真と偽は、実際には「最初のバリアントの可能性が高い」と「2番目のバリアントの可能性が高い」ことを意味します。これら以外の値は実際には必要ありません。コンパイラはその情報を使用できなくなります。

于 2010-11-16T14:36:28.153 に答える
-3

非決定論は、言語機能は言うまでもなく、コンパイラ出力にとって望ましい特性ではありません。1つのブランチを優先する部分的な最適化だけに実際の利点はなく、私が知っているコンパイラーはこれを行うことができません。

于 2010-11-16T14:49:31.003 に答える