2008-09-10 65 views
6

您是否通常將您的編譯器設置爲針對最大速度或最小代碼大小進行優化?或者您是否手動配置個人優化設置?爲什麼?您通常如何設置編譯器的優化設置?

我注意到大部分時間人們傾向於將編譯器優化設置保留爲其默認狀態,這與Visual C++意味着最高速度。 我一直認爲默認設置更多的是在基準測試上表現出色,這些測試通常是完全適合二級緩存的小型程序,而不是最適合整體性能的小程序,所以我通常將其設置爲針對最小尺寸進行優化。

回答

6

作爲Gentoo用戶我已經嘗試了完整的OS上相當多的優化,也有過在Gentoo forums它無休止的討論。 GCC的一些好標誌可以在wiki中找到。

總之,優化尺寸最好的工作在一箇舊的筆記本電腦Pentium3有限的RAM,但我的主要臺式機採用了酷睿2上,-02給了在所有更好的結果。

還有一個small script如果你有興趣在x86(32位)是最優化的特定標誌。

如果您使用gcc和真的想優化特定應用程序,嘗試ACOVEA。它運行一組基準,然後用所有可能的編譯標誌組合重新編譯它們。有使用網站上的霍夫曼編碼(越低越好)一個例子:

A relative graph of fitnesses: 

    Acovea Best-of-the-Best: **************************************    (2.55366) 
    Acovea Common Options: *******************************************   (2.86788) 
         -O1: **********************************************  (3.0752) 
         -O2: ***********************************************  (3.12343) 
         -O3: ***********************************************  (3.1277) 
      -O3 -ffast-math: ************************************************** (3.31539) 
         -Os: *************************************************  (3.30573) 

(請注意,它發現-Os是最慢的這Opteron處理器的系統上。)

+1

您的答案的第一句讓我想起http://web.archive.org/web/20041230075641/http://www.funroll-loops.org/ – 2011-02-10 10:58:18

0

我們總是用最大化的最佳速度,但隨後,所有我的C++編寫的代碼以某種方式與生物信息學算法和速度是至關重要的,而代碼尺寸相對較小。

0

內存現在很便宜:)因此,除非您使用嵌入式系統,否則將編譯器設置設置爲最高速度可能很有意義。當然,答案取決於具體情況。

1

對我來說,這取決於我使用的平臺。對於某些嵌入式平臺或者當我在Cell處理器上工作時,您有限制,例如非常小的緩存或爲代碼提供的最小空間。

我用GCC,而且往往離開它的「-02」,這是優化的「最安全」的水平和優待速度超過最小尺寸。

我會說這可能不會產生巨大的變化,除非你是在這種情況下,你也許應該基準您的特定用例的各種選項非常高性能的應用開發。

2

我喜歡用最小尺寸。內存可能便宜,緩存不是

+3

而你檢查產生更快的代碼? – 2008-09-10 12:04:59

1

Microsoft發佈了所有針對大小進行了優化的C/C++軟件。基準測試後,他們發現它實際上提供了更好的速度(由於緩存局部性)。

2

除了這個事實,緩存局部性的問題(如在弗氏說的),一個其他的東西微軟確實是介紹他們的應用程序,並找出哪些代碼路徑在啓動的前幾秒內執行。之後,他們將這些數據反饋給編譯器,並要求它將啓動過程中執行的部分放在一起。這會縮短啓動時間。

我確實認爲這種技術在VS中是公開的,但我不是100%確定的。

1

優化有很多種類型,最大速度與小代碼只有一種。在這種情況下,我會選擇最大速度,因爲可執行文件會稍微大一些。另一方面,您可以針對特定類型的處理器優化您的應用程序。在某些情況下,這是一個好主意(如果您打算僅在您的工作站上運行該程序),但在這種情況下,該程序很可能不適用於其他體系結構(例如:您編譯程序以在奔騰4機器 - >它可能無法在奔騰3上運行)。

1

建立兩個,配置文件,選擇哪個在特定項目和硬件上更好地工作。

對於性能嚴重的代碼,那是 - 否則選擇任何,不要麻​​煩。

0

這取決於您的程序的應用程序。在對應用程序進行編程以控制快速工業過程時,優化速度是有道理的。在對僅需要對用戶輸入做出反應的應用程序進行編程時,優化大小可能是有意義的。也就是說,如果您擔心可執行文件的大小。

0

調整這樣的編譯器設置是一種優化。根據「不成熟的優化是萬惡之源」的原則,在程序接近最終運輸狀態之前,我並不打擾它,並且我發現它速度不夠快 - 即幾乎從不。