我有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。
優化是不是一個完美的科學。沒有確定的理由認爲你做錯了什麼(但是由於你沒有提供你的方法來進行這些測量,所以沒有辦法知道你沒有做錯什麼)。 – mah
至少GCC優化選項不能保證性能選項集的性能更快。有很多事情,更少的尺寸可以加速表現,例如緩存命中,分支預測等。 –
對於它的價值,文檔不會**明確指出-O3是-O2加上一些額外的選項 - 它們可能會做完全不同的事情_除了打開這些優化標誌之外,至少通過您發佈的文檔措辭。 – CmdrMoozy