आवंटन पंजीकृत करें

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

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

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

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

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

रजिस्टर एलोकेशन के घटक
इसलिए रजिस्टर एलोकेशन में यह चुनना सम्मिलित है कि रनटाइम पर वेरिएबल्स को कहां संग्रहीत किया जाए, अथार्त रजिस्टरों के अंदर या बाहर यदि वेरिएबल को रजिस्टरों में संग्रहीत किया जाना है, तो आवंटनकर्ता को यह निर्धारित करने की आवश्यकता है कि यह वेरिएबल किस रजिस्टर में संग्रहीत किया जाएगा। अंततः एक और चुनौती उस अवधि को निर्धारित करना है जिसके लिए एक वेरिएबल को एक ही स्थान पर रहना चाहिए।

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

रजिस्टर एलोकेशन में उठाई गई सामान्य समस्याएं
रजिस्टर एलोकेशन कई समस्याओं को उत्पन्न करता है जिन्हें विभिन्न रजिस्टर एलोकेशन दृष्टिकोणों से समाधान किया जाता है जा सकता है (या टाला जा सकता है)। सबसे समान्य समस्याओं में से तीन की पहचान इस प्रकार की गई है:


 * अलियासिंग: कुछ आर्किटेक्चर में, एक रजिस्टर को मान निर्दिष्ट करने से दूसरे रजिस्टर का मूल्य प्रभावित हो सकता है: इसे अलियासिंग कहा जाता है। उदाहरण के लिए, x86 आर्किटेक्चर में चार सामान्य प्रयोजन 32-बिट रजिस्टर हैं जिनका उपयोग 16-बिट या 8-बिट रजिस्टर के रूप में भी किया जा सकता है। इस स्थिति में, ईएक्स रजिस्टर को 32-बिट मान निर्दिष्ट करने से एएल रजिस्टर का मूल्य प्रभावित होगा।


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

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

ग्राफ-कलरिंग एलोकेशन
रजिस्टर एलोकेशन को हल करने के लिए ग्राफ़-कलर एलोकेशन प्रमुख दृष्टिकोण है। यह सबसे पहले चैतीन एट अल द्वारा प्रस्तावित किया गया था।

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

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

सिद्धांत
चैतिन-शैली ग्राफ़-कलर रजिस्टर आवंटनकर्ता में मुख्य चरण हैं:


 * 1) रेनंबर: स्रोत कार्यक्रम में लाइव रेंज जानकारी खोजें।
 * 2) बिल्ड: इंटरफेरेंस ग्राफ़ बनाएं.
 * 3) कोलेसेस: कॉपी निर्देशों से संबंधित गैर-हस्तक्षेप करने वाले वेरिएबल की लाइव श्रेणियों को मर्ज करें।
 * 4) स्पिल कास्ट: प्रत्येक वेरिएबल की स्पिल कास्ट की गणना करें यह अंतिम कार्यक्रम की गति पर एक वेरिएबल को मेमोरी में मैप करने के प्रभाव का आकलन करता है।
 * 5) सरल बनाएं: अनुमान ग्राफ़ में नोड्स का क्रम बनाएं
 * 6) स्पिल कोड: स्पिल निर्देश डालें, अथार्त रजिस्टरों और मेमोरी के बीच मूल्यों को कम्यूट करने के लिए लोड और स्टोर करें।
 * 7) चुनें: प्रत्येक वेरिएबल के लिए एक रजिस्टर निर्दिष्ट करें।

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

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

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

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

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

स्यूडोकोड
यह पोलेटो एट अल द्वारा पहली बार प्रस्तावित एल्गोरिदम का वर्णन करता है। जहाँ:
 * R उपलब्ध रजिस्टरों की संख्या है।
 * सक्रिय वह सूची है, जो वर्तमान बिंदु को ओवरलैप करने वाले लाइव अंतरालों के बढ़ते अंत बिंदु के क्रम में क्रमबद्ध होती है और रजिस्टरों में रखी जाती है।

