शून्य-ओवरहेड लूपिंग

ज़ीरो-ओवरहेड लूपिंग कुछ प्रोसेसर (कंप्यूटिंग) निर्देश समुच्चय की एक विशेषता है, जिसका हार्डवेयर लूप (कंप्यूटिंग) के निकाय को स्वचालित रूप से दोहरा सकता है इसके अतिरिक्त ऐसा करने के लिए निर्देश चक्र (और इसलिए समय) लेने वाले सॉफ़्टवेयर निर्देशों की आवश्यकता होती है। डिजिटल सिग्नल प्रोसेसर और कुछ जटिल निर्देश समूह कंप्यूटर निर्देश समूह में शून्य-ओवरहेड लूप समान्य हैं।

पृष्ठभूमि
कई निर्देश समूहों में एक काउंटर को बढ़ाने या घटाने के निर्देशों का उपयोग करके लूप को कार्यान्वित किया जाना चाहिए जांचें कि क्या लूप का अंत हो गया है, और यदि लूप की प्रारंभ में पहुँच नहीं है तो इसे दोहराया जा सकता है। चूँकि यह सामान्यतः प्रत्येक लूप के लिए लगभग 3–16 बाइट्स स्पेस का प्रतिनिधित्व करता है, यहां तक ​​कि सीपीयू कैश के आकार के आधार पर वह छोटी राशि भी महत्वपूर्ण हो सकती है। अधिक महत्वपूर्ण यह है कि उन निर्देशों में से प्रत्येक को निष्पादित करने में समय लगता है, समय जो उपयोगी कार्य करने में व्यतीत नहीं होता है।

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

उदाहरण के लिए, निम्नलिखित सी कोड को निम्नलिखित x86 असेंबली कोड में संकलित और अनुकूलित किया जा सकता है:

कार्यान्वयन
शून्य-ओवरहेड लूपिंग वाले प्रोसेसर में मशीन निर्देश होते हैं और एक या अधिक निर्देशों को स्वचालित रूप से दोहराने के लिए रजिस्टर होते हैं। उपलब्ध निर्देशों के आधार पर ये केवल काउंट-नियंत्रित लूप (लूप के लिए) के लिए उपयुक्त हो सकते हैं जिसमें पुनरावृत्तियों की संख्या की अग्रिम गणना की जा सकती है, या केवल स्थिति-नियंत्रित लूप (जबकि लूप) के लिए उपयुक्त हो सकता है, जैसे अशक्त-समाप्त स्ट्रिंग संचालन तार है ।

छवि
पीआईसी निर्देश सूची में, REPEAT और DO निर्देश शून्य-ओवरहेड लूप प्रयुक्त करते हैं। REPEAT केवल एक ही निर्देश दोहराता है, जबकि DO निम्नलिखित निर्देशों की निर्दिष्ट संख्या को दोहराता है।

ब्लैकफिन
ब्लैकफिन दो शून्य-ओवरहेड लूप प्रदान करता है। छोरों को नेस्टेड किया जा सकता है; यदि दोनों हार्डवेयर लूप एक ही लूप और एड्रेस से कॉन्फ़िगर किए गए हैं, तो लूप 1 आंतरिक लूप के रूप में व्यवहार करेगा और दोहराएगा, और लूप 0 बाहरी लूप के रूप में व्यवहार करेगा और केवल तभी दोहराएगा जब 1 लूप नहीं दोहराएगा।

लूप्स का उपयोग करके नियंत्रित किया जाता है LTx और LBx रजिस्टर (x या तो 0 से 1) लूप के ऊपर और नीचे समूह करने के लिए - जिससे, निष्पादित करने के लिए पहला और आखिरी निर्देश जो केवल एक निर्देश के साथ लूप के लिए समान हो सकता है - और LCx लूप काउंट के लिए लूप दोहराता है यदि LCx लूप के अंत में शून्य नहीं है, इस स्थिति में LCx घट गया है।

लूप रजिस्टरों को मैन्युअल रूप से समूह किया जा सकता है, किंतु यह सामान्यतः रजिस्टरों को लोड करने के लिए 6 बाइट्स और लोड किए जाने वाले मानों को समूह करने के लिए 8-16 बाइट्स का उपभोग करेगा। लूप सेटअप निर्देश का उपयोग करना अधिक सामान्य है (असेंबली में या तो प्रतिनिधित्व किया गया है LOOP छद्म निर्देश के साथ LOOP_BEGIN और LOOP_END, या एक पंक्ति में LSETUP), जो वैकल्पिक रूप से प्रारंभ होता है LCx और समूह LTx और LBx वांछित मानो के लिए इसके लिए केवल 4-6 बाइट्स की आवश्यकता होती है, किंतु लूप सेटअप निर्देश स्थित होने के सापेक्ष केवल एक सीमित सीमा के अंदर LTx और LBx समूह कर सकते हैं

=x86= X86 असेंबली भाषा REP उपसर्ग कुछ निर्देशों के लिए शून्य-ओवरहेड लूप प्रयुक्त करते हैं (अर्थात् MOVS/STOS/CMPS/LODS/SCAS). उपसर्ग और निर्देश के आधार पर, निर्देश को कई बार दोहराया जाएगा (E)CX रिपीट काउंट रोकना या जब तक कोई मैच (या नॉन-मैच) नहीं मिल जाता AL/AX/EAX या साथ DS:[(E)SI]. इसका उपयोग नल-टर्मिनेटेड स्ट्रिंग्स पर कुछ प्रकार की खोजों और संचालन को प्रयुक्त करने के लिए किया जा सकता है।