2012-01-23 21 views
13

यदि मैं बेहतर प्रदर्शन प्राप्त करना चाहता हूं, तो उदाहरण के लिए, MySQLdb, मैं इसे स्वयं संकलित कर सकता हूं और मुझे बेहतर प्रदर्शन मिलेगा क्योंकि यह i386, i486 या कभी भी संकलित नहीं है, बस मेरे सीपीयू पर इसके अलावा मैं संकलन विकल्प चुन सकता हूं और इस तरह ... अब, मैं सोच रहा था कि यह गैर-नियमित सॉफ्टवेयर, जैसे कि कंपाइलर के लिए भी सच है। यहां पहला भाग आओ:संकलित संकलक द्वारा संकलित कोड का प्रदर्शन

  • बेहतर प्रदर्शन में जीसीसी परिणाम जैसे कंपाइलर को संकलित करेगा? और दूसरा भाग:
  • क्या मेरे अपने संकलित संकलक द्वारा संकलित कोड बेहतर प्रदर्शन करेगा?

को (हाँ, मुझे पता है, मैं अपने संकलक और यह बेंचमार्क ... संकलन कर सकते हैं लेकिन शायद ... किसी को पहले से ही जवाब जानता है, और हमें के साथ साझा करेगा =)

+0

_ चश्मा! वे कुछ नहीं कर _;!) – Izkata

+0

हाँ, मैं उनसे पूछा, लेकिन वे चढ़ाई दीवार :-P – Oz123

+5

यो dawg पर व्यस्त, मैंने सुना है आप compilers पसंद है। – joshin4colours

उत्तर

14

जवाब में अपने पहला सवाल, लगभग निश्चित रूप से हाँ। gcc का बाइनरी संस्करण "सबसे कम आम संप्रदाय" होगा, और यदि आप उन्हें अपने सिस्टम के लिए उपयुक्त विशेष झंडे के साथ संकलित करते हैं, तो यह अधिक तेज़ होगा।

आपके दूसरे प्रश्न के रूप में, नहीं।

संकलन के आउटपुट इस पर ध्यान दिए बिना कि आपने इसे कैसे अनुकूलित किया है (जब तक कि यह बग़ी नहीं है)।

दूसरे शब्दों में, भले ही आप पूरी तरह से अपने संकलक झंडे अप भरवां जब gcc संकलन बिंदु है जहां gcc के अपने विशेष संकलित संस्करण एक सप्ताह और एक आधा संकलित करने के लिए "नमस्ते दुनिया" लेता है, वास्तविक "नमस्ते दुनिया" के लिए, निष्पादन योग्य "सबसे कम आम denominator" gcc (यदि आप एक ही झंडे का उपयोग करते हैं) द्वारा उत्पादित एक के समान होना चाहिए।

+4

दूसरे भाग के बारे में: यह और भी आम के लिए एक संकलक की बूटस्ट्रैपिंग 3 चरणों में किया जाता है: 1.) मौजूदा (संभवतः कम से कम, गैर अनुकूलन) संकलक का उपयोग कर संकलक संकलन, 2.) संकलक द्विआधारी उत्पादन का उपयोग कर संकलन चरण # 1 में। (यानी इसे स्वयं से संकलित करें) और 3.) चरण # 2 में उत्पादित संकलक के साथ संकलक संकलित करें। चरणों # 2 और # 3 में उत्पादित द्विआधारी पूरी तरह से समान होनी चाहिए (कुछ एम्बेडेड टाइमस्टैम्प या इसी तरह की चीजों को छोड़कर) और वास्तव में यह तथ्य यह जांचने के लिए प्रयोग किया जाता है कि संकलक स्वयं को सही तरीके से संकलित करता है या नहीं। –

+0

वाह, सभी उत्तरों के लिए धन्यवाद दोस्तों। मैंने सोचा कि मुझे ऐसे "ट्रिविअल" प्रश्न के लिए तैयार किया जाएगा। लेकिन इसके विपरीत ... बोल्ड लाइन के लिए – Oz123

3

a.ठीक है, आप संकलक को अपने सिस्टम में संकलित कर सकते हैं, और शायद यह तेज़ी से चल जाएगा। किसी भी कार्यक्रम की तरह। (मुझे लगता है कि सामान्य रूप से यह इसके लायक नहीं है, लेकिन जो भी आप चाहते हैं)।

बी। नहीं। भले ही आप अपने कंप्यूटर में कंपाइलर संकलित करते हैं, फिर भी इसका व्यवहार नहीं बदला जाना चाहिए, और इसलिए जो कोड उत्पन्न होता है वह भी नहीं बदलता है।

5

(1) यह संभव है। यदि आप अपने कंपाइलर को नया ऑप्टिमाइज़ेशन पेश करते हैं, और इस अनुकूलन के साथ इसे फिर से संकलित करें - यह संभव है कि पुन: संकलित कोड बेहतर प्रदर्शन करेगा।

(2) नहीं !!!! एक कंपाइलर कोड के तर्क को बदल नहीं सकता है! आपके मामले में, कोड का तर्क अंत में उत्पादित मूल कोड है। इसलिए, यदि कंपाइलर ए_1 संकलक ए_2 या बी का उपयोग करके संकलित किया गया है, तो ए_1 द्वारा उत्पादित देशी कोड पर कोई प्रभाव नहीं पड़ता है [यहां ए_1, ए 2 एक ही कंपाइलर हैं, इंडेक्स केवल स्पष्टता के लिए है]।

