繁体   English   中英

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

[英]How to use profile guided optimizations in g++?

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

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

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

这个例子

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 (从此处 )。

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

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

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

棘手的一点是设置makefile。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM