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


75

另外,有人可以给我指出有关该主题的优秀教程吗?我找不到。


12
为什么要对此表示不满并投票关闭?这是一个完全有效的问题。
nico 2010年

9
@jalf这是一个关于如何使用配置文件引导的优化的完全有效的问题
Laurynas Biveinis 2010年

1
@jalf:我将“ ...的用途是什么”更改为“如何使用...”。那会让你满意。虽然我知道大多数人都明白我在这个问题上的要求。
nakiya 2010年

1
@nakiya:如果您想知道如何在G ++中进行配置文件引导的优化,请提出。当您这样问时,我想知道这是您感兴趣的特定开关,还是“使用配置文件引导的优化来加快我的应用程序”的总体目标。
jalf

1
@jalf:“配置文件引导的优化:”这是我什至第一次听到这个短语。我现在对问题进行了两次编辑。我将再次编辑,以期得到答案:(
nakiya 2010年

Answers:


58

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

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


5
顺便说一句,如果您的程序是多线程的,则生成的概要文件数据可能会不一致,并且在尝试使用它时可能会出现错误。因此,您可能还需要通过-fprofile-correctionGCC的第二次调用。
Nicu Stiurca 2015年

我无法摆脱错误。我正在使用的命令gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch仍然收到coverage-mismatch错误。我究竟做错了什么?
gbriones.gdl 2015年

23

这个例子

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此处开始)。

然后,当您运行它时,默认情况下它将创建.gcda文件“ .n”到您的.o文件“下一个”(硬编码到它们生成的完整路径)。

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

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


3
顺便说一句,如果您的程序是多线程的,则生成的概要文件数据可能会不一致,并且在尝试使用它时可能会出现错误。因此,您可能还需要通过-fprofile-correctiong ++的第二次调用。
Nicu Stiurca

1
我无法摆脱错误。我正在使用的命令gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch仍然收到coverage-mismatch错误。我究竟做错了什么?
gbriones.gdl

3

棘手的一点是设置makefile。

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

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


您能评论一下哪些优化步骤吗?还是引用一些文件?
JohnTortugo 2012年

2
@JohnTortugo:info gcc并搜索配置文件使用情况。它说:“启用了以下选项:-fbranch-probabilities','-fvpt','-funroll-loops',''
Zan Lynx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.