【发布时间】:2010-09-08 07:54:09
【问题描述】:
有人知道这个编译器功能吗? GCC 似乎支持这一点。它是如何工作的?潜在收益是多少?在什么情况下好?内循环?
(这个问题是具体的,不是一般的优化,谢谢)
【问题讨论】:
-
stackoverflow.com/questions/4365980/… 描述了如何使用它(标志等)需要
标签: c++ c optimization gcc pgo
有人知道这个编译器功能吗? GCC 似乎支持这一点。它是如何工作的?潜在收益是多少?在什么情况下好?内循环?
(这个问题是具体的,不是一般的优化,谢谢)
【问题讨论】:
标签: c++ c optimization gcc pgo
优化的有趣之处在于,在最不可能的地方发现速度增益。
这也是您需要分析器的原因,而不是猜测速度问题出在哪里。
我建议从分析器开始(gperf,如果您使用的是 GCC),然后开始通过一些正常操作查看运行应用程序的结果。
【讨论】:
杰森的建议是正确的。您将获得的最佳加速来自“发现”您让 O(n2) 算法滑入某处的内部循环,或者您可以在昂贵的函数之外缓存某些计算。
与 PGO 可以触发的微优化相比,这些是最大的赢家。一旦您完成了该级别的优化,PGO 可能会提供帮助。不过,我们从来没有运气好过——仪器的成本使得我们的应用程序变得非常慢(几个数量级)。
我喜欢使用英特尔 VTune 作为分析器,主要是因为与检测分析器相比,它是非侵入性的,因为它会改变太多的行为。
【讨论】:
它通过放置额外的代码来计算每个代码路径的使用次数。当你第二次编译时,编译器会使用之前只能猜测的关于程序执行的知识。 PGO 可以做以下几件事:
在您进行测试之前,您永远不会真正知道这些东西有多大帮助。
【讨论】:
在编译我从事的项目 x264 时,PGO 提供了大约 5% 的速度提升,我们有一个内置系统(make fprofiled)。在某些情况下,它是一个不错的免费速度提升,并且可能在与 x264 不同,由手写程序集组成的应用程序中提供更多帮助。
【讨论】: