我有一个小程序,当用-O1编译时,它的性能要好得多,而不是不优化。我很想知道编译器所做的优化是什么导致了这种加速。
我想我要做的是(从手册页和gcc -Q -v中获得) -O1相当于优化标志的列表,然后从列表中挑选出性能如何变化。
我所发现的是,即使包含整个优化列表,也不能给我提供一个性能与-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相关的优化标志列表中?
发布于 2012-10-07 21:28:24
使用-S选项检查生成的汇编程序如何?
从另外使用"my_program.c“的两个实验来看,-O0选项似乎禁用了所有优化,而不管建议的算法列表有多长。
发布于 2018-02-12 20:48:39
这是意料之中的,而不是一个错误: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 ...https://stackoverflow.com/questions/12769173
复制相似问题