从GCC获取优化报告

klh5stk1  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(277)

我想知道是否有一个选项可用于GCC,以获得编译器实际选择和执行的优化的详细报告。这在使用-opt-report的英特尔C编译器上是可能的。我不想查看汇编文件并找出优化。我特别想查找编译器选择的循环展开和循环平铺因子。

rxztt3cl

rxztt3cl1#

虽然它不是聚合信息意义上的报告,但您可以尝试使用-fdump-ipa-all选项,该选项使gcc生成转储文件,这至少使您不必分析汇编程序代码中发生了什么。
关于循环优化,可能需要使用-fdump-rtl-loop2选项。
有关所有这些的详细信息,请参见手册的Options for Debugging Your Program or GCC部分。

mwg9r5ms

mwg9r5ms2#

GCC的报告并不像英特尔那样直接,但我们可以更喜欢。这里是GCC所做的优化的详细选项。
-fopt-info -fopt-info-options -fopt-info-options=filename控制来自各个优化传递的优化转储。如果使用'-options'形式,则options是一个由'-'分隔的选项关键字列表,用于选择转储详细信息和优化。
这些选项可分为三组:
描述应发出哪种消息的选项、描述转储详细程度的选项以及描述应包括哪些优化的选项。每个组中的选项可以自由混合,因为它们不重叠。但是,如果发生冲突,则后面的选项将覆盖命令行上前面的选项。
以下选项控制应发出的消息类型:
'optimized'在成功应用优化时打印信息。由通道决定哪些信息是相关的。例如,矢量器通道打印成功矢量化的循环的源位置。
'missed'打印有关错过的优化的信息。各个遍数控制要在输出中包含的信息。
'note'打印有关最佳化的详细信息,例如某些转换、有关决策的更详细消息等。
'all'打印详细的最佳化信息。这包括'optimized'、'missed'和'note'。
以下选项控制转储详细程度:
'internals'默认情况下,只发出“高级”消息。此选项启用附加的、更详细的消息,这些消息可能只有GCC开发人员感兴趣。
下列一个或多个选项关键字可用于描述一组优化:
'ipa'启用所有过程间优化转储
'loop'启用所有循环优化转储
'inline'从所有内联优化中启用转储。
'omp'从所有OMP(卸载和多重行程)最佳化启用倾印。
'vec'启用所有矢量化优化的转储。
'optall'启用所有优化的转储。这是上面列出的优化组的超集。
如果省略options,则默认为“optimized-optall”,这意味着转储所有过程中有关成功优化的消息,忽略被视为“内部”的消息。
如果提供了文件名,则所有适用优化的转储将连接到文件名中。否则,转储将输出到stderr中。虽然接受多个-fopt-info选项,但只有其中一个选项可以包含文件名。如果提供了其他文件名,则将忽略除第一个选项之外的所有此类选项。
请注意,如果有多个翻译单元,输出文件名将被覆盖。如果需要多个翻译单元的组合输出,则应使用stderr。
在以下示例中,优化信息输出到stderr:
gcc -O3 -fopt-info此示例:
gcc -O3 -fopt-info-missed=missed.all将所有通道的未命中优化报告输出到missed.all中,以下是:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed在stderr上打印有关矢量化过程中丢失的优化机会的信息。请注意,-fopt-info-vec-missed等效于-fopt-info-missed-vec。优化组名称和消息类型在-fopt-info之后的顺序无关紧要。
作为另一个例子,
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt将所有内联过程中有关丢失的优化以及优化位置的信息输出到inline.txt中。
最后,请考虑:
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt这里的两个输出文件名vec.miss和loop.opt是冲突的,因为只允许一个输出文件。在这种情况下,只有第一个选项生效,后面的选项被忽略。因此,只生成vec.miss,它包含从矢量器转储的关于错过的机会的信息。

ubbxdtey

ubbxdtey3#

您还可以考虑使用fsave-optimization-record选项

相关问题