2017-09-26 169 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。 「