PGOはバイナリ全体を再構築する——プロファイルが制御フローの形を教える

PGO or not PGO this is the dilemma. Step 2

PGOは2パスビルドだ。まず-fprofile-generateで計測し、各分岐やループにカウンタを仕込む。トレーニングワークロードを実行してプロファイルを収集し、そのデータでインライン判断、分岐レイアウト、ホット/コールド関数分割、バイナリ全体の関数再配置、間接呼び出しの直接化などを最適化する。重要なのは、PGOが最適化するのは個々の値ではなく制御フローの形だという点。だからMTRのような多様なワークロードでも、mysqldのほぼ全経路を歩むため、TPCCとは違うデータでも効果が転移する。

PGOは「トレーニングしたワークロードを速くする」のではない。「どのコードがホットでどれがコールドかをコンパイラに伝え、それに応じてバイナリ全体を再形成させる」のだ。

この日のほかの記事

2026-10-16