क्लासिक आरआईएससी पाइपलाइन

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

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

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

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

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

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

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

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

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

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

ALU बूलियन संचालन   करने के लिए जिम्मेदार है (और, या, नहीं, नंद, न ही, xor, xnor) और पूर्णांक जोड़ और घटाव करने के लिए भी। परिणाम के अलावा, ALU आमतौर पर स्थिति बिट्स प्रदान करता है जैसे परिणाम 0 था या नहीं, या यदि कोई अतिप्रवाह हुआ।

बिट शिफ्टर शिफ्ट और रोटेशन के लिए जिम्मेदार होता है।

संचालन  के प्रकार के अनुसार इन सरल आरआईएससी मशीनों पर  अनुदेश  ों को तीन विलंबता वर्गों में विभाजित किया जा सकता है:


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

मेमोरी एक्सेस
यदि डेटा मेमोरी को एक्सेस करने की आवश्यकता है, तो यह इस चरण में किया जाता है।

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

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

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

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

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

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

उत्कृष्ट आरआईएससी संपंक्ति   में, डेटा खतरों को दो तरीकों से टाला जाता है:

उपाय A. बाइपास करना
बायपासिंग को ऑपरेंड अग्रेषण  के रूप में भी जाना जाता है।

मान लीजिए कि सीपीयू निम्नलिखित कोड का निष्पादन कर रहा है: अनुदेश  लाने और डिकोड करने के चरण पहले के बाद दूसरा  अनुदेश   एक चक्र भेजते हैं। वे इस आरेख में दिखाए अनुसार  संपंक्ति   में प्रवाहित होते हैं:

एक सहज संपंक्ति   में, खतरे पर विचार किए बिना, डेटा जोखिम निम्नानुसार बढ़ता है:

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

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

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

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



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

इस एनओपी को संपंक्ति   बबल (कंप्यूटिंग) कहा जाता है क्योंकि यह  संपंक्ति   में तैरता है, पानी के पाइप में हवा के बुलबुले की तरह, संसाधनों पर कब्जा कर रहा है लेकिन उपयोगी परिणाम नहीं दे रहा है। डेटा खतरे का पता लगाने और खतरे को दूर करने तक  संपंक्ति   को रोकने के लिए हार्डवेयर को ' संपंक्ति   इंटरलॉक' कहा जाता है।

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

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

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


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

शाखाओं के साथ इस प्रदर्शन की समस्या को हल करने के लिए चार योजनाएँ हैं:


 * अनुमान नहीं लिया गया: अनुदेश   कैश से शाखा के बाद हमेशा  अनुदेश   प्राप्त करें, लेकिन शाखा न लेने पर ही इसे कार्यान्वित   करें। टहनी नहीं ली तो पाइप लाइन भरी रहती है। यदि शाखा ली जाती है, तो  अनुदेश   फ़्लश हो जाता है (चिन्हित किया जाता है जैसे कि यह एक NOP था), और एक चक्र का एक  अनुदेश   समाप्त करने का अवसर खो जाता है।
 * शाखा की संभावना: अनुदेश   कैश से शाखा के बाद हमेशा  अनुदेश   प्राप्त करें, लेकिन शाखा लेने पर ही इसे कार्यान्वित   करें। संकलक हमेशा ऐसी शाखा पर शाखा विलंब स्लॉट को भर सकता है, और चूंकि शाखाओं को अधिक बार नहीं लिया जाता है, ऐसी शाखाओं में पिछले प्रकार की तुलना में एक छोटा IPC जुर्माना होता है।
 * शाखा विलंब स्लॉट: अनुदेश   कैश से हमेशा शाखा के बाद  अनुदेश   प्राप्त करें, और हमेशा इसे कार्यान्वित   करें, भले ही शाखा ली गई हो। शाखाओं के कुछ अंश (शायद 60%) या नहीं लिए गए (शायद 40%) के लिए आईपीसी जुर्माना लेने के बजाय, शाखा देरी स्लॉट उन शाखाओं के लिए आईपीसी जुर्माना लेते हैं जिनमें संकलक शाखा देरी स्लॉट को शेड्यूल नहीं कर सका। स्पार्क, एमआईपीएस और MC88K रुपरेखा रों ने अपने ISAs में एक शाखा विलंब स्लॉट तैयार किया।
 * शाखा भविष्यवाणी: प्रत्येक अनुदेश   को लाने के समानांतर में, अनुमान लगाएं कि क्या  अनुदेश   एक शाखा या छलांग है, और यदि ऐसा है, तो लक्ष्य का अनुमान लगाएं। एक शाखा या छलांग के बाद साइकिल पर, अनुमानित लक्ष्य पर  अनुदेश   प्राप्त करें। जब अनुमान गलत हो, तो गलत तरीके से प्राप्त लक्ष्य को फ्लश करें।

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

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

अपवाद
मान लीजिए कि 32-बिट आरआईएससी एक एडीडी अनुदेश   को संसाधित करता है जो दो बड़ी संख्याएं जोड़ता है, और परिणाम 32 बिट्स में फिट नहीं होता है।

अधिकांश आर्किटेक्चर द्वारा प्रदान किया जाने वाला सबसे सरल समाधान रैपिंग अंकगणित है। अधिकतम संभव एन्कोडेड मान से अधिक संख्या में उनके सबसे महत्वपूर्ण बिट्स फिट होने तक काट दिए जाते हैं। सामान्य पूर्णांक संख्या प्रणाली में, 3000000000+3000000000=6000000000। अहस्ताक्षरित 32 बिट रैपिंग अंकगणित के साथ, 3000000000+3000000000=1705032704 (6000000000 मॉड 2^32)। यह बहुत उपयोगी नहीं लग सकता है। अंकगणित को लपेटने का सबसे बड़ा लाभ यह है कि प्रत्येक संक्रिया का एक सुपरिभाषित परिणाम होता है।

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

उत्कृष्ट आरआईएससी मशीनों में से एक पर सबसे आम प्रकार का सॉफ़्टवेयर-दिखने वाला अपवाद एक ट्रांसलेशन_लुकसाइड_बफ़र#टीएलबी-मिस_हैंडलिंग है।

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

समस्या को ठीक करने और प्रोग्राम को पुनरारंभ करने के लिए सॉफ़्टवेयर को आसान (और तेज़) बनाने के लिए, CPU को एक सटीक अपवाद लेना चाहिए। एक सटीक अपवाद का अर्थ है कि अपवाद अनुदेश   तक सभी  अनुदेश   कार्यान्वित   किए गए हैं, और अपवाद  अनुदेश   और बाद में सब कुछ कार्यान्वित   नहीं किया गया है।

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

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

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

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

यह भी देखें

 * प्रोसेसर के प्रदर्शन का लौह नियम

संदर्भ


fa : خط لوله کلاسیک