选择 gcc 优化标志等效于 -O1

  • 本文关键字:-O1 标志 gcc 优化 选择 gcc
  • 更新时间 :
  • 英文 :


我有一个小程序,当使用-O1编译而不是没有优化时,它的性能要好得多。我很想知道编译器所做的优化导致了这种加速。

我想我要做的是获取-O1等效的优化标志列表(从手册页和gcc -Q -v获得),然后从列表中挑选以查看性能如何变化。

我发现,即使包括整个优化列表,仍然没有给我一个性能与 -O1 优化程序一样好的程序。

换句话说,

gcc -O0 -fcprop-registers -fdefer-pop -fforward-propagate -fguess-branch-probability 
    -fif-conversion -fif-conversion2 -finline -fipa-pure-const -fipa-reference 
    -fmerge-constants -fsplit-wide-types -ftoplevel-reorder -ftree-ccp -ftree-ch 
    -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse 
    -ftree-fre -ftree-sink -ftree-sra -ftree-ter myprogram.c

gcc -O1 myprogram.c

我正在使用 gcc 版本 4.5.3

-O1所做的其他事情中是否未包含在手册中与-O1相关的优化标志列表中?

使用 -S 选项检查生成的汇编程序怎么样?

从同样使用"my_program.c"的两个实验来看,-O0 选项似乎禁用了所有优化,而不管建议的算法列表有多长。

这是

意料之中的,而不是错误:https://gcc.gnu.org/wiki/FAQ#optimization-options

-O1

是否还有其他未包含在手册中与 -O1 关联的优化标志列表中的内容?

是的,它会打开优化。指定单个-fxxx标志不会执行此操作。

如果您不使用-O1-O2-O3-Ofast-Og优化选项之一(而不是-O0),则根本不会发生优化,因此调整哪些优化通关处于活动状态不会执行任何操作。

要查找哪个优化递次会有所不同,您可以打开-O1然后禁用各个优化递次,直到找到与众不同的优化递次。

即代替:

gcc -fxxx -fyyy -fzzz ...

用:

gcc -O1 -fno-xxx -fno-yyy -fno-zzz ...

最新更新