bkm*_*bkm 40 gcc loops compiler-optimization
我想知道是否有一个可以与GCC一起使用的选项,以获得有关编译器实际选择和执行的优化的详细报告.使用-opt-report的英特尔C编译器可以实现这一点.我不想查看汇编文件并找出优化.我特意寻找编译器选择的循环展开和循环平铺因子.
小智 7
GCC 的报告并不像英特尔那样直接,但我们可以更喜欢。这里是 GCC 优化时使用的详细选项。
\n-fopt-info\n-fopt-info-options\n-fopt-info-options=文件名\n控制各种优化过程的优化转储。如果使用 \xe2\x80\x98-options\xe2\x80\x99 形式,则 options 是 \xe2\x80\x98-\xe2\x80\x99 分隔的选项关键字的列表,用于选择转储详细信息和优化。
\n这些选项可分为三组:
\n描述应发出何种消息的选项、\n描述转储详细程度的选项以及\n描述应包括哪些优化的选项。\n每组中的选项可以自由混合,因为它们不重叠。但是,如果发生任何冲突,后面的选项将覆盖命令行上前面的选项。
\n以下选项控制应发出哪种类型的消息:
\n\xe2\x80\x98optimized\xe2\x80\x99\n成功应用优化时打印信息。由通行证决定哪些信息是相关的。例如,矢量化器会打印成功矢量化的循环的源位置。
\n\xe2\x80\x98missed\xe2\x80\x99\n打印有关错过优化的信息。各个通道控制输出中包含哪些信息。
\n\xe2\x80\x98note\xe2\x80\x99\n打印有关优化的详细信息,例如某些转换、有关决策的更详细消息等。
\n\xe2\x80\x98all\xe2\x80\x99\n打印详细的优化信息。这包括 \xe2\x80\x98optimized\xe2\x80\x99、\xe2\x80\x98missed\xe2\x80\x99 和 \xe2\x80\x98note\xe2\x80\x99。
\n以下选项控制转储详细程度:
\n\xe2\x80\x98internals\xe2\x80\x99\n默认情况下,仅发出 \xe2\x80\x9chigh-level\xe2\x80\x9d 消息。此选项支持额外的、更详细的消息,这些消息可能只有 GCC 开发人员感兴趣。
\n可以使用以下一个或多个选项关键字来描述一组优化:
\n\xe2\x80\x98ipa\xe2\x80\x99\n启用所有过程间优化的转储。
\n\xe2\x80\x98loop\xe2\x80\x99\n启用所有循环优化的转储。
\n\xe2\x80\x98inline\xe2\x80\x99\n启用所有内联优化的转储。
\n\xe2\x80\x98omp\xe2\x80\x99\n启用所有 OMP(卸载和多重处理)优化的转储。
\n\xe2\x80\x98vec\xe2\x80\x99\n启用所有矢量化优化的转储。
\n\xe2\x80\x98optall\xe2\x80\x99\n启用所有优化的转储。这是上面列出的优化组的超集。
\n如果省略 options,则默认为 \xe2\x80\x98optimized-optall\xe2\x80\x99,这意味着从所有通道中转储有关成功优化的消息,省略被视为 \xe2\x80\x9cinternals\xe2 的消息\x80\x9d。
\n如果提供了文件名,则所有适用优化的转储将连接到文件名中。否则转储将输出到 stderr。尽管接受多个 -fopt-info 选项,但只有其中一个可以包含文件名。如果提供了其他文件名,则除了第一个此类选项之外的所有选项都将被忽略。
\n请注意,如果有多个翻译单元,输出文件名将被覆盖。如果需要多个翻译单元的组合输出,则应使用 stderr。
\n在以下示例中,优化信息输出到 stderr:
\ngcc -O3 -fopt-info\n这个例子:
\ngcc -O3 -fopt-info-missed=missed.all\n将所有传递中的错过优化报告输出到missed.all,这一个:
\ngcc -O2 -ftree-vectorize -fopt-info-vec-missed\n打印有关 stderr 上矢量化传递中错过的优化机会的信息。请注意,-fopt-info-vec-missed 等效于 -fopt-info-missed-vec。-fopt-info 之后列出的优化组名称和消息类型的顺序并不重要。
\n再举个例子,
\ngcc -O3 -fopt-info-inline-optimized-missed=inline.txt\n将有关错过优化的信息以及所有内联传递中的优化位置输出到 inline.txt。
\n最后,考虑:
\ngcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt\n这里两个输出文件名 vec.miss 和 Loop.opt 发生冲突,因为只允许一个输出文件。在这种情况下,只有第一个选项生效,后续选项将被忽略。因此,仅生成 vec.miss,其中包含来自矢量化器的有关错过机会的转储。
\n| 归档时间: |
|
| 查看次数: |
3887 次 |
| 最近记录: |