PGO, 제대로 알고 쓰자: 컴파일러가 바이너리를 재설계하는 방법
PGO or not PGO this is the dilemma. Step 2
PGO(Profile-Guided Optimization)는 계측 빌드로 실행 프로파일을 수집한 뒤, 그 데이터를 기반으로 컴파일러가 인라이닝, 분기 배치, 핫/콜드 함수 분리, 전체 바이너리 함수 재배치, 간접 호출 승격 등을 수행하는 2-pass 빌드 방식이다. 핵심은 학습 데이터의 값이 아니라 제어 흐름의 모양을 프로덕션과 유사하게 만드는 것이며, MTR처럼 다양한 데이터로도 코드 경로를 폭넓게 커버하면 효과를 볼 수 있다.
PGO는 '학습한 워크로드를 빠르게 만드는 것'이 아니라 '컴파일러에게 어떤 코드가 뜨겁고 어떤 코드가 차가운지 알려주고, 그에 따라 바이너리 전체를 재구성하게 하는 것'이다.