C コードでは、最適なパフォーマンスを得るために特定の分岐が常に予測可能な動作を示す必要がある状況が発生する場合があります。 GCC は、これを達成するためのコンパイラ ヒントを提供できますか?
GCC は、この目的のために __builtin_expect() 関数をサポートしています。 exp (条件) と c (期待値) の 2 つのパラメーターを取ります。特定の方向への分岐予測を強制するには、次の構文を使用します。
<code class="c++">if (__builtin_expect(normal, 1)) { // code for predicted branch } else { // code for unpredicted branch }</code>
ここで、normal が条件で、1 が期待値です。
または、カスタム マクロを定義することもできます。利便性:
<code class="c++">#define likely(x) __builtin_expect (!!(x), 1) #define unlikely(x) __builtin_expect (!!(x), 0)</code>
これにより、より簡潔な使用法が可能になります:
<code class="c++">if (likely(normal)) { // code for predicted branch } else { // code for unpredicted branch }</code>
これは非標準機能であり、すべてのコンパイラやハードウェア アーキテクチャでサポートされているわけではないことに注意することが重要です。さらに、最新のコンパイラーと CPU は非常に洗練されており、手動によるヒントよりも最適な分岐予測の決定を行う可能性があります。したがって、時期尚早なマイクロ最適化は避けるべきです。
以上がGCC コンパイラ ヒントを使用して強制分岐予測を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。