これは、マクロの意味で使用される __builtin_expect(x, 1) の従来の使用法とはまったく逆です。
#define likely(x) __builtin_expect(x, 1)
これは個人的には悪い形だと思います (パフォーマンスが向上する可能性が高いとは思えないパスを不可解にマークしているため)。ただし、 __builtin_expect(x) はパスを「似ている」と主張することでニーズを想定していないため、この最適化をマークすることもできます。これは単なる標準的な使用方法です。
#define optimize_path(x) __builtin_expect(x, 1)
これは同じことを行いますが、可能性の低いパスを可能性が高いと非難するコードを作成するのではなく、実際に試みていることをコードに記述して、クリティカルパスを最適化します。
ただし、核兵器のタイミングを計画している場合は、コンパイルされたアセンブリを手動でチェック (およびタイミング) して、タイミングが正しいようにするだけでなく、RTOS も使用する必要があります。より高速なプロセッサを使用するか、予測ミスの遅延を正しく調整するだけで、「100 万分の 1」のイベントを補償できるため、分岐の予測ミスの影響は非常に小さいため、ここではほとんど不要です。最新のコンピューターのタイミングに影響を与えるのは、OS のプリエンプションとスケジューリングです。非常に離散的な時間スケールで何かを行う必要がある場合は、ほとんどの汎用オペレーティング システムが持つ疑似リアルタイムではなく、リアルタイムでスケジュールする必要があります。一般に、分岐の予測ミスは、RT 状況で RTOS を使用しない場合に発生する可能性のある遅延よりも数百倍小さくなります。通常、分岐の予測ミスが問題になる可能性があると思われる場合は、分岐予測子の状態が複雑で制御できないため、時間に敏感な問題から分岐を削除します。マクロの「可能性が高い」および「可能性が低い」は、さまざまな領域からヒットする可能性があり、さまざまな分岐予測状態で、最も重要なことに、非常に頻繁に使用されるコードのブロック用です。これらのブランチにヒットする頻度が高いため、それを使用するアプリケーション (Linux カーネルなど) のパフォーマンスが明らかに向上します。枝に 1 回しか当たらない場合は、通常、分岐予測子には、複雑で制御できない状態があるためです。マクロの「可能性が高い」および「可能性が低い」は、さまざまな領域からヒットする可能性があり、さまざまな分岐予測状態で、最も重要なことに、非常に頻繁に使用されるコードのブロック用です。これらのブランチにヒットする頻度が高いため、それを使用するアプリケーション (Linux カーネルなど) のパフォーマンスが明らかに向上します。枝に 1 回しか当たらない場合は、通常、分岐予測子には、複雑で制御できない状態があるためです。マクロの「可能性が高い」および「可能性が低い」は、さまざまな領域からヒットする可能性があり、さまざまな分岐予測状態で、最も重要なことに、非常に頻繁に使用されるコードのブロック用です。これらのブランチにヒットする頻度が高いため、それを使用するアプリケーション (Linux カーネルなど) のパフォーマンスが明らかに向上します。枝に 1 回しか当たらない場合は、これらのブランチにヒットする頻度が高いため、それを使用するアプリケーション (Linux カーネルなど) のパフォーマンスが明らかに向上します。枝に 1 回しか当たらない場合は、これらのブランチにヒットする頻度が高いため、それを使用するアプリケーション (Linux カーネルなど) のパフォーマンスが明らかに向上します。枝に 1 回しか当たらない場合は、場合によっては 1 ナノ秒のパフォーマンス向上が得られる可能性がありますが、アプリケーションがそれほどタイム クリティカルである場合、パフォーマンスを大幅に向上させるためにできることは他にもあります。