如何在g ++中使用概要指导优化?
另外,任何人都可以点我一个关于这个问题的好教程? 我找不到任何东西。
-fprofile-generate将用分析代码来testing应用程序。 应用程序将在实际运行时logging某些可以提高性能的事件,如果这种使用模式在编译时已知的话。 分支,内联的可能性等都可以被logging下来,但我不确定GCC如何实现这个function。
程序退出后,它会将所有这些数据转储到* .gcda文件中,这些文件本质上是testing运行的日志数据。 使用-fprofile-use标志重build应用程序后,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
(从这里 )。
然后,当你运行它,默认情况下它会创build.gcda文件“下一步”到你的.o文件,似乎(硬编码到他们被build立的完整path)。
您可以select使用-fprofile-dir = XXX 设置更改创build这些.gcda文件的位置。
然后,使用-fprofile-use
参数重新编译并重新链接,并使用configuration文件指导的善良来编译它。
棘手的是设置makefiles。
你肯定需要单独的目录文件的输出目录。 我会build议命名他们“configuration文件”和“释放”。 您可能需要复制从configuration文件运行得到的* .gcda文件,以便GCC在发布构build步骤中find它们。
结果几乎肯定会更快。 它可能会更大。 -fprofile-use选项启用许多其他优化步骤,否则这些步骤只能由-O3启用。