लीनियरस्कैनरजिस्टरआवंटन सक्रिय ← {} प्रत्येक लाइव अंतराल i के लिए, प्रारंभ बिंदु को बढ़ाने के क्रम में करें समाप्तिपुरानाअंतराल(i) यदि लंबाई (सक्रिय) = आर तो स्पिलएटइंटरवल(i) अन्य रजिस्टर[i] ← मुफ़्त रजिस्टरों के पूल से हटाया गया एक रजिस्टर i को सक्रिय में जोड़ें, अंतिम बिंदु को बढ़ाकर क्रमबद्ध करें समाप्तिपुरानाअंतराल(i) प्रत्येक अंतराल के लिए j सक्रिय में, अंत बिंदु को बढ़ाने के क्रम में करें यदि समापन बिंदु[j] ≥ प्रारंभबिंदु[i] तो वापस करना j को सक्रिय से हटा दें मुफ़्त रजिस्टरों के पूल में रजिस्टर[जे] जोड़ें स्पिलएटइंटरवल(i) स्पिल ← सक्रिय में अंतिम अंतराल यदि समापन बिंदु[स्पिल] > समापन बिंदु[i] तो रजिस्टर[i] ← रजिस्टर[स्पिल] स्थान[स्पिल] ← नया स्टैक स्थान सक्रिय से स्पिल हटाएँ i को सक्रिय में जोड़ें, अंतिम बिंदु को बढ़ाकर क्रमबद्ध करें अन्य स्थान[i] ← नया स्टैक स्थान

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

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

रीमटेरियलाइजेशन
इष्टतम रजिस्टर एलोकेशन की समस्या एनपी-पूर्ण है। परिणामस्वरूप कंपाइलर इसके समाधान का अनुमान लगाने के लिए अनुमानी तकनीकों का उपयोग करते हैं।

चैतिन एट अल. स्पिल कोड की गुणवत्ता में सुधार के लिए कई विचारों पर चर्चा करें। वे बताते हैं कि कुछ मानों की एक ही निर्देश में पुनः गणना की जा सकती है और गणना के लिए आवश्यक ऑपरेंड सदैव उपलब्ध रहेगा। वे इन असाधारण मूल्यों को कभी नष्ट न होने वाला कहते हैं और ध्यान देते हैं कि ऐसे मूल्यों को बिखरने और पुनः लोड करने के अतिरिक्त पुनर्गणना की जानी चाहिए। वे आगे ध्यान देते हैं कि कभी न खत्म किए गए मूल्य की एक असंबद्ध प्रतिलिपि को सीधे वांछित रजिस्टर में पुन: गणना करके समाप्त किया जा सकता है।

इन तकनीकों को रीमटेरियलाइजेशन कहा जाता है। वास्तव में, रीमटेरियलाइजेशन के अवसरों में सम्मिलित हैं:
 * पूर्णांक स्थिरांक का तत्काल भार और कुछ मशीनों पर, फ़्लोटिंग-पॉइंट स्थिरांक,
 * फ़्रेम पॉइंटर या स्थिर डेटा क्षेत्र से निरंतर ऑफसेट की गणना करना और
 * डिस्प्ले से गैर-स्थानीय फ़्रेम पॉइंटर्स लोड करना।

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

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

कोलेसिंग करने से हस्तक्षेप ग्राफ़ की कलर क्षमता पर धनात्मक और ऋणात्मक दोनों प्रभाव पड़ सकते हैं। उदाहरण के लिए, एक ऋणात्मक प्रभाव जो सह-संयोजन का ग्राफ़ अनुमान की रंगक्षमता पर हो सकता है, वह है जब दो नोड्स एक साथ जुड़ते हैं, क्योंकि परिणाम नोड में उन नोड्स के किनारों का एक संघ होगा जिन्हें जोड़ा जा रहा है। उदाहरण के लिए, अनुमान ग्राफ़ की कलर योग्यता पर एकत्रित होने का एक धनात्मक प्रभाव यह है कि जब एक नोड दोनों नोड्स के एकत्रित होने में हस्तक्षेप करता है, तो नोड की डिग्री एक से कम हो जाती है, जिससे हस्तक्षेप ग्राफ़ की समग्र कलर क्षमता में सुधार होता है।

कई समेकित अनुमान उपलब्ध हैं:


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

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

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

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

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

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

यह भी देखें

 * स्ट्राहलर संख्या, एक अभिव्यक्ति वृक्ष का मूल्यांकन करने के लिए आवश्यक रजिस्टरों की न्यूनतम संख्या है।
 * रजिस्टर (कीवर्ड), एक रजिस्टर में रखे जाने वाले वेरिएबल के लिए C और C++ में संकेत है।

बाहरी संबंध

 * A Tutorial on Integer Programming
 * Conference Integer Programming and Combinatorial Optimization, IPCO
 * The Aussois Combinatorial Optimization Workshop
 * Bosscher, Steven; and Novillo, Diego. GCC gets a new Optimizer Framework. An article about GCC's use of SSA and how it improves over older IRs.
 * The SSA Bibliography. Extensive catalogue of SSA research papers.
 * Zadeck, F. Kenneth. "The Development of Static Single Assignment Form", December 2007 talk on the origins of SSA.
 * VV.AA. "SSA-based Compiler Design" (2014)
 * Citations from CiteSeer
 * Optimization manuals by Agner Fog - documentation about x86 processor architecture and low-level code optimization