2013-10-28 17 views
5

मेरे पास g ++ 4.7.3 कंपाइलर है। मैं अनुकूलन झंडे का वर्णन http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html का पालन करने की कोशिश कर रहा हूं और अगली समस्या है:जीसीसी ओ 3 अनुकूलन ध्वज के बारे में संदेह

मेरे पास एक प्रोग्राम है, जो -ओ 2 और -ओ 3 ध्वज के साथ अलग-अलग समय देता है। -ओ 2 -ओ 3 से दोगुना तेज है। ओ 3 के साथ ओ 2 और 16 एमएमएस के साथ समय 8ms है।

तो मैं समझना चाहता हूं कि वास्तव में क्या अंतर आता है। उपर्युक्त लिंक में मैं देखता हूं:

"ओ 3 ऑप्टिमाइज़ अभी भी अधिक। -ओ 3 -ओ 2 द्वारा निर्दिष्ट सभी अनुकूलन को चालू करता है और -फिन-फ़ंक्शन, -फंसविच-लूप, -फ्रिक्टिक्टिव-आमिंग, -एफजीसीई- बाद में पुनः लोड, -फ्री-वेक्टरटाइज और -फापा-सीपी-क्लोन विकल्प। "

तो मैं बस -O2 लेने के लिए और सभी वर्णित झंडे जोड़ें:

-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone 

और समय 30ms है। लेकिन विकल्पों का यह सेट समकक्ष से -O3 होना चाहिए। समय अलग क्यों है? मैं कुछ गलत कहां करूं?

पीएस सभी परिणाम पूरी तरह से 1ms की सटीकता के साथ पुन: उत्पन्न होते हैं।


मैं

g++ -c -Q -Ox --help=optimizers 

का उपयोग कर विकल्प की जाँच की और देखा कि ओ 3 एक और अतिरिक्त विकल्प है है -ftree लूप-वितरित-पैटर्न। लेकिन जब मैं इसे विकल्प सेट करता हूं:

-O2 -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize -fipa-cp-clone -ftree-loop-distribute-patterns 

गति अभी भी 30 मिमी है।

+2

अनुकूलन एक आदर्श विज्ञान नहीं है:

g++ -c -Q -O3 --help=optimizers 

उत्पादन की तरह कुछ है। यह सोचने का कोई निश्चित कारण नहीं है कि आप कुछ भी गलत कर रहे हैं (लेकिन चूंकि आपने इन मापों को लेने के लिए अपनी पद्धति प्रदान नहीं की है, इसलिए यह जानने का कोई तरीका नहीं है कि आप कुछ भी गलत नहीं कर रहे हैं)। – mah

+1

कम से कम जीसीसी अनुकूलन विकल्प प्रदर्शन विकल्प सेट के लिए तेज़ प्रदर्शन की गारंटी नहीं देते हैं। कई चीजें हैं, कम आकार प्रदर्शन को तेज कर सकता है, उदाहरण के लिए कैश हिट, शाखा भविष्यवाणी, आदि –

+0

इसके लायक होने के लिए, दस्तावेज़ ** ** ** स्पष्ट रूप से नहीं कहते हैं कि -ओ 3 है -ओ 2 और कुछ अतिरिक्त विकल्प - वे पूरी तरह से अलग-अलग चीजें कर सकते हैं _ इन अनुकूलन झंडे को चालू करने के अलावा, कम से कम प्रलेखन शब्द जो आपने पोस्ट किया है। – CmdrMoozy

उत्तर

7

आप g++ आप को दिखाने के लिए क्या विकल्प -Q विकल्प के साथ सक्रिय है प्राप्त कर सकते हैं:

-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.. 
+0

धन्यवाद। तो यह ओ 3: -फ्री-लूप-वितरित-पैटर्न के साथ एक और अतिरिक्त विकल्प दिखाता है। जब मैं इसे विकल्पों में जोड़ता हूं तो गति अभी भी 30 मिमी है। – klm123

संबंधित मुद्दे