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

选择等效于-O1的gcc优化标志,gcc,Gcc,我有一个小程序,当使用-O1编译时,它的性能要比没有优化时好得多。我很想知道编译器所做的优化会导致这种加速 我想我应该做的是,获取与-O1等效的优化标志列表(从手册页和gcc-Q-v中获得),然后从列表中挑选,看看性能如何变化 我所发现的是,即使包括整个优化列表,仍然不能给我提供一个性能与-O1优化的程序一样好的程序 换句话说 gcc -O0 -fcprop-registers -fdefer-pop -fforward-propagate -fguess-branch-probability

我有一个小程序,当使用
-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选项似乎会禁用所有优化,而不管建议的算法列表有多长。

这是意料之中的,而不是错误:

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

是的,它开启了优化。指定单个的
-fxxx
标志并不能做到这一点

如果您不使用
-O1
-O2
-O3
-Ofast
、或
-Og
优化选项之一(而不是
-O0
),则根本不会进行优化,因此调整哪些优化过程处于活动状态没有任何作用

要找出哪个优化过程产生差异,可以打开
-O1
,然后禁用各个优化过程,直到找到产生差异的优化过程为止

i、 e.而不是:

gcc -fxxx -fyyy -fzzz ...
使用:


-O2
-O3
的情况下,您的程序如何运行?对于不同的优化级别0到3,计时分别为31、16、14和19秒。很有趣。我倾向于认为简单地使用-O2将比尝试分解调整更简单,特别是因为似乎很难确定在-On指定的每个优化级别中真正存在哪些调整。这取决于这两秒钟有多重要。显然,31到14-16秒是时间减少50%或速度增加100%;非常值得拥有。但是,14秒和16秒之间的差异到底有多大,取决于你的大背景。如果一个月运行一次,那没关系;如果一分钟跑几次,那就更重要了。
gcc -O1 -fno-xxx -fno-yyy -fno-zzz ...