![](/img/trans.png)
[英]Compiling with all -O3 flags manually has different result than literally specifying “-O3”
[英]what are the compilation flags that are activated by using O3
我們正在將系統中的英特爾編譯器版本從 v14 更改為 v18,通過運行測試,我們注意到 O3 在某些情況下會產生不正確的結果,而相同的代碼在 O3 和 v14 上運行正確。 我想知道這兩個版本之間的優化有何不同,以及如何獲得在每個版本中使用 O3 激活的標志的完整列表。 在此先感謝大家的幫助和建議。
-O3
的行為記錄在英特爾網站上: https : //software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compiler-reference /compiler-options/compiler-option-details/optimization-options/o.html
O3
- 執行
O2
優化並啟用更積極的循環轉換,例如 Fusion、Block-Unroll-and-Jam 和折疊 IF 語句。- 此選項可以設置其他選項。 這由編譯器決定,具體取決於您使用的操作系統和體系結構。 設置的選項可能會因版本而異。
- 當 O3 與選項
-ax
或-x
(Linux) 或選項/Qax
或/Qx
(Windows) 一起使用時,編譯器會執行比O2
更積極的數據依賴性分析,這可能會導致編譯時間更長。- 除非發生循環和內存訪問轉換,否則
O3
優化可能不會導致更高的性能。 與 O2 優化相比,優化在某些情況下可能會減慢代碼速度。- 對於具有大量使用浮點計算和處理大型數據集的循環的應用程序,建議使用
O3
選項。- 與非英特爾微處理器相比,共享庫中的許多例程針對英特爾® 微處理器的優化程度更高。
頁面底部列出了“替代選項”,其中僅列出-Od
(禁用所有優化:可能不是您想要的)。
所以看起來-O3
激活了不能用其他標志表示的優化(所以-O3
沒有長格式的等效版本)。
查看英特爾關於用於高級優化的技術的頁面,看起來它們不能按菜單啟用,因此對於 HLO,它是全有或全無,並且使用O2
或O3
啟用(除了O2
使用O3
的技術)。
將其與具有長格式等效項的-Ofast
進行比較:
Ofast
- 它設置編譯器選項
-O3
、-no-prec-div
和-fp-model fast=2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.