2010-08-23 18 views
6

निरंतर प्रसार जैसे अनुकूलन समान संकलन इकाई (यानी एक ही फ़ाइल) के भीतर कार्यों में संभव है।क्या संकलन इकाइयों में अनुकूलित सी/सी ++ कंपाइलर हैं?

उदाहरण के लिए:

int f(int x) 
{ 
    return 3 + x; 
} 

int main(void) 
{ 
    printf("%d\n", 1 + f(4)); 
    return 0; 
} 

कि उदाहरण में, मुझे लगता है कि एक पर्याप्त स्मार्ट संकलक अन्य निरंतर 'के साथ पूर्णांक गणित को सुलझाने' 4 'समारोह' एफ 'के लिए निरंतर प्रचार कर सकते हैं, 3 ', और परिणाम मूल्य को वापस प्रसारित करता है इस प्रकार सब कुछ अंतिम मूल्य' 8 'में जोड़ता है।

(ठीक है, मुझे ठीक कर लें मैं गलत हूँ ..)

हालांकि, क्या हुआ अगर समारोह 'एफ' एक और संकलन इकाई में है हो रहा है। चूंकि वे दोनों इकाइयां अलग से संकलित की जाती हैं, इसलिए संकलक इस तरह अनुकूलित नहीं कर सकता है।

क्या इसका मतलब यह है कि ऑप्टिमाइज़ेशन केवल उसी संकलन इकाई के भीतर ही संभव है, या लिंक-टाइम के कुछ प्रारूप देर से अनुकूलन किए गए हैं?

+0

साइड प्रश्न: क्या एक स्क्रिप्ट जो सभी स्रोत पेड़ से एक एकल बड़ी .c फ़ाइल को अनुकूलन संभावनाओं को बढ़ा सकती है? –

+3

हां, सभी कोड को एक फ़ाइल में डालने के लिए अमलगामेशन - http://www.sqlite.org/amalgamation.html - और वास्तव में उस उद्देश्य के लिए उपयोग किया जाता है। – sharptooth

+1

केवल तभी जब कोड इसका समर्थन करता है। प्रीप्रोसेसर परिभाषित करता है, स्थिर प्रति-अनुवाद-इकाई परिभाषाएं, कंपाइलर सीमाएं और अन्य चीजें रास्ते में आती हैं। ओटीओएच, यह भी काफी मजबूत बनाता है। – peterchen

उत्तर

5

दोनों MSVC (8.0 के बाद से: VS2005) और जीसीसी (4.5 के बाद से) अवधारणा का समर्थन।

  • MSVC एक संकलक स्विच /GL और लिंकर स्विच /LTCG उपयोग करता है। Documentation

  • जीसीसी यह सक्षम है और एक ही प्रभाव को -flto, -fwhole-program, -fwhopr, और/या -combine का उपयोग करता है होना आवश्यक है।

"समस्या" Documentation (आपके ब्राउज़र में विकल्प के लिए खोज) है कि हर संकलन इकाई (स्रोत फ़ाइल) (और MSVC हर पुस्तकालय के मामले में) इस के साथ संकलित किए जाने की जरूरत है, तो आप कर सकते हैं इसके बिना संकलित पुरानी बाइनरी ऑब्जेक्ट फ़ाइलों का उपयोग नहीं करें। यह डिबगिंग को भी कठिन बनाता है, क्योंकि अनुकूलक बहुत अधिक आक्रामक और अप्रत्याशित है।

+0

... और .lib फाइलें भारी भारी फिर भी, यह आश्चर्यजनक है कि कोड उन्मूलन के लिए यह क्या कर सकता है। – peterchen

0

जीसीसी 4.5 ने लिंक-टाइम अनुकूलन पेश किया। AFAIK, यह केवल x86 और x64 लक्ष्यों पर काम करता है।

1

माइक्रोसॉफ्ट विजुअल स्टूडियो एलटीसीजी स्विच (लिंक-टाइम कोड पीढ़ी) द्वारा सक्षम WPO (संपूर्ण प्रोग्राम अनुकूलन) का समर्थन करता है।

यह कई अन्य समस्याओं का कारण बनता है जिन्हें मुझे अभी याद नहीं है, और कई डेवलपर्स द्वारा इसे पसंद किया जाता है।

+0

यहां वे जाते हैं: http://msdn.microsoft.com/en-us/magazine/cc301698.aspx 1. बहुत बड़ी स्थिर पुस्तकालय 2. "बाइटकोड" के साथ स्थिर पुस्तकालय जो किसी भी समय असमर्थित हो सकते हैं। – sharptooth

+1

मेरे पास बहुत अधिक कोड बेस के साथ और अधिक था। इसके अलावा, मैं संकलन समय जोड़ना होगा। –

+1

@ शार्पतोथ: बाइटकोड बस मध्यवर्ती प्रस्तुति है। कई कंपाइलर्स इस तरह से करते हैं। लिंक-टाइम ऑप्टिमाइज़ेशन के लिए हर बार पूरे कार्यक्रम को पुन: संकलित करने की सलाह दी जाती है - यह भी कि रिलीज बिल्ड कैसे किया जाना चाहिए। इस प्रकार बाइटकोड के संभावित असंगत संस्करण वास्तव में एक समस्या नहीं हैं। – Dummy00001

1

हाँ, दृश्य स्टूडियो में विजुअल C++ संकलक के लिए, यह जाना जाता है Whole Program Optimization के रूप में:

पूरे कार्यक्रम अनुकूलन संकलक कार्यक्रम में सभी मॉड्यूल पर जानकारी के साथ ऑप्टिमाइज़ेशन करने के लिए अनुमति देता है।

  • समारोह सीमाओं के पार रजिस्टरों के उपयोग अनुकूलित करें: पूरे कार्यक्रम अनुकूलन के बिना, अनुकूलन मॉड्यूल (compiland) आधार प्रति एक पर प्रदर्शन

    सभी मॉड्यूल के बारे में जानकारी के साथ

    , संकलक कर सकते हैं ।

  • वैश्विक आंकड़ों के संशोधनों पर नज़र रखने, भार और दुकानों की संख्या में कमी की अनुमति के एक बेहतर काम करते हैं।

  • एक संकेतक भिन्नता द्वारा संशोधित आइटम, भार और दुकानों की संख्या को कम करने के संभव सेट पर नज़र रखने का एक बेहतर काम करो।

  • पर एक फ़ंक्शन को इनलाइन करें जब फ़ंक्शन को में अन्य मॉड्यूल में परिभाषित किया गया हो।

3

क्लैंग एलएलवीएम आईआर के लिए संकलित करता है, और एलएलवीएम लिंकर देशी प्रोग्रामिंग के दौरान पूरे कार्यक्रम अनुकूलन करता है।

+0

llvm मॉड्यूल को मिश्रण और मिलान करना वास्तव में आसान बनाता है और उन्हें अलग से या संयुक्त अनुकूलित करता है। और कई (शायद बहुत अधिक) अनुकूलन अवसर प्रदान करता है। –

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