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