我有 g++ 4.7.3 编译器。我正在尝试遵循优化标志描述http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html并遇到下一个问题:
我有一个程序,它使用 -O2 和 -O3 标志给出不同的时间。-O2 比 -O3 快两倍。O2 时间为 8 毫秒,O3 时间为 16 毫秒。
所以我想了解究竟是什么有所作为。在上面的链接中,我看到:
“O3 优化更多。-O3 打开 -O2 指定的所有优化,还打开 -finline-functions、-funswitch-loops、-fpredictive-commoning、-fgcse-after-reload、-ftree-vectorize 和 -fipa -cp 克隆选项。”
所以我只需使用 -O2 并添加所有描述的标志:
-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone
时间为30ms。但是这组选项应该等价于-O3。为什么时间不一样?我在哪里做错了什么?
PS 所有结果都可以完美重现,精度为 1ms。
我已经检查了使用的选项
g++ -c -Q -Ox --help=optimizers
并看到 O3 还有一个附加选项:-ftree-loop-distribute-patterns。但是当我添加它时,选项集:
-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone -ftree-loop-distribute-patterns
速度还是30ms。