[英]Doubts about gcc O3 optimisation flag
我有 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。
您可以使用-Q
選項讓g++
向您顯示哪些選項處於活動狀態:
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..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.