2009-11-04 12 views
7

विभिन्न कार्यक्रमों के लिए जो प्रतिक्रिया अनुकूलन का उपयोग कर रहे के लिए किसी को भी देखा किसी भी वास्तविक दुनिया संख्या कि C/C++ compilers शाखा भविष्यवाणी का समर्थन करने के लिए प्रदान करते हैं, कैश पहले से लोड होने कार्यों आदि हैC/C++ संकलक प्रतिक्रिया अनुकूलन

मैं इसके लिए खोजा गया और आश्चर्यजनक रूप से लोकप्रिय दुभाषिया विकास समूहों ने भी प्रभाव की जांच नहीं की है। और रूबी, पायथन, पीएचपी इत्यादि में 10% या उससे अधिक का प्रदर्शन उपयोगी माना जाना चाहिए।

क्या वास्तव में कोई लाभ नहीं है या पूरे डेवलपर समुदाय का उपयोग करने के लिए आलसी है?

+1

मुझे विश्वास है कि आप जिस शब्द को खोज रहे हैं वह 'प्रोफ़ाइल निर्देशित अनुकूलन' है। मैं माप से पहले और बाद में प्रकाशित किसी भी प्रमुख परियोजनाओं के बारे में नहीं जानता, लेकिन मुझे पता है कि फ़ायरफ़ॉक्स अपने निर्माण प्रणाली में पीजीओ का समर्थन करता है। Https://developer.mozilla.org/en/Building_with_Profile-Guided_Optimization – int3

+0

अनौपचारिक रूप से, मैंने एम्बेडेड कोड अड्डों पर + 10% देखा है लेकिन कभी भी पीजीओ के औपचारिक अध्ययन नहीं देखा है। –

उत्तर

6

10% एक अच्छा बॉलपार्क आंकड़ा है। उस ने कहा, ...

आपको इस मार्ग पर जाने के लिए प्रदर्शन की वास्तव में परवाह करना होगा। जिस उत्पाद पर मैं काम करता हूं (डीबी 2) पीजीओ और अन्य आक्रामक और आक्रामक अनुकूलन का उपयोग करता है। लागतों में महत्वपूर्ण निर्माण समय (कुछ प्लेटफार्मों पर तीन गुना) और विकास और समर्थन दुःस्वप्न हैं।

जब कुछ गलत हो जाता है तो यह अनुकूलित कोड में गलती स्थान को स्रोत पर वापस करने के लिए गैर-तुच्छ हो सकता है। डेवलपर अक्सर उम्मीद नहीं है कि विभिन्न मॉड्यूल में कार्य मर्ज किए गए और inlined खत्म कर सकते हैं और इस "रोचक" प्रभाव हो सकता है।

पॉइंटर एलियासिंग के साथ समस्याएं, जो ट्रैक करने के लिए गंदे हैं, आमतौर पर ऑप्टिमाइज़ेशन के इन प्रकारों के साथ दिखाई देती हैं। आप गैर नियतात्मक बनाता होने के अतिरिक्त मजा (एक अलियासिंग समस्या सोमवार के निर्माण में दिखाई दे सके,, गुरुवार को जब तक फिर से गायब हो ...)।

आक्रामक अनुकूलन के इस प्रकार के तहत सही या गलत कंपाइलर व्यवहार के बीच की रेखा भी काफी धुंधली हो जाती है। यहां तक ​​कि घर में हमारे संकलक लोग होने के लक्जरी के साथ (शाब्दिक) अनुकूलन मुद्दों (या तो हमारे स्रोत या संकलक में) अभी भी समझते हैं और हल करने के लिए आसान नहीं हैं।

+1

यह। पीजीओ तेजी से पुनरावृत्ति का प्राणघातक दुश्मन है, और आप इसे परीक्षण के लिए छोड़ नहीं सकते हैं क्योंकि हर बार एक बार यह एक बग पेश करेगा। ऐसा नहीं है कि इसका कोई फायदा नहीं है, लेकिन अधिकांश अनुप्रयोगों के लिए विकास और समर्थन लागत की तुलना में परफ लाभ कमजोर हैं। –

+1

