我有g++ 4.7.3编译器。我试图遵循优化标志描述http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html,并有下一个问题:
我有一个程序,它使用-O2和-O3标志提供不同的时间。-O2比-O3快两倍。O2的时间是8ms,O3是16 is。
所以我想了解到底什么才是不同的。在上面的链接中,我看到:
"O3进行了更多的优化。-O3打开了-O2指定的所有优化,还打开了-finline-函数、-funswitch-循环、-fpredictive、-fgcse、-fpredictive和-fipa克隆选项。“
因此,我只需使用-O2并添加所有描述的标志:
-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone时间是30毫秒。,但是这组选项应该是等效的和-O3。为什么时间不一样?我在哪里做错事?
结果重现性好,精密度为1ms。
我已经检查了选项
g++ -c -Q -Ox --help=optimizers并且看到O3还有一个额外的选项:-ftree-循环-分发模式。但是,当我添加它时,选项设置如下:
-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone -ftree-loop-distribute-patterns速度仍然是30毫秒。
发布于 2013-10-28 21:02:10
您可以让g++向您展示-Q选项中哪些选项是活动的:
g++ -c -Q -O3 --help=optimizers输出内容类似于:
-O<number>
-Ofast
-Os
-falign-functions [enabled]
-falign-jumps [enabled]
-falign-labels [enabled]
-falign-loops [enabled]
-fasynchronous-unwind-tables [enabled]
-fbranch-count-reg [enabled]
-fbranch-probabilities [disabled]
-fbranch-target-load-optimize [disabled]
-fbranch-target-load-optimize2 [disabled]
-fbtr-bb-exclusive [disabled]
-fcaller-saves [enabled]
-fcombine-stack-adjustments [enabled]
-fcommon [enabled]
-fcompare-elim [enabled]
-fconserve-stack [disabled]
-fcprop-registers [enabled]
-fcrossjumping [enabled]
-fcse-follow-jumps [enabled]
-fcx-fortran-rules [disabled]
-fcx-limited-range [disabled]
-fdata-sections [disabled]
-fdce [enabled]
ETC..https://stackoverflow.com/questions/19644541
复制相似问题