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

nak*_*iya 66 c++ optimization g++

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

Mai*_*ter 52

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

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

  • 顺便说一句,如果您的程序是多线程的,那么生成的配置文件数据可能会不一致,当您尝试使用它时可能会出错.因此,您可能还需要为第二次GCC调用传递`-fprofile-correction`. (5认同)

rog*_*ack 21

这个例子:

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
Run Code Online (Sandbox Code Playgroud)

基本上,您最初编译并链接此额外标志以进行编译和链接:( -fprofile-generate此处开始).

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

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

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

  • 顺便说一句,如果您的程序是多线程的,则生成的配置文件数据可能会不一致,并且在尝试使用它时可能会出现错误。因此,您可能还需要为第二次调用g ++传递`-fprofile-correction`。 (2认同)