PGO 最常见的问题:训练数据不具代表性。
❌ 错误的训练负载:
./scoremaster --test-video single_static_frame.h264
→ 只有 1 帧画面,profile 显示"detect 分支 100% 走缓存路径"
→ 优化后实际跑视频时 detect 分支频繁缓存未命中,变慢了
✅ 正确的训练负载:
./scoremaster --test-video typical_match.h264
→ 包含各种比赛场景的长时间视频
→ 覆盖了"有球/没球/密集/稀疏"等各种路径
→ PGO 优化的代码对真实场景最友好
其他注意:
- 每次代码更新后需要重新收集 profile(旧的 .gcda 不能用)
- 多线程程序:profile 数据不会包含线程调度的时序信息
- PGO 不是魔法:算法复杂度上的优化(O(N^2) → O(N))比 PGO 的 10-30% 提升大得多