Code motion
कंप्यूटर विज्ञान में, कोड गति, जिसे कोड फहराना, कोड सिंकिंग, लूप-इनवेरिएंट कोड गति, या कोड फैक्टरिंग के रूप में भी जाना जाता है, किसी भी प्रक्रिया के लिए एक व्यापक शब्द है जो प्रदर्शन या आकार लाभ के लिए एक प्रोग्राम के भीतर कोड को स्थानांतरित करता है, और अधिकांश अनुकूलन संकलकों में किया जाने वाला एक सामान्य अनुकूलन है। इसके आसपास के शब्दों के असंगत अर्थ के कारण विभिन्न प्रकार के कोड गति के बीच अंतर करना मुश्किल हो सकता है। उपयोग कोड गति के विभिन्न प्रकार के उपयोग और लाभ हैं, जिनमें से कई अपने कार्यान्वयन में एक दूसरे को ओवरलैप करते हैं। अप्रयुक्त/बेकार संचालन को हटाना कोड सिंकिंग, जिसे आलसी कोड गति के रूप में भी जाना जाता है, एक ऐसी तकनीक के लिए एक शब्द है जो उन शाखाओं में निर्देशों को स्थानांतरित करके बर्बाद निर्देशों को कम करता है जिनमें उनका उपयोग किया जाता हैः यदि एक शाखा से पहले एक ऑपरेशन निष्पादित किया जाता है, और केवल एक शाखा पथ उस ऑपरेशन के परिणाम का उपयोग करता है, तो कोड सिंकिंग में उस ऑपरेशन को उस शाखा में स्थानांतरित करना शामिल है जहां इसका उपयोग किया जाएगा। यह तकनीक इस अर्थ में डेड कोड उन्मूलन का एक रूप है कि यह कोड को हटा देता है जब इसके परिणाम त्याग दिए जाते हैं या अप्रयुक्त होते हैं, लेकिन डेड कोड उन्मूलन के विपरीत, यह व्यर्थ निर्देशों को हटा सकता है, भले ही उस निर्देश के परिणामों का एक निष्पादन कोड पथ में संभावित उपयोग हो। कोड फैक्टरिंग कार्यक्रम के आकार को कम करना एक आकार-अनुकूलन तकनीक के लिए एक शब्द है जो शाखाओं में सामान्य निर्भरताओं को इसके ऊपर की शाखा में मिला देता है। जिस तरह पूर्णांक का गुणनखंडन एक संख्या को उसके सबसे छोटे संभव रूपों (कारकों के रूप में) में विघटित करता है, उसी तरह कोड गुणनखंडन सामान्य "कारकों" को तब तक विलय करके कोड को सबसे छोटे संभव रूप में बदल देता है जब तक कि कोई डुप्लिकेट न रह जाए। निर्भरता स्टालों को कम करना वैश्विक कोड गति, स्थानीय कोड गति, कोड शेड्यूलिंग, निर्देश शेड्यूलिंग और कोड फहराना/डूबना सभी एक तकनीक के लिए शब्द हैं जहां सीपीयू के भीतर निष्पादन की दक्षता में सुधार के लिए निर्देशों को पुनर्व्यवस्थित (या "अनुसूचित") किया जाता है। आधुनिक सीपीयू प्रति घड़ी चक्र में पाँच या अधिक निर्देशों को निर्धारित करने में सक्षम हैं। हालांकि, एक सीपीयू एक निर्देश को निर्धारित नहीं कर सकता है जो वर्तमान में (या अभी तक निष्पादित नहीं) निर्देश से डेटा पर निर्भर करता है। संकलक निर्भरताओं को इस तरह से आपस में जोड़ेंगे जो किसी भी समय सीपीयू द्वारा संसाधित किए जा सकने वाले निर्देशों की मात्रा को अधिकतम करता है। निष्क्रिय इंटेल आइटेनीयम वास्तुकला पर, शाखा भविष्यवाणी (बी. आर. पी.) निर्देश को संकलक द्वारा शाखाओं के ऊपर हाथ से फहराया जाता है ताकि शाखा को सी. पी. यू. द्वारा तुरंत लिया जा सके। आइटेनीयम प्रोसेसर में दक्षता को अधिकतम करने के लिए सीपीयू से अतिरिक्त कोड शेड्यूलिंग पर निर्भर करता है। लूप-इनवेरिएंट कोड मोशन लूप-इनवेरिएंट कोड मोशन लूप-इनवेरिएंट कोड को लूप के बाहर एक स्थिति में ले जाने की प्रक्रिया है, जो एक ही परिणाम के लिए कुछ गणनाओं को दो बार करने से रोककर लूप के निष्पादन समय को कम कर सकता है। संकलक उदाहरण एल. एल. वी. एम. एल. एल. वी. एम. में अपने एकल स्थिर असाइनमेंट रूप में एक सिंकिंग पास होता है। एल. एल. वी. एम. 15................................................................. इसके अतिरिक्त, एल. एल. वी. एम. किसी निर्देश को लूप में नहीं डुबोएगा। जी. सी. सी. जी. एन. यू. संकलक संग्रह एक संकलित कार्यक्रम के आकार को कम करने के उद्देश्य से "कोड फैक्टरिंग" नाम के तहत कोड गति को लागू करता है। जी. सी. सी. किसी भी कोड को ऊपर या नीचे की ओर ले जाएगा यदि यह "किसी भी मौजूदा निर्भरता को अमान्य नहीं करता है और न ही नए को पेश करता है।" लुएजीआईटी "एलोकेशन सिंकिंग" नाम के तहत कोड सिंकिंग का उपयोग करता है, ताकि एक लूप के भीतर अस्थायी वस्तुओं को आवंटित करने और एकत्र करने में संकलित कोड के समय की मात्रा को कम किया जा सके। आवंटन डूबना आवंटन को निष्पादन पथ पर ले जाता है जहां आवंटित वस्तु निष्पादन कोड से बच सकती है, और इस प्रकार ढेर आवंटन की आवश्यकता होगी। हटाए गए सभी आवंटन को उनके खेतों में लोड-टू-स्टोर फॉरवर्डिंग से भरा जाता है। लूप-इनवेरिएंट कोड मोशन इंस्ट्रक्शन शेड्यूलिंग डिपेंडेंसी ग्राफ संदर्भ संकलन अनुकूलन भी देखें।