选择相当于-O1的gcc优化标志

问题描述 投票:0回答:2

我有一个小程序,使用

-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
相关的优化标志列表中吗?

c gcc compiler-optimization
2个回答
2
投票

如何使用 -S 选项来检查生成的汇编程序?

从还使用“my_program.c”的两个实验来看,无论建议的算法有多长, -O0 选项都会禁用所有优化。


2
投票

这是预期的,不是错误: https://gcc.gnu.org/wiki/FAQ#optimization-options

-O1 执行的其他操作是否未包含在手册中与 -O1 相关的优化标志列表中?

是的,它打开了优化。指定单独的

-fxxx
标志并不能做到这一点。

如果您不使用

-O1
-O2
-O3
-Ofast
-Og
优化选项之一(而不是
-O0
),则根本不会发生优化,因此调整 which 优化过程处于活动状态,不会执行任何操作。

要查找哪个优化通道会产生影响,您可以打开

-O1
,然后禁用各个优化通道,直到找到产生影响的优化通道。

即而不是:

gcc -fxxx -fyyy -fzzz ...

用途:

gcc -O1 -fno-xxx -fno-yyy -fno-zzz ...
© www.soinside.com 2019 - 2024. All rights reserved.