如何在g ++中使用配置文件引导的优化?

时间:2010-12-06 11:38:35

标签: c++ optimization g++

另外,有人能指点我这个主题的好教程吗?我找不到任何。

3 个答案:

答案 0 :(得分:49)

-fprofile-generate将使用性能分析代码检测应用程序。应用程序将在实际运行时记录某些事件,如果在编译时已知这种使用模式,则可以提高性能。分支,内联的可能性等都可以记录,但我不确定GCC如何实现这一点。

程序退出后,它会将所有这些数据转储到* .gcda文件中,这些文件实际上是测试运行的日志数据。使用-fprofile-use标志重建应用程序后,GCC会在进行优化时考虑* .gcda日志数据,通常会显着提高性能。当然,这取决于很多因素。

答案 1 :(得分:19)

来自this example

g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name

基本上,您最初编译并链接此额外标志以进行编译和链接:-fprofile-generate(来自here)。

然后,当你运行它时,默认它会在.o文件的“下一步”创建.gcda文件,它似乎(硬编码到它们构建的完整路径)。

您可以选择使用-fprofile-dir = XXX setting更改创建这些.gcda文件的位置。

然后使用-fprofile-use参数重新编译和重新链接,并使用配置文件引导的优点对其进行编译。

答案 2 :(得分:2)

棘手的一点是设置makefile。

对于目标文件,您肯定需要单独的输出目录。我建议命名为“profile”和“release”。您可能必须复制由配置文件运行产生的* .gcda文件,以便GCC在发布版本步骤中找到它们。

结果几乎肯定会更快。它可能也会更大。 -fprofile-use选项启用许多其他优化步骤,否则这些步骤仅由-O3启用。