रजिस्टर का नाम परिवर्तन

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

इस तकनीक का उपयोग क्रमिक निर्देश (कंप्यूटर विज्ञान) द्वारा रजिस्टरों के पुन: उपयोग से उत्पन्न होने वाली झूठी डेटा निर्भरता को खत्म करने के लिए किया जाता है, जिनके बीच कोई वास्तविक डेटा निर्भरता नहीं होती है। इन झूठी डेटा निर्भरताओं के उन्मूलन से निर्देश स्ट्रीम में अधिक निर्देश-स्तरीय समानता का पता चलता है, जिसका उपयोग बेहतर कंप्यूटर प्रदर्शन के लिए सुपरस्केलर और आउट-ऑफ-ऑर्डर निष्पादन जैसी विभिन्न और पूरक तकनीकों द्वारा किया जा सकता है।

समस्या दृष्टिकोण
एक रजिस्टर मशीन में, प्रोग्राम निर्देशों से बने होते हैं जो मूल्यों पर काम करते हैं। निर्देशों को इन मानों को एक दूसरे से अलग करने के लिए नाम देना चाहिए। एक विशिष्ट निर्देश कह सकता है: “जोड़ें।” $$x$$ और $$y$$ और परिणाम डालें $$z$$”। इस निर्देश में, $$x$$, $$y$$ और $$z$$ भंडारण स्थानों के नाम हैं.

एक कॉम्पैक्ट इंस्ट्रक्शन एन्कोडिंग के लिए, अधिकांश प्रोसेसर इंस्ट्रक्शन सेट में विशेष स्थानों का एक छोटा सा सेट होता है जिसे विशेष नामों से संदर्भित किया जा सकता है: रजिस्टर। उदाहरण के लिए, x86 इंस्ट्रक्शन सेट आर्किटेक्चर में 8 पूर्णांक रजिस्टर हैं, x86-64 में 16, कई अल्प निर्देश सेट कंप्यूटर  में 32 और IA-64 में 128 हैं। छोटे प्रोसेसर में, इन स्थानों के नाम सीधे फ़ाइल पंजीकृत करें के तत्वों से मेल खाते हैं।

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

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

कुछ रजिस्टरों के नाम बदलने से यह प्रतिबंध समाप्त हो जाता है: अब अंतिम तीन निर्देशों को पहले तीन के समानांतर निष्पादित किया जा सकता है। झूठी डेटा निर्भरता के कारण किसी भी रुकावट को दूर करके प्रोग्राम पहले की तुलना में तेजी से चलेगा।

कई उच्च-प्रदर्शन सीपीयू अतिरिक्त समानता प्राप्त करने के लिए हार्डवेयर में इस नामकरण को लागू करते हैं। उपयुक्त डेटा-प्रवाह पहचान के बिना लक्ष्य पर अच्छे कंपाइलर स्वतंत्र निर्देश अनुक्रमों का पता लगाएंगे और कोड जनरेशन (कंपाइलर) के दौरान अलग-अलग रजिस्टरों का चयन करेंगे।

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


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


 * लिखें-बाद-पढ़ें (युद्ध)
 * किसी रजिस्टर या मेमोरी स्थान से पढ़े गए को उस स्थान पर लिखा गया अंतिम पूर्व मान लौटाना चाहिए, न कि पढ़ने के बाद प्रोग्रामेटिक रूप से लिखा गया। यह एक प्रकार की झूठी निर्भरता है जिसे नाम बदलकर हल किया जा सकता है। WAR निर्भरता को विरोधी निर्भरता के रूप में भी जाना जाता है।

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

जो कुछ भी पढ़ा और लिखा गया है उसका नाम बदला जा सकता है। जबकि सामान्य प्रयोजन और फ़्लोटिंग-पॉइंट रजिस्टरों पर सबसे अधिक चर्चा की जाती है, फ़्लैग और स्टेटस रजिस्टर या यहां तक ​​कि व्यक्तिगत स्टेटस बिट्स का भी आमतौर पर नाम बदल दिया जाता है।

मेमोरी स्थानों का नाम भी बदला जा सकता है, हालाँकि यह आमतौर पर रजिस्टर नाम बदलने की प्रथा की सीमा तक नहीं किया जाता है। ट्रांसम्यूटेशनल क्रूसो प्रोसेसर का गेटेड स्टोर बफ़र मेमोरी नाम बदलने का एक रूप है।

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

कोड का आकार बढ़ाना महत्वपूर्ण है क्योंकि जब प्रोग्राम कोड बड़ा होता है, तो निर्देश कैश अधिक बार छूट जाता है और प्रोसेसर नए निर्देशों की प्रतीक्षा में रुक जाता है।

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