अच्छी तरह से डेविड डाल दिया। और यदि आप इन अनुकूलन को महीनों के लिए काम नहीं करने के लिए संकलक अद्यतन तैयार करने के लिए प्रमुख रिलीज सीमाओं का उपयोग करते हैं (शायद आपके GA तिथियों के ठीक बाद चीजें फिर से काम कर रही हैं;)। और अच्छी तरह से व्यवहार की गई स्थिर सेवा रिलीज के लिए तैयार रहें, अचानक अचानक दुर्व्यवहार करना शुरू हो जाता है। और, ... यह आम बात क्यों आम तौर पर पैसे कम हो जाती है। किसी उत्पाद में पीजीओ के उपयोग के लिए एक बड़ा कर्मचारी खर्च है। –

+2

ध्यान दें कि पीजीओ आमतौर पर _introduce_ bugs नहीं बल्कि _exposes_, _finds_ या _trips over_ bugs नहीं करता है। – MSalters

1

प्रोफाइलिंग के माध्यम से कंपाइलर दक्षता में सुधार करने के पारंपरिक तरीकों प्रदर्शन विश्लेषण उपकरण द्वारा किया जाता है। हालांकि, ऑप्टिमाइज़ेशन में टूल से डेटा का उपयोग कैसे किया जा सकता है, फिर भी आपके द्वारा उपयोग किए जाने वाले कंपाइलर पर निर्भर करता है। उदाहरण के लिए, जीसीसी विभिन्न डोमेन के लिए कंपाइलर्स बनाने के लिए एक ढांचा तैयार किया जा रहा है। ऐसे कंपाइलर ढांचे में प्रोफाइलिंग तंत्र प्रदान करना बेहद मुश्किल होगा।

हम कुछ अनुकूलन करने के लिए सांख्यिकीय डेटा पर भरोसा कर सकते हैं। उदाहरण के लिए, जीसीसी एक पाश unrolls अगर लूप काउंट एक निरंतर (7 कहते हैं) से कम है। यह स्थिरता को कैसे ठीक करता है विभिन्न लक्ष्य आर्किटेक्चर के लिए उत्पन्न कोड आकार के सांख्यिकीय परिणाम पर आधारित होगा।

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

हालांकि, इस संबंध में प्रयोग चल रहा है। बस POGO पर एक नज़र डालें।

3

unladen-swallow से (एक परियोजना CPython वी एम के अनुकूलन):

हमारे लिए, PyBench के ताबूत में अंतिम कील जब जीसीसी की प्रतिक्रिया निर्देशित अनुकूलन टूल के साथ प्रयोग किया गया था, हम एक सार्वभौमिक 15% का उत्पादन करने में सक्षम थे हमारे macrobenchmarks में प्रदर्शन वृद्धि; एक ही प्रशिक्षण वर्कलोड का उपयोग करके, पीईबेन्च को 10% धीमा मिला।

तो कुछ लोग कम से कम इसे देख रहे हैं। उस ने कहा, पीजीओ बिल्ड पर्यावरण पर कुछ बहुत ही जटिल आवश्यकताओं को स्थापित करता है जो लोगों के एक वितरित विषम समूह द्वारा निर्मित ओपन-सोर्स परियोजनाओं के लिए संतुष्ट करना मुश्किल है। भारी अनुकूलन भी Heisenbugs डीबग करना मुश्किल बनाता है। प्रदर्शन महत्वपूर्ण भागों के लिए संकलक स्पष्ट संकेत देने के लिए यह कम काम है।

यह कहा गया कि, मुझे रनटाइम प्रोफाइल निर्देशित अनुकूलन से महत्वपूर्ण प्रदर्शन बढ़ने की उम्मीद है। JIT'ing ऑप्टिमाइज़र को प्रोग्राम के निष्पादन में परिवर्तित डेटा के प्रोफाइल से निपटने की अनुमति देता है और कई अत्यंत रनटाइम डेटा विशिष्ट अनुकूलन करता है जो स्थिर संकलन के लिए कोड आकार को विस्फोट कर देगा। विशेष रूप से गतिशील भाषाओं को अच्छी तरह से प्रदर्शन करने के लिए अच्छा रनटाइम डेटा आधारित अनुकूलन की आवश्यकता होती है। गतिशील भाषा प्रदर्शन के साथ हाल ही में महत्वपूर्ण ध्यान दिया जा रहा है (जावास्क्रिप्ट वीएम, एमएस डीएलआर, जेएसआर -292, पीईपीई और इसी तरह) इस क्षेत्र में बहुत सारे काम किए जा रहे हैं।

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