谁知道这个编译器功能?GCC似乎支持这一点.它是如何工作的?潜在收益是多少?在哪种情况下它很好?内环?
(这个问题是具体的,不是关于一般的优化,谢谢)
它通过放置额外的代码来计算每个代码路径的计数次数.当你第二次编译时,编译器使用获得的关于程序执行的知识,它只能在之前猜测.PGO可以为以下方面做些事:
决定应该内联哪些函数,具体取决于调用它们的频率.
决定如何根据以某种方式调用的调用百分比来预测关于"if"语句的哪个分支的提示.
根据每次调用该循环时采用的迭代次数,决定如何优化循环.
在测试之前,你真的不知道这些东西有多大帮助.
在编译我工作的项目x264时,PGO提供了大约5%的速度提升,并且我们有一个内置的系统(make fprofiled).在某些情况下,它可以提供很好的自由速度提升,并且可能有助于提供更多应用程序,与x264不同,它们不像手写程序集.