Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从GCC获取优化报告_Gcc_Loops_Compiler Optimization - Fatal编程技术网

从GCC获取优化报告

从GCC获取优化报告,gcc,loops,compiler-optimization,Gcc,Loops,Compiler Optimization,我想知道是否有一个选项可以与GCC一起使用,以获得编译器实际选择和执行的优化的详细报告。这在使用-opt报告的英特尔C编译器中是可能的。我不想查看程序集文件并找出优化方法。我特别寻找编译器选择的循环展开和循环平铺因子。虽然它不是聚合信息意义上的报告,您可以尝试使用-fdump ipa all选项,该选项使gcc生成转储文件,这至少可以避免您分析汇编程序代码 关于循环优化,-fdump-rtl-loop2选项可能会引起兴趣 有关所有这些的详细信息,请参阅手册的一节。GCC的报告不像英特尔那样直截了

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

虽然它不是聚合信息意义上的报告,您可以尝试使用
-fdump ipa all
选项,该选项使
gcc
生成转储文件,这至少可以避免您分析汇编程序代码

关于循环优化,
-fdump-rtl-loop2
选项可能会引起兴趣


有关所有这些的详细信息,请参阅手册的一节。

GCC的报告不像英特尔那样直截了当,但我们更喜欢。下面是GCC用于优化的详细选项

-fopt信息 -fopt信息选项 -fopt info options=文件名 控制来自各种优化过程的优化转储。如果使用“-options”表单,则options是一个由“-”分隔的选项关键字组成的列表,用于选择转储详细信息和优化

这些选项可分为三组:

描述应发出何种消息的选项, 描述转储详细信息的选项,以及 描述应包括哪些优化的选项。 每组的选项可以自由混合,因为它们不重叠。但是,如果存在任何冲突,则后面的选项将覆盖命令行上的先前选项

以下选项控制应发出的消息类型:

“优化” 成功应用优化时打印信息。由通行证决定哪些信息是相关的。例如,矢量器通过打印成功矢量化的循环的源位置

“错过” 打印有关错过的优化的信息。单独传递控制输出中包含哪些信息

“注意” 打印有关优化的详细信息,例如某些转换、有关决策的更详细消息等

“全部” 打印详细的优化信息。这包括“优化”、“遗漏”和“注释”

以下选项控制转储详细信息:

“内部” 默认情况下,仅发出“高级”消息。此选项支持更多更详细的消息,这些消息可能只对GCC开发人员感兴趣

以下一个或多个选项关键字可用于描述一组优化:

“ipa” 启用所有过程间优化的转储

“循环” 从所有循环优化中启用转储

“内联” 从所有内联优化启用转储

“omp” 从所有OMP(卸载和多处理)优化中启用转储

“vec” 从所有矢量化优化中启用转储

“奥普托” 从所有优化中启用转储。这是上面列出的优化组的超集

如果省略了选项,则默认为“optimized optall”,这意味着从所有过程中转储关于成功优化的消息,忽略被视为“内部”的消息

如果提供了文件名,那么来自所有适用优化的转储将连接到文件名中。否则,转储将输出到stderr。虽然接受多个-fopt info选项,但其中只有一个可以包含文件名。如果提供了其他文件名,则除第一个选项外,其他所有选项都将被忽略

请注意,如果有多个翻译单元,输出文件名将被覆盖。如果需要来自多个翻译单元的组合输出,则应使用stderr

在以下示例中,优化信息输出到stderr:

gcc-O3-fopt信息 这个例子:

gcc-O3-fopt info missed=missed.all 将所有过程中遗漏的优化报告输出到missed.all,此过程:

gcc-O2-ftree矢量化-fopt信息矢量缺失 在stderr上打印矢量化传递中丢失的优化机会信息。请注意,-fopt info missed vec等同于-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,其中包含来自矢量器的关于错过机会的转储。

您肯定可以对某些优化进行优化,例如,
-ftree vectorizer verbose=n
告诉您在哪里应用了该优化,以及为什么在其他地方没有应用足够大的n