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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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


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


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

टैग-अनुक्रमित रजिस्टर फ़ाइल
यह नाम बदलने की शैली है जिसका उपयोग एमआईपीएस R10000, अल्फा 21264 और एएमडी एथलॉन के एफपी अनुभाग में किया जाता है।

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

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

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

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

आरक्षण स्टेशन
यह एएमडी 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 और एएमडी K5) में RISC माइक्रो-ऑपरेशन|μ-ऑपरेशंस (मूल x86 निर्देशों के अतिरिक्त) के रजिस्टर नाम बदलने और आउट-ऑफ-ऑर्डर निष्पादन की सुविधा भी सम्मिलित थी।