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

4

2 回答 2

2

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

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

于 2012-10-07T13:28:24.240 回答
1

这是预期的,而不是错误: 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 ...
于 2018-02-12T12:48:38.947 回答