當我編寫例程來測試兩種東西的性能時,我應該使用哪種優化標誌? -O0,-O2或-g?測試兩種東西的性能,我應該使用哪種標誌(使用gcc)? -O0,-O2或-g?
回答
您應該使用每個設置測試代碼的性能。理想情況下,數字越大-O0,-O1,-O2,-O3意味着更好的性能,因爲有更多/更好的優化,但情況並非總是如此。
同樣,根據你的代碼的寫法,它的一些可能以你從語言或編譯器或兩者都沒有期望的方式被刪除。因此,您不僅需要測試代碼的性能,還需要真正測試從代碼生成的程序,以確保它按照您的想法執行。
絕對沒有一個優化設置可爲編譯器編譯的任何代碼提供最佳性能。您必須測試特定系統上的設置和編譯器,以驗證該系統的代碼確實運行得更快。你如何測試性能是否充滿了許多陷阱和其他錯誤產生的問題,你很容易誤解結果。所以你必須小心如何測試你的表現。
對於gcc人們通常會說-O3有使用風險,-O2是最好的性能/安全。在大多數情況下,使用-O2足以使很多錯誤消失。 -O2並不總是產生最快的代碼,但它通常產生更快的代碼-O0和-O1。調試器的使用可能會使優化失敗或將其全部移除,因此請勿使用基於調試器的構建或使用調試器來測試性能。在用戶使用系統時測試系統,如果用戶在運行程序時使用調試器然後測試,否則不用。
在GCC中-O0
完全禁用編譯器代碼優化。 -g
向可執行文件添加了調試信息,以便您可以使用調試器。
如果要啓用速度優化,請使用標記-O1
或-O2
。有關更多信息,請參閱man gcc(1)
。
如果要測量代碼的性能,請使用profiler,如valgrind或gprof。
其實,如果你關心性能,你一定要用-O3
。爲什麼放棄潛在的優化?
是的,-O2
和-O3
之間有一個小的但可測量的差異。
-g
不是優化標誌,但它可以防止優化,因此必須禁用代表性基準。
'O3'不一定比'O2'好,因爲我瞭解gcc。 O3會進行積極的內聯,可能會損害本地化並降低性能。因此總是一個好主意來檢查兩者,看看有什麼更好的表現。 – Voo 2012-04-27 11:44:34
@Voo就像我說的,有基準。雖然'-O3'在病理情況下可能比'-O2'慢,它通常會更快或至少一樣快。特別是內聯通常不會降低性能,因爲優化器不會「愚蠢地」內聯,它仍然使用啓發式方法來確定執行速度是否會從內聯中受益。 – 2012-04-27 11:56:33
- 1. 我應該使用哪個編譯標誌 - > Os或O2?
- 2. 應該使用哪種gem來測試JavaScript,使用rails jasminerice或jasmine-rails或teaspoon?
- 3. 我應該使用哪種Java版本的Clojure(性能)?
- 4. 我應該使用哪種視圖?
- 5. 我應該使用西里爾字符的哪種編碼?
- 6. php或javascript應該使用哪一種
- 7. 我們應該使用哪一種 - 澤西灰熊或澤西灰熊2
- 8. 在gcc中使用-g和-O2選項
- 9. 我應該使用哪種Azure角色?
- 10. 我應該使用哪種EOL?
- 11. 我應該使用哪種IVI參考?
- 12. UrlEncoding - 我應該使用哪種編碼?
- 13. 我應該使用哪種語言?
- 14. 我應該使用哪種DAL選擇?
- 15. 我應該使用哪種Paypal SDK?
- 16. 我應該使用哪種PayPal服務
- 17. 我應該使用哪種佈局?
- 18. 我應該使用哪種SSL實現?
- 19. 我應該使用哪種PayPal iPhone SDK?
- 20. 我應該使用哪種IronPython IDE?
- 21. 我應該使用哪種佈局?
- 22. 我應該使用哪種python安裝?
- 23. 我應該使用哪種佈局
- 24. Android我應該使用哪種佈局
- 25. 我應該使用哪種方法?
- 26. Spark - 我應該使用哪種語言?
- 27. 我應該使用哪種NMEA語句
- 28. mysql ---我應該使用哪種類型?
- 29. 我應該使用哪種Excel公式
- 30. 我應該使用哪種PageRank公式?
想一想。你是否認爲***也許***人需要知道什麼是編譯器或你在說什麼? ;-)這種風格的旗幟是幾個共同的。 – 2012-04-27 09:45:51
@ T.J.Crowder人們喜歡發佈的軟件,所以我選擇-O2。謝謝。 – 2012-04-27 09:58:07
@ user:您似乎錯過了一點,但至少您在問題的標題中添加了「with gcc」。 (提示:*這是什麼標籤*) – 2012-04-27 10:01:52