PGO

1:编译选项:-fprofile-arcs(首次编译) -fprofile-use(二次编译)

2:确认PGO是否使能,

     a)在首次编译的时候确认代码是否插桩

     b)  运行后确认是否生成gcda文件

     c)  确认二进制文件中是否有_gcov**函数,且函数内非空实现 

     可能的问题 增加-Dinhibit_libc

3)性能优化

     引入PGO可能性能不升反降,总结原因

      a) 训练次数太少,未能体现出真实的场景,导致编译器判断错误

      b) 部分优化可能引入负向作用,比如:pgo后引入peel loop,结果导致不再做sms,效果反而不如前

      c) 编译器缺省的概率阈值不够精准,原静态分支预审结果优化更好,需要调整概率阈值

      正向效果:

     a) 更合适的inline

     b) 正向影响的ebb优化,比如判断某个分支高概率,决策是否需要拷贝一份减少跳转同时,扩大调度去讲

     c) 循环内冷热分支外移

猜你喜欢

转载自blog.csdn.net/zziyou911/article/details/80950008
PGO