profile-guided optimization (C)有人知道这个编译器功能吗? 海湾合作委员会似乎对此表示支持。 它是如何工作的? 潜在收益是多少? 在哪种情况下很好? 内循环? (这个问题是特定的,而不是一般的优化,谢谢) 它通过放置额外的代码来计算每个代码路径的使用次数来工作。当您第二次编译时,编译器将使用以前只能猜测的有关程序执行的知识。 PGO可以采取以下措施:
在测试之前,您永远不会真正知道这些东西有多少帮助。 当我编译x264(我正在从事的项目)时,PGO的速度提高了5%,我们有一个内置的系统(使fprofiled)。在某些情况下,它提供了很好的自由速度提升,并且可能在与x264不同的应用程序中有更多帮助,而这些应用程序很少由手写组装组成。 杰森的建议是正确的。您将获得的最佳加速来自"发现",即让O(n2)算法滑入某个位置的内部循环,或者可以将某些计算缓存在昂贵的函数之外。 与PGO可以触发的微优化相比,这些是最大的赢家。完成该级别的优化后,PGO可能会提供帮助。但是,我们从来没有碰到太多运气-仪器的成本是如此之高,以至于我们的应用变得越来越慢(几个数量级)。 我喜欢将Intel VTune用作探查器,主要是因为与仪器探查器相比,它无创性,而探查器会改变行为。 优化的有趣之处在于,在最不可能的地方发现了速度提升。 这也是您需要分析器的原因,而不是猜测速度问题在哪里。
我建议从探查器(如果使用GCC,则为 |