HackerNews

分岐予測器の回避

Bypassing the Branch Predictor

https://nicula.xyz/2025/03/10/bypassing-the-branch-predictor.html


この記事では、分岐予測器がプログラムの最適化を妨げる場合にどのように対処すべきかが考察されています。具体的な例として、取引システムを想定し、取引リクエストの大部分が最終段階で放棄される状況を扱います。送信が必要な取引が来た際に、分岐予測器が誤った予測をすると、性能が大幅に低下する可能性があります。著者は、分岐予測器に依存せずにsend関数を常に実行するようCPUに指示できる手法を模索しました。具体的には、ARMプロセッサの特定の命令について言及し、x86プロセッサでは古いモデルでしかハードコーディング予測が行えないことを説明しています。また、C++20で導入された[[likely]]や[[unlikely]]属性についても、最新のx86プロセッサでは効果がないことを指摘し、これらは単にコードのラベルの順序を再配置するためのものに過ぎないと述べています。