2

2 つまたは 3 つの分岐があり、それらがどの方向に進むかわからないコードがありますが、最初にヒットした後は、同じパスが続くことが 100% 確実、またはほぼ確実です。再び起こります。__builtin_likely を使用しても、分岐ミスを回避するという点ではあまり効果がないことに気付きました。関数が短い時間間隔で繰り返し呼び出される場合、分岐予測は適切に機能しますが、関数の呼び出しの間に他の処理が行われるとすぐに、パフォーマンスが大幅に低下します。これを回避する方法や、調査できるテクニックは何ですか? いくつかの浮浪の後に再び到達したときに、何らかの方法でこれらのブランチに「タグを付ける」方法はありますか?

4

2 に答える 2

2

テンプレートを使用してコード パスごとに異なるバージョンの関数を生成し、実行時に関数ポインターを使用して、条件がどちらの方向に進むかがわかったときに選択することができます。

于 2012-07-19T22:03:56.873 に答える
0

分岐予測子とコンパイラ組み込み関数だけで十分です。せいぜい、アセンブリを見て、手動で最適化を試みることができますが、多くは見つかりません。

于 2012-07-19T21:41:58.333 に答える