配置文件引导的优化(C)
时间:2020-03-05 18:50:14 来源:igfitidea点击:
有人知道这个编译器功能吗?海湾合作委员会似乎对此表示支持。它是如何工作的?潜在收益是多少?在哪种情况下好?内循环?
(这个问题是特定的,而不是一般的优化,谢谢)
解决方案
回答
优化的有趣之处在于,在最不可能的地方发现了速度提升。
这也是我们需要分析器的原因,而不是猜测速度问题在哪里。
我建议从分析器(如果使用的是GCC,则为gperf
)开始,然后开始通过一些常规操作来了解运行应用程序的结果。
回答
杰森的建议是正确的。我们将获得的最佳加速来自"发现",即让O(n2)算法滑入某个位置的内部循环,或者可以将某些计算缓存在昂贵的函数之外。
与PGO可以触发的微优化相比,这些是最大的赢家。完成该级别的优化后,PGO可能会提供帮助。尽管仪器的成本是如此之高,以至于我们的应用变得越来越慢(增长了几个数量级),但我们从来没有碰到太多运气。
我喜欢将Intel VTune用作探查器,主要是因为与仪器探查器相比,它是非侵入性的,而仪器探查器会改变行为。
回答
它通过放置额外的代码来计算每个代码路径的使用次数来工作。当我们第二次编译时,编译器会使用以前只能猜测的有关程序执行的知识。 PGO可以完成以下几项工作:
- 根据调用的频率来决定应该内联哪些函数。
- 根据如何以一种方式或者另一种方式进行调用的百分比,确定如何预测" if"语句的哪个分支。
- 根据每次调用该循环要执行的迭代次数来决定如何优化循环。
在测试之前,我们永远不会真正知道这些东西能提供多少帮助。
回答
在编译我正在从事的项目x264时,PGO的速度提高了5%,我们有一个内置的系统(使fprofiled生效)。在某些情况下,它提供了很好的自由速度提升,并且可能在与x264不同的应用程序中有所帮助,而这些应用程序很少由手写组装组成。