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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

संदर्भ


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