एक विशेष प्रोसेसर जो इस आईएसए को लागू करता है, अल्फा 21264 में 80 पूर्णांक और 72 फ्लोटिंग-पॉइंट भौतिक रजिस्टर हैं। अल्फा 21264 चिप पर, 80 भौतिक रूप से अलग-अलग स्थान हैं जो पूर्णांक संचालन के परिणामों को संग्रहीत कर सकते हैं, और 72 स्थान हैं जो फ़्लोटिंग पॉइंट संचालन के परिणामों को संग्रहीत कर सकते हैं (वास्तव में, उससे भी अधिक स्थान हैं, लेकिन वे अतिरिक्त स्थान रजिस्टर नाम बदलने की कार्रवाई के लिए उपयुक्त नहीं हैं।)

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

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

टैग-अनुक्रमित रजिस्टर फ़ाइल शैली में, डेटा मानों के लिए एक बड़ी रजिस्टर फ़ाइल होती है, जिसमें प्रत्येक टैग के लिए एक रजिस्टर होता है। उदाहरण के लिए, यदि मशीन में 80 भौतिक रजिस्टर हैं, तो यह 7 बिट टैग का उपयोग करेगी। इस मामले में संभावित टैग मानों में से 48 अप्रयुक्त हैं।

इस शैली में, जब एक निष्पादन इकाई को एक निर्देश जारी किया जाता है, तो स्रोत रजिस्टरों के टैग भौतिक रजिस्टर फ़ाइल में भेजे जाते हैं, जहां उन टैगों से संबंधित मान पढ़े जाते हैं और निष्पादन इकाई को भेजे जाते हैं।

आरक्षण स्टेशन शैली में, कई छोटी सहयोगी रजिस्टर फ़ाइलें होती हैं, आमतौर पर प्रत्येक निष्पादन इकाई के इनपुट पर एक। किसी समस्या कतार में प्रत्येक निर्देश के प्रत्येक ऑपरेंड में इन रजिस्टर फ़ाइलों में से एक में मान के लिए एक स्थान होता है।

इस शैली में, जब किसी निष्पादन इकाई को कोई निर्देश जारी किया जाता है, तो समस्या कतार प्रविष्टि के अनुरूप रजिस्टर फ़ाइल प्रविष्टियाँ पढ़ी जाती हैं और निष्पादन इकाई को अग्रेषित की जाती हैं।


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


 * भविष्य की फ़ाइल
 * मशीन की सबसे सट्टा रजिस्टर स्थिति। रैम को तार्किक रजिस्टर संख्या द्वारा अनुक्रमित किया गया।


 * सक्रिय रजिस्टर फ़ाइल
 * फ्यूचर फ़ाइल के लिए Intel P6 समूह का शब्द।


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


 * पुनः क्रमित बफ़र (आरओबी)
 * एक संरचना जो उड़ान में निर्देशों के लिए, प्रति-ऑपरेशन के आधार पर क्रमिक रूप से (गोलाकार) अनुक्रमित होती है। यह इतिहास बफ़र से भिन्न है क्योंकि पुनर्क्रमित बफ़र आम तौर पर भविष्य की फ़ाइल (यदि यह मौजूद है) के बाद और आर्किटेक्चरल रजिस्टर फ़ाइल से पहले आता है।
 * रेओrder बफ़र्स डेटा-रहित या डेटा-पूर्ण हो सकते हैं।
 * विलमेट के आरओबी में, आरओबी प्रविष्टियाँ भौतिक रजिस्टर फ़ाइल (पीआरएफ) में रजिस्टरों को इंगित करती हैं, और इसमें अन्य बहीखाता भी शामिल होता है।
 * यह एचएआरआरएम के साथ इलिनोइस में एंडी ग्लेव द्वारा किया गया पहला आउट ऑफ ऑर्डर डिजाइन भी था।
 * पी6 का आरओबी, आरओबी प्रविष्टियों में डेटा होता है; कोई अलग पीआरएफ नहीं है.
 * आरओबी से डेटा मान सेवानिवृत्ति के समय आरओबी से आरआरएफ में कॉपी किए जाते हैं।
 * एक छोटा विवरण: यदि आरओबी प्रविष्टियों में अस्थायी स्थानीयता है (यानी, यदि वॉन न्यूमैन अनुदेश अनुक्रम में निर्देश एक साथ बंद हो जाते हैं तो समय में एक साथ वापस लिखते हैं, तो आरओबी प्रविष्टियों पर लेखन संयोजन करना संभव हो सकता है और इसलिए कम पोर्ट होते हैं) एक अलग आरओबी/पीआरएफ होगा)।
 * यह स्पष्ट नहीं है कि इससे कोई फर्क पड़ता है या नहीं, क्योंकि पीआरएफ को बैंक किया जाना चाहिए।
 * आरओबी में आमतौर पर सहयोगी तर्क नहीं होते हैं, और निश्चित रूप से एंडी ग्लेव द्वारा डिजाइन किए गए किसी भी आरओबी में सीएएम नहीं है।
 * कीथ डाइफेंडॉर्फ ने जोर देकर कहा कि आरओबी में कई वर्षों से जटिल सहयोगी तर्क हैं।
 * पहले आरओबी प्रस्ताव में सीएएम हो सकता है।