+3

+1। वास्तव में एक कंपाइलर संकलन का मतलब यह नहीं है कि आपने अपनी खुद की अनुकूलन तकनीकों को जोड़ा है जो तेज़ है। –

+1

@Shiplu: निश्चित रूप से मानता है कि आप नियमों का पालन किया है और फिर कुछ भी अपरिभाषित व्यवहार :-) तरह मूर्ख नहीं किया है, एक संकलक कि के लिए अलग कोड भले ही _nothing_ बदल गया है फेंकना करने के लिए स्वतंत्र है। बोल्ड लाइन के लिए – paxdiablo

+0

-1। ओज़ 123 ने बहुत कठोर तरीके से फैसला नहीं करने के लिए कहा लेकिन आपने स्पष्ट रूप से सवाल नहीं पढ़ा। – Codo

2

बेहतर प्रदर्शन में जीसीसी परिणाम जैसे कंपाइलर को संकलित करेगा?

यह आम तौर पर एक सामान्य मंच के लिए संकलित एक कार्यक्रम की तुलना में बेहतर प्रदर्शन करेंगे पर प्रयोग किया जाता है लक्ष्य मंच के लिए विशेष रूप से संकलित एक कार्यक्रम। ऐसा क्यों है? हैरवेयर के बारे में ज्ञान संकलक को डेटा को कैश अनुकूल बनाने में मदद कर सकता है और एक निर्देश ऑर्डरिंग चुन सकता है जो सीपीयू पाइपलाइनिंग के साथ अच्छी तरह से खेलता है।

एसएसई (इसके विभिन्न संस्करणों में) जैसे विशिष्ट निर्देश सेटों का लाभ उठाकर सबसे अधिक लाभ प्राप्त किया जाता है।

दूसरी ओर, आप अपने आप से पूछना अगर जीसीसी की तरह एक programm वास्तव में सीपीयू बाध्य (बहुत अधिक संभावना यह आईओ बाध्य होंगे) और उसके सीपीयू प्रदर्शन ट्यूनिंग किसी भी औसत दर्जे का लाभ प्रदान करता है है चाहिए।

कोड अपने ही संकलित संकलक द्वारा संकलित में बेहतर प्रदर्शन करेगा

उम्मीद है कि नहीं

! किसी प्रोग्राम को अनुकूलित करने के लिए एक कंपाइलर को अनुमति देना कभी भी अपना व्यवहार नहीं बदलना चाहिए। कोई फर्क नहीं पड़ता कि आपने अपना जीसीसी कैसे संकलित किया है, इसे जीसीसी के सामान्य बाइनरी वितरण के रूप में उसी बाइनरी में कोड संकलित करना चाहिए।

यदि विशिष्ट प्लेटफ़ॉर्म के लिए संकलित कोड कोड सामान्य संकल्प के लिए कोड संकलन से तेज़ है, तो हम सभी बाइनरी के बजाय कोड क्यों नहीं भेजते? मान लीजिए, कुछ लिनक्स distros वास्तव में Gento जैसे इस फिलॉसफी का पालन करें। और जब आप इसमें हों, तो स्थिर रूप से जुड़े बाइनरी बनाने के लिए सुनिश्चित करें, डिस्क स्थान आजकल इतना सस्ता है और यह आपको कम से कम 0.001% प्रदर्शन देता है।

ठीक है, यह थोड़ा सा व्यंग्यात्मक था। जेनेरिक बाइनरी वितरित करने का कारण बहुत स्पष्ट है: यह जीनेरक है, सबसे कम आम denominator और यह हर जगह काम करेगा। लचीलापन और उपयोगकर्ता के अनुकूलता के मामले में एक बड़ा बोनस है। मुझे याद है कि मेरे जेनेटू बॉक्स के लिए जीनोम संकलित करने के बाद, इसमें एक या दो दिन लग गए! (लेकिन यह बहुत तेज होना चाहिए ;-))

दूसरी तरफ, ऐसे मौके हैं जहां आप सबसे अच्छा प्रदर्शन संभव करना चाहते हैं और विशिष्ट संग्रहों के निर्माण और अनुकूलन के लिए यह समझ में आता है।

0

जीसीसी स्रोत से निर्माण करते समय तीन चरण बूटस्ट्रिपिंग का उपयोग करता है। असल में यह सुनिश्चित करने के लिए तीन बार स्रोत संकलित करता है कि निर्माण उपकरण और कंपाइलर सफलतापूर्वक निर्माण कर रहा है। यह बूटस्ट्रिपिंग सत्यापन उद्देश्य के लिए प्रयोग किया जाता है। हालांकि बाद के चरणों को अनुकूलित करने के लिए चरण 1 का उपयोग बेंचमार्क के रूप में करना संभव है। इस प्रोफ़ाइल आधारित अनुकूलन का उपयोग करने के लिए आपको make profiledbootstrap के साथ जीसीसी बनाना चाहिए।

यह प्रोफ़ाइल आधारित निर्माण प्रक्रिया "जीसीसी" के प्रदर्शन को बढ़ाती है, लेकिन इसके साथ संकलित सॉफ़्टवेयर नहीं, जैसा कि अन्य उत्तरों बताते हैं।

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