2017-09-26 174 views
1

gcc5.4 documentation的效果,它说GCC,比较使用-02和使用所有的优化标记它打开

-02开启由-O指定的所有优化标志。这也开启了以下优化标志:

-fthread跳动 -falign-功能-falign跳动 -falign-循环-falign-标签 -fcaller,节省 -fcrossjumping -fcse跟随跳动等

看来,使用-O2具有相同的效果,使用gcc 5.4.0中的-O2开启的所有83个优化标志对测试程序的性能。

不过,我比较由

GCC-5.4 -02 test.c的-o test1的

获得的可执行文件TEST1和TEST2的运行时间gcc-5.4 -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fcompare-elim ... -fthread-jumps -falign-functions ...(全部83个标记)test.c -o test2

我测试了20个随机生成的c程序,并运行了每个测试用例100000次,以确保测量运行时间足够准确。 但结果是使用-O2平均比使用所有83个标志快60%左右。

我真的很困惑为什么使用-O2的效果不等同于使用所有打开的优化标志。我不得不误解任何解释,我会很感激任何帮助。非常感谢。

+3

https://gcc.gnu.org/wiki/FAQ#Is_-O1_.28-O2.2C-O3_or_-Os.29_equivalent_to_individual_-foptimization_options.3F –

回答

1

这是一个常见的问题。为了启用(或禁用)特定的优化,您必须首先启用优化器,即使用-O...标志之一,但-O0(或-O,相当于-O1)除外。

+0

plus”其次,-Ox标志启用了很多优化,这些优化是不受任何个人-f *选项控制。“来自Marc Glisse提供的链接https://gcc.gnu.org/wiki/FAQ#Is_-O1_.28-O2.2C-O3_or_-Os.29_equivalent_to_individual_-foptimization_options.3F – bolov

0

优化级别影响编译器其他部分的决策,除了确定哪些通行证运行。这些可以在诸如代码的内部表示,寄存器分配等之间转换的强制过程中进行,因此优化级别不完全等同于使每个编译器通过的一组交换机。 关于此主题的一些讨论请看this thread。 “