2013-10-28 70 views
5

我有g ++ 4.7.3編譯器。我試圖按照優化標誌描述http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html,並有一個下一個問題:有關gcc O3優化標記的疑問

我有一個程序,它給與-O2和-O3標誌不同的時間。 -O2比-O3快兩倍。 O2的時間是8ms,O3的時間是16ms。

所以我想明白究竟是什麼使差異。在上面的鏈接中,我看到:

「O3優化更多-O3打開由-O2指定的所有優化,並打開-finline函數,-funswitch-loops,-fpredictive-commoning,-fgcse-後加載,-ftree-vectorize和-fipa-cp -clone選項。「

所以我簡單地採取-02,並添加所有描述標誌:

-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone 

而且時間爲30ms。 但是這組選項應該是相當於到-O3。爲什麼時間不同?我在哪裏做錯了什麼?

P.S.所有結果都可以以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 

速度仍然是30ms。

+2

優化是不是一個完美的科學。沒有確定的理由認爲你做錯了什麼(但是由於你沒有提供你的方法來進行這些測量,所以沒有辦法知道你沒有做錯什麼)。 – mah

+1

至少GCC優化選項不能保證性能選項集的性能更快。有很多事情,更少的尺寸可以加速表現,例如緩存命中,分支預測等。 –

+0

對於它的價值,文檔不會**明確指出-O3是-O2加上一些額外的選項 - 它們可能會做完全不同的事情_除了打開這些優化標誌之外,至少通過您發佈的文檔措辭。 – CmdrMoozy

回答

7

你可以得到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.. 
+0

謝謝。因此它顯示了O3的更多附加選項:-ftree-loop-distribute-patterns。當我將它添加到選項設置時,速度仍然是30ms。 – klm123