2015-10-14 81 views
7

我想爲輸入C程序定義一組優化序列,以研究我的應用序列對代碼性能的影響。GCC優化標誌的順序

例如:

gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o 

這些選項的順序會影響所產生的代碼的有效性?

同樣,兩次應用優化選項確實會產生影響嗎?

有沒有更好的方法來測試數以千計的優化序列?就像-02(包括約20選項),我想定義自己的標誌

回答

5
  • 難道這些選項的順序會影響生成的代碼的有效性?

    • ,這些選項作爲命令行參數傳遞到編譯器的順序不影響所產生的代碼的有效性。
  • 有沒有更好的方法來測試成千上萬的優化序列?

    • 因爲我們沒有w.r.t的優化參數傳遞給編譯器的優化序列,我們沒有辦法測試。但是,如您所知,我們擁有您可以嘗試的優化級別。
  • 更高的優化級別對程序執行更多的全局轉換,並應用更昂貴的分析算法以生成更快,更緊湊的代碼。編譯時間的價格和執行時間的改進都取決於特定的應用程序和硬件環境。您應該嘗試爲您的應用程序找到最佳級別。 請參考Optimization Levels for GCC

  • 我想定義自己的標誌

  • 目前,GCC支持很多標誌,你可以在Optimize Options參考。如果你想定義一個標誌,那麼編譯器需要了解它,你可能需要修改gcc的編譯器代碼,以便它可以理解一個新的標誌。請參閱github上的代碼,opts.c,opts.c處理優化標誌和級別。

  • 同樣,兩次應用優化選項的確會產生影響嗎?

    • 不,兩次應用相同的優化選項不會產生影響。例如:執行gcc -fauto-inc-dec -fauto-inc-dec test.c與執行gcc -fauto-inc-dec test.c具有相同的影響。

方關於額外的優化留言中加入經過 - 你可以寫一個gcc的優化插件,使更多的過程,請參閱這篇文章:An introduction to creating GCC plugins文章有助於創建插件做額外的優化。通過,轉換代碼或分析信息。)

+0

你說沒有。然而,在科學論文中,我發現了這樣一個說法:「在優化編譯器時,按照固定順序對 程序的每種方法應用 相同的優化階段集合是標準做法。然而,一些研究人員已經表明,最好的優化 的優化順序在一個程序中有所不同,也就是說,它是特定於功能的。因此,我們需要一種技術來爲程序的各個部分選擇最佳優化排序,而不是應用相同的固定優化集爲整個計劃的 「。 https://www.eecis.udel.edu/~cavazos/oopsla-2012.pdf – staticx

+5

@staticx:是的,你說的正確的是,優化順序通過很重要。但是,給定命令行參數的順序不會影響gcc中的優化傳遞順序。 – janneb

+0

@janneb我不太熟悉gcc和優化階段排序問題。好的,假設我有一個給定的C程序和一系列優化序列。我如何製作影響代碼轉換的通行證? – staticx