टैग-अनुक्रमित रजिस्टर फ़ाइल
यह नाम बदलने की शैली है जिसका उपयोग MIPS R10000, अल्फा 21264 और AMD Athlon के FP अनुभाग में किया जाता है।

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

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

जारी किए गए निर्देश टैग-अनुक्रमित भौतिक रजिस्टर फ़ाइल (केवल-प्रसारण ऑपरेंड को छोड़कर) से पढ़े जाते हैं और फिर निष्पादित होते हैं। निष्पादन परिणाम टैग-अनुक्रमित भौतिक रजिस्टर फ़ाइल में लिखे जाते हैं, साथ ही प्रत्येक कार्यात्मक इकाई से पहले बाईपास नेटवर्क पर प्रसारित किए जाते हैं। ग्रेजुएशन लिखित वास्तुशिल्प रजिस्टर के लिए पिछले टैग को मुफ्त कतार में रखता है ताकि इसे नए डिकोड किए गए निर्देश के लिए पुन: उपयोग किया जा सके।

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

आरक्षण स्टेशन
यह AMD K7 और K8 डिज़ाइन के पूर्णांक अनुभाग में उपयोग की जाने वाली शैली है।

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

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

जारी किए गए निर्देश आरक्षण स्टेशन से उनके तर्क पढ़ते हैं, बस-प्रसारित ऑपरेंड को बायपास करते हैं, और फिर निष्पादित करते हैं। जैसा कि पहले उल्लेख किया गया है, आरक्षण स्टेशन रजिस्टर फ़ाइलें आमतौर पर छोटी होती हैं, जिनमें शायद आठ प्रविष्टियाँ होती हैं।

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

ग्रेजुएशन रीऑर्डर बफ़र से मान को आर्किटेक्चरल रजिस्टर फ़ाइल में कॉपी करता है। आर्किटेक्चरल रजिस्टर फ़ाइल का एकमात्र उपयोग अपवादों और शाखा गलत पूर्वानुमानों से उबरना है।

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

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

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

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

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

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

इतिहास
आईबीएम सिस्टम/360 मॉडल 91 एक प्रारंभिक मशीन थी जो निर्देशों के आउट-ऑफ़-ऑर्डर निष्पादन का समर्थन करती थी; इसमें टोमासुलो एल्गोरिदम का उपयोग किया गया, जो रजिस्टर नाम बदलने का उपयोग करता है।

POWER1 पहला माइक्रोप्रोसेसर है जिसने 1990 में रजिस्टर नाम बदलने और आउट-ऑफ़-ऑर्डर निष्पादन का उपयोग किया था।

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

शुरुआती आउट-ऑफ-ऑर्डर मशीनों ने नाम बदलने और आरओबी/पीआरएफ भंडारण कार्यों को अलग नहीं किया। उस मामले के लिए, कुछ शुरुआती, जैसे कि सोही का आरयूयू या मेटाफ्लो डीसीएएफ, संयुक्त शेड्यूलिंग, नामकरण और भंडारण सभी एक ही संरचना में।

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

हालाँकि, पहले की मशीनें रीनेमर में कंटेंट-एड्रेसेबल मेमोरी (CAM) का उपयोग करती थीं। उदाहरण के लिए, HPSM RAT, या रजिस्टर उपनाम तालिका, अनिवार्य रूप से रजिस्टर के विभिन्न संस्करणों के संयोजन में तार्किक रजिस्टर संख्या पर एक CAM का उपयोग करती है।

कई मायनों में, आउट-ऑफ़-ऑर्डर माइक्रोआर्किटेक्चर की कहानी यह है कि कैसे इन सीएएम को उत्तरोत्तर समाप्त कर दिया गया है। छोटे सीएएम उपयोगी हैं; बड़े सीएएम अव्यावहारिक हैं।

P6 (माइक्रोआर्किटेक्चर) इंटेल द्वारा आउट-ऑफ-ऑर्डर निष्पादन और रजिस्टर नाम बदलने दोनों को लागू करने वाला पहला माइक्रोआर्किटेक्चर था। पी6 (माइक्रोआर्किटेक्चर) का उपयोग पेंटियम प्रो, पेंटियम II, पेंटियम III, पेंटियम एम, कोर और कोर 2 माइक्रोप्रोसेसरों में किया गया था। साइरिक्स 6x86, 2 अक्टूबर 1995 को रिलीज़ हुई, रजिस्टर नाम बदलने और आउट-ऑफ़-ऑर्डर निष्पादन का उपयोग करने वाला पहला x86 प्रोसेसर था। 1996 में जारी किए गए अन्य x86 प्रोसेसर (जैसे NexGen Nx686 और AMD K5) में RISC माइक्रो-ऑपरेशन|μ-ऑपरेशंस (मूल x86 निर्देशों के बजाय) के रजिस्टर नाम बदलने और आउट-ऑफ-ऑर्डर निष्पादन की सुविधा भी शामिल थी।