使用 IBM 的 XL 编译器系列,可以提供两个选项 (-qreport
和-qlist
) 来为每个源文件生成报告,其中包括关于应用了哪些优化的信息,或者代码的哪些部分无法优化(以及为什么)。
是否有可能为 GNU 的 g++ 获得类似的报告 - 如果是,该怎么做?
使用 IBM 的 XL 编译器系列,可以提供两个选项 (-qreport
和-qlist
) 来为每个源文件生成报告,其中包括关于应用了哪些优化的信息,或者代码的哪些部分无法优化(以及为什么)。
是否有可能为 GNU 的 g++ 获得类似的报告 - 如果是,该怎么做?
看看-fdump-tree-[switch]
旗帜。您可以使用它-fdump-tree-all
来获取大量信息。
此外,在主干 gcc-fopt-info-[options]
中,您可以访问更高级别的优化信息,例如,当应用特定优化、错过等时,例如
-fopt-info-inline-optimized-missed
打印所有成功和错过的内联优化(stderr
在这种情况下)。这显然是相当新的功能,所以我不确定它的支持程度如何。
在较早的版本中,它们-ftree-vectorizer-verbose=n
现在已被弃用,取而代之的是 opt-info。
所有这些选项都列在这里https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html虽然挑选有用的选项可能有点棘手。
用于-S -fverbose-asm
列出汇编程序输出标头中的每个静默应用选项(包括优化选项)。
来自https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Optimize-Options.html#Optimize-Options:
您可以调用 GCC-Q --help=optimizers
以找出在每个级别启用的确切优化集。
示例:(启用优化选项的计数)不需要文件。
$ g++ -std=c++17 -O2 -Q --help=optimizers 2>&1 |grep enabled |wc -l
135
请注意,-O1/2/3 启用的许多优化没有单独的标志 (另请参见:c++ - g++ O1 is not equal to O0 with all related optimization flags - 代码日志)