स्थानीय अनुकूलन व आँकड़ा-प्रवाह विश्लेषण
विश्लेषण किस दिशा में चलता है?
| विश्लेषण | दिशा | वह क्या अनुमत करता है |
|---|---|---|
| जीवंतता | पश्चगामी — निर्गम से | रजिस्टर आवंटन, तथा मृत-कोड उन्मूलन |
| उपलब्ध व्यंजक | अग्रगामी — प्रवेश से | सामान्य उप-व्यंजक उन्मूलन |
| अचर प्रसार | अग्रगामी | चर को शब्दशः मान से बदलना; अचर संवलन |
| पहुँचती परिभाषाएँ | अग्रगामी | प्रतिलिपि प्रसार, तथा use–def शृंखलाएँ |
एक जीवंतता गणना, चलाई गई
खंड a = b + c, d = a * 2, b = d + 1, e = a + b लें, और मानें कि निर्गम पर b व e जीवित हैं। ऊपर की ओर चलें, और प्रत्येक कथन पर परिभाषित होते चर को हटाएँ तथा प्रयुक्त होते चर जोड़ें:
| कथन | जीवित OUT | जीवित IN |
|---|---|---|
e = a + b | { b, e } | { a, b } |
b = d + 1 | { a, b } | { a, d } |
d = a * 2 | { a, d } | { a } |
a = b + c | { a } | { b, c } |
d केवल कथन 2 व 3 के बीच जीवित है — अत्यंत छोटा परिसर, और ठीक वही उसे स्मृति के बजाय रजिस्टर में रखने योग्य अच्छा अभ्यर्थी बनाता है। किसी चर का जीवित-परिसर, उसका विस्तार नहीं, यह तय करता है कि उसे संचयन चाहिए या नहीं।d कथन 3 पर पढ़ा जाता है और a कथन 2 व 4 पर। परंतु अंत में d = 7 जोड़ें और वह मृत हो जाता है, क्योंकि d खंड के जीवित-OUT समुच्चय में नहीं — जो केवल जीवंतता गणना से ज्ञात हो सकता है, और इसीलिए विश्लेषण अनुकूलन से पूर्व आता है, पश्चात् नहीं।स्थानीय, वैश्विक, तथा चक्र पुनरावृत्ति क्यों बाध्य करते हैं
स्थानीय अनुकूलन एक मूल खंड के भीतर रहता है। मूल खंड में सिरों के अतिरिक्त कोई शाखा भीतर या बाहर नहीं जाती, अतः नियंत्रण-प्रवाह सीधी रेखा है और विश्लेषण एक ही चाल — इसीलिए खंड के भीतर सामान्य उप-व्यंजक उन्मूलन सस्ता है और उसे पुनरावृत्ति नहीं चाहिए। वैश्विक अनुकूलन नियंत्रण-प्रवाह ग्राफ पर काम करता है, और वहाँ चक्र का अर्थ है कि किसी खंड का निवेश-समुच्चय उसके अपने निर्गम-समुच्चय पर निर्भर है। उस वर्तुलता से निकलने का एकमात्र मार्ग नियत-बिंदु पुनरावृत्ति है: आरंभीकरण करें, बारंबार प्रसारित करें, और जब कुछ न बदले तब रुकें।
मुख्य बिंदु
- प्रत्येक अनुकूलन आँकड़ा-प्रवाह विश्लेषण से निकाला तथ्य तथा उससे अनुमत पुनर्लेखन है।
- जीवंतता पश्चगामी है; उपलब्ध व्यंजक व अचर प्रसार अग्रगामी।
- परिभाषा का काल पढ़ें: "प्रयुक्त होगा" पश्चगामी है, "निकाला गया है" अग्रगामी।
- live-out {b,e} सहित a = b+c; d = a*2; b = d+1; e = a+b पर खंड का live-in {b, c} है।
- कोई निर्दिष्टीकरण मृत है जब उसका लक्ष्य तुरंत पश्चात् जीवित न हो — सभी बाद के पथों के विषय में तथ्य।
- किसी चर का जीवित-परिसर, उसका विस्तार नहीं, तय करता है कि उसे संचयन चाहिए या नहीं।
- स्थानीय अनुकूलन मूल खंड में एक चाल है; वैश्विक को चक्रों के कारण नियत-बिंदु पुनरावृत्ति चाहिए।
- may-विश्लेषण सम्मिलन से मिलता है व रिक्त आरंभ होता है; must-विश्लेषण सर्वनिष्ठ से व पूर्ण आरंभ होता है।
अभ्यास प्रश्न (8)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
निर्गम पर b व e जीवित सहित खंड a = b + c; d = a * 2; b = d + 1; e = a + b हेतु, खंड के आरंभ पर जीवित चरों का समुच्चय है:
उत्तर देखें
उत्तर: B — { b, c }
{ b, c }। ऊपर की ओर चलें, प्रत्येक परिभाषित चर हटाते व प्रत्येक प्रयुक्त जोड़ते हुए। live-out { b, e } से: कथन 4 देता है { a, b }; कथन 3 देता है { a, d }; कथन 2 देता है { a }; कथन 1, a परिभाषित करता है व b तथा c प्रयोग करता है, जिससे { b, c }। वह समुच्चय सम्पूर्ण गणना का उपयोगी उत्पाद है — वह कहता है कि खंड को अपने पूर्ववर्तियों से ठीक b व c चाहिए, और वह a, d व e भीतर उत्पन्न करता है। विकल्प A गलत रूप सेaको शीर्ष पर जीवित रखता है, पर कथन 1, a को परिभाषित करता है, अतः इस खंड से पूर्व a में जीवित कुछ भी अप्रासंगिक है। विकल्प C, live-out समुच्चय को live-in के रूप में देता है, जो सर्वाधिक सामान्य चूक है जब विश्लेषण की दिशा पहले स्थिर न की जाए।जीवंतता विश्लेषण पश्चगामी विश्लेषण है क्योंकि:
उत्तर देखें
उत्तर: B — किसी बिंदु पर जीवंतता उस बिंदु के पश्चात् जो होता है उस पर निर्भर है
कोई चर किसी बिंदु पर जीवित है यदि वहाँ से आगे कोई पथ उसका वर्तमान मान अधिलिखित करने से पूर्व पढ़े — भविष्य के विषय में कथन — अतः प्रत्येक बिंदु पर उत्तर हेतु उसके उत्तरवर्तियों के उत्तर चाहिए, और गणना निर्गम से आरंभ होनी चाहिए। विकल्प C विशिष्टताओं में गलत है और सुधारने योग्य: जीवंतता may विश्लेषण है (जीवित यदि कोई पथ उसे प्रयोग करे), अतः उसका मिलन सम्मिलन है, और सर्वनिष्ठ से मिलने वाले उपलब्ध व्यंजक हैं। विकल्प A संकलक के चरण-क्रम को विश्लेषण की दिशा से भ्रमित करता है; बहुत से अग्रगामी विश्लेषण भी पार्सिंग के पश्चात् चलते हैं। विश्वसनीय कसौटी परिभाषा का काल है — "प्रयुक्त होगा" पश्चगामी है, "निकाला गया है" अग्रगामी।सामान्य उप-व्यंजक उन्मूलन किस विश्लेषण से न्यायोचित है?
उत्तर देखें
उत्तर: B — उपलब्ध व्यंजक
उपलब्ध व्यंजक।b * cकी पुनर्गणना को पूर्व-निकाले मान से बदलने हेतु आपको जानना होगा किb * cइस बिंदु तक पहुँचते प्रत्येक पथ पर मूल्यांकित हुआ है और तब से न b न c को निर्दिष्ट किया गया — और उपलब्धता ठीक वही दावा करती है। जीवंतता भिन्न प्रश्न का उत्तर देती है, कि मान अभी चाहिए होगा या नहीं, और इसके बजाय मृत-कोड उन्मूलन तथा रजिस्टर आवंटन अनुमत करती है। परिभाषा में "प्रत्येक पथ" ही उपलब्धता को must विश्लेषण बनाता है, अतः उसका मिलन सर्वनिष्ठ है और उसके समुच्चय रिक्त के बजाय पूर्ण आरंभीकृत होते हैं — वह विवरण जो तय करता है कि नियत-बिंदु पुनरावृत्ति सही उत्तर देती है या तुरंत कुछ नहीं पर अभिसरित हो जाती है।निम्नलिखित में कौन अग्रगामी आँकड़ा-प्रवाह विश्लेषण हैं? (एक से अधिक सही हो सकते हैं।)
उत्तर देखें
उत्तर: A — उपलब्ध व्यंजक; B — पहुँचती परिभाषाएँ; C — अचर प्रसार
A, B व C। तीनों भूत के विषय में पूछते हैं — यह व्यंजक पहले ही निकाला गया है क्या, कौन-सी परिभाषाएँ पहले ही यहाँ पहुँच चुकी हैं, कौन-सा मान पहले ही स्थापित हो चुका है — अतः सूचना प्रवेश से निर्गम की ओर बहती है। D पश्चगामी है: जीवंतता पूछती है कि मान बाद में प्रयुक्त होगा या नहीं, अतः वह निर्गम से पीछे बहती है। दूसरा अक्ष स्वतंत्र है और पृथक् रखने योग्य: उपलब्ध व्यंजक must विश्लेषण है (सर्वनिष्ठ, पूर्ण आरंभीकरण) जबकि पहुँचती परिभाषाएँ may विश्लेषण (सम्मिलन, रिक्त आरंभीकरण), चाहे दोनों अग्रगामी हों। दिशा व मिलन संकारक दो पृथक् चुनाव हैं, और प्रश्न किसी को भी जाँच सकता है।निर्दिष्टीकरण x = e मृत कोड है जब:
उत्तर देखें
उत्तर: B — निर्दिष्टीकरण के तुरंत पश्चात् x जीवित न हो
तुरंत पश्चात् x जीवित न हो। वही परिभाषा है, और वह उस बिंदु से सभी अग्रगामी पथों के विषय में कथन है, आसपास के पाठ के विषय में नहीं — और ठीक इसीलिए विकल्प C तुल्य नहीं। x बाद में पुनः आ सकता है और निर्दिष्टीकरण फिर भी मृत हो, यदि उस बाद के प्रयोग तक प्रत्येक पथ पहले x को किसी अन्य निर्दिष्टीकरण से गुजरे; और विलोमतः किसी विरल शाखा पर एक प्रयोग x को जीवित रखता है। विकल्प A कथन को वस्तुतः हटाने हेतु आवश्यक पार्श्व शर्त है, मृतता की कसौटी नहीं: यदि e पार्श्व-प्रभाव वाले फलन को बुलाए, तो मान मृत है पर कथन सरलतः हटाया नहीं जा सकता। "मान अप्रयुक्त है" को "कथन हटाने योग्य है" से पृथक् करना यहाँ व्यावहारिक विषय-वस्तु है।वैश्विक आँकड़ा-प्रवाह विश्लेषण को पुनरावृत्तीय नियत-बिंदु गणना चाहिए, जबकि मूल खंड के भीतर विश्लेषण को नहीं, क्योंकि:
उत्तर देखें
उत्तर: B — चक्र किसी खंड के निवेश को उसके अपने निर्गम पर निर्भर बना देता है
मूल खंड सीधी-रेखा कोड है, अतः सही दिशा में एक चाल प्रत्येक तथ्य ठीक एक बार निकाल देती है। चक्र वाला नियंत्रण-प्रवाह ग्राफ वर्तुल है: चक्र-निकाय में प्रवेश करते तथ्य उससे निकलते तथ्यों पर निर्भर हैं, जो बदले में प्रवेश करते तथ्यों पर। निकलने का एकमात्र मार्ग नियत-बिंदु तक पुनरावृत्ति है — और वह समाप्त होती है क्योंकि समुच्चय परिमित विश्व के उपसमुच्चय हैं और प्रत्येक चरण एकदिष्ट रूप से एक दिशा में चलता है। विकल्प A सत्य व अप्रासंगिक है: पुनरावृत्ति लंबाई नहीं, वर्तुलता बाध्य करती है, और अत्यंत लंबे सीधी-रेखा खंड को भी केवल एक पास चाहिए। उस एकदिष्ट गति की दिशा ही आरंभीकरण तय करती है — may विश्लेषण हेतु रिक्त, must हेतु पूर्ण।उपलब्ध-व्यंजक विश्लेषण आंतरिक समुच्चयों को रिक्त समुच्चय के बजाय व्यंजकों के पूर्ण समुच्चय पर आरंभीकृत करता है क्योंकि:
उत्तर देखें
उत्तर: B — वह must विश्लेषण है जिसका मिलन सर्वनिष्ठ है
उपलब्धता को व्यंजक का किसी बिंदु तक पहुँचते प्रत्येक पथ पर निकाला होना चाहिए, अतः समुच्चय सर्वनिष्ठ से संयोजित होते हैं और पुनरावृत्ति बढ़ने पर केवल घट सकते हैं। उन्हें रिक्त आरंभ करना प्रत्येक सर्वनिष्ठ को रिक्त बना देता, पुनरावृत्ति तुरंत रुक जाती, और विश्लेषण बताता कि कुछ कभी उपलब्ध नहीं — एक नियत-बिंदु, शीघ्र पहुँचा, और गलत। पूर्ण आरंभ करना सर्वनिष्ठों को केवल वही काटने देता है जो वस्तुतः अनुपलब्ध है। विकल्प A गलत अक्ष का सही गुण नामित करता है: दिशा व मिलन संकारक स्वतंत्र चुनाव हैं, और पहुँचती परिभाषाएँ अग्रगामी हैं जबकि सम्मिलन से मिलती व रिक्त आरंभीकृत होती हैं। "प्रत्येक पथ" बनाम "कोई पथ" हेतु परिभाषा पढ़ना ही आरंभीकरण तय करता है।निर्गम पर b व e जीवित सहित खंड a = b + c; d = a * 2; b = d + 1; e = a + b में d किस परिसर पर जीवित है?
उत्तर देखें
उत्तर: B — केवल कथन 2 व 3 के बीच
केवल कथन 2 व 3 के बीच। d, कथन 2 पर परिभाषित होता है और कथन 3 पर पढ़ा जाता है, और वह किसी बाद के कथन में तथा live-out समुच्चय में नहीं आता — अतः उसका जीवित-परिसर वही एक अंतराल है। विकल्प C स्वाभाविक त्रुटि है, यह मानने से कि चर अपने विस्तार के अंत तक जीवित रहता है; जीवित-परिसर व विस्तार भिन्न चीज़ें हैं, और विश्लेषण का सम्पूर्ण मूल्य यह है कि वह पहला निकालता है। व्यावहारिक परिणाम यह है कि d को रजिस्टर में रखने योग्य उत्कृष्ट अभ्यर्थी है, क्योंकि उसका परिसर अधिक अतिव्यापित नहीं: दो चर एक रजिस्टर ठीक तब साझा कर सकते हैं जब उनके जीवित-परिसर असंयुक्त हों, और इसीलिए रजिस्टर आवंटन इन परिसरों के व्यवधान पर ग्राफ-रंगन समस्या है।