क्लासिक आरआईएससी पाइपलाइन: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Instruction pipeline}} | {{Short description|Instruction pipeline}} | ||
कंप्यूटर हार्डवेयर के इतिहास में कुछ शुरुआती कम किए गए अनुदेश सेट कंप्यूटर [[सेंट्रल प्रोसेसिंग यूनिट]] (आर आई एस सी सीपीयू) ने एक बहुत ही समान स्थापत्य समाधान का उपयोग किया, जिसे अब उत्कृष्ट आर आई एस सी संपंक्ति कहा जाता है। वे सीपीयू एमआईपीएस आर्किटेक्चर, [[SPARC|स्पार्क]], मोटोरोला [[Motorola 88000|मोटोरोला 88000]] थे और बाद में शिक्षा के लिए आविष्कृत सांकेतिक सीपीयू [[DLX|डीएलएक्स]]। | कंप्यूटर हार्डवेयर के इतिहास में कुछ शुरुआती कम किए गए अनुदेश सेट कंप्यूटर [[सेंट्रल प्रोसेसिंग यूनिट]] (आर आई एस सी सीपीयू) ने एक बहुत ही समान स्थापत्य समाधान का उपयोग किया, जिसे अब उत्कृष्ट आर आई एस सी संपंक्ति कहा जाता है। वे सीपीयू एमआईपीएस आर्किटेक्चर, [[SPARC|स्पार्क]], मोटोरोला [[Motorola 88000|मोटोरोला 88000]] थे और बाद में शिक्षा के लिए आविष्कृत सांकेतिक सीपीयू [[DLX|डीएलएक्स]]। | ||
इनमें से प्रत्येक उत्कृष्ट अदिष्ट आरआईएससी रुपरेखा प्राप्त करता है और प्रति | इनमें से प्रत्येक उत्कृष्ट अदिष्ट आरआईएससी रुपरेखा प्राप्त करता है और प्रति आवर्तन एक अनुदेश कार्यान्वित करने का प्रयास करता है। प्रत्येक रुपरेखा की मुख्य सामान्य अवधारणा पांच-चरण निष्पादन [[निर्देश पाइपलाइन|अनुदेश संपंक्ति]] है। संचालन के अवधि प्रत्येक संपंक्ति चरण एक अवधि में एक अनुदेश पर काम करता है। इन चरणों में से प्रत्येक में क्षेत्र धारण करने के लिए [[फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स)]] का एक समूह होता है, और [[संयोजन तर्क]] जो उन फ्लिप-फ्लॉप के आउटपुट पर संचालित होता है। | ||
== उत्कृष्ट पांच चरण आरआईएससी संपंक्ति == | == उत्कृष्ट पांच चरण आरआईएससी संपंक्ति == | ||
[[Image:Fivestagespipeline.png|thumb|400px|[[ जोखिम ]] मशीन में मूल पांच-चरण संपंक्ति (आईएफ = अनुदेश प्राप्त करें, आईडी = अनुदेश डिकोड, ईएक्स = निष्पादन, एमईएम = मेमोरी एक्सेस, डब्ल्यूबी = | [[Image:Fivestagespipeline.png|thumb|400px|[[ जोखिम ]] मशीन में मूल पांच-चरण संपंक्ति (आईएफ = अनुदेश प्राप्त करें, आईडी = अनुदेश डिकोड, ईएक्स = निष्पादन, एमईएम = मेमोरी एक्सेस, डब्ल्यूबी = सूची वापस लिखें)। ऊर्ध्वाधर अक्ष क्रमिक अनुदेश है; क्षैतिज अक्ष अवधि है। तो हरे कॉलम में, सबसे पुराना अनुदेश WB चरण में है, और नवीनतम अनुदेश अनुदेश प्राप्ति के दौर से गुजर रहा है।]] | ||
=== अनुदेश | === अनुदेश प्राप्त करना === | ||
अनुदेश मेमोरी में रहते हैं जिसे पढ़ने में एक | अनुदेश मेमोरी में रहते हैं जिसे पढ़ने में एक आवर्तन लगता है। यह मैमोरी एसआरएएम या एक अनुदेश [[कैश (कंप्यूटिंग)|कैचे (कंप्यूटिंग)]] को समर्पित हो सकती है। विलंबता शब्द का प्रयोग कंप्यूटर विज्ञान में प्रायः किया जाता है और इसका अर्थ उस अवधि से है। जब कोई संचालन प्रारंभ होता है, एवं जब तक कि यह पूरा नहीं हो जाता। इस प्रकार अनुदेश प्राप्ति में एक [[घड़ी चक्र|घड़ी आवर्तन]] की विलंबता होती है (यदि एकल-आवर्तन एसआरएएम का उपयोग किया जाता है या यदि अनुदेश कैचे में था)। इस प्रकार अनुदेश प्राप्ति के चरण के अवधि मे अनुदेश मैमोरी से 32-बिट अनुदेश प्राप्त किया जाता है। | ||
[[ कार्यक्रम गणक ]] | [[ कार्यक्रम गणक |प्रोग्राम गणक]] या पीसी एक सूची है जो उस स्थल को रखता है एवं अनुदेश मैमोरी को प्रस्तुत करता है। एक आवर्तन के प्रारंभ में अनुदेश मैमोरी के स्थल को प्रस्तुत करता है। पुनः आवर्तन की अवधि मे अनुदेश मैमोरी से अनुदेश पढ़ा जाता है, और साथ ही आगामी पीसी को निर्धारित करने के लिए गणना की जाती है। आगामी पीसी की गणना पीसी को 4 से वृद्धि की जाती है, और यह चयन करके कि आगामी पीसी के रूप में लेना है या आगामी पीसी के रूप में उपखंड/सम्मलित गणना का परिणाम लेना है। ध्यान दें कि उत्कृष्ट आरआईएससी में सभी अनुदेशों की लंबाई समान होती है। (यह एक कारण है जो आरआईएससी को सीआईएससी से पृथक करती है <ref>{{cite web |first=David |last=Patterson| title=RISC I: A Reduced Instruction Set VLSI Computer |series=Isca '81|date=12 May 1981|pages=443–457|url=https://dl.acm.org/doi/10.5555/800052.801895}}</ref>). मूल आरआईएससी डिज़ाइन में, एक अनुदेश का आकार 4 बाइट्स होता है, इसलिए अनुदेश के स्थल में हमेशा 4 जोड़ें, लेकिन किसी शाखा, छलांग या अपवाद के मामले में पीसी + 4 का उपयोग न करें (विलंबित शाखाएं देखें, नीचे ). (ध्यान दें कि कुछ आधुनिक मशीनें आगामी अनुदेश स्थल का अनुमान लगाने के लिए अधिक जटिल एल्गोरिदम ([[शाखा भविष्यवाणी]] और [[शाखा लक्ष्य भविष्यवक्ता]]) का उपयोग करती हैं।) | ||
=== अनुदेश डिकोड === | === अनुदेश डिकोड === | ||
एक और | एक और कारण जो पहली आर आई एस सी मशीनों को पहले की CISC मशीनों से पृथक करती है, वह यह है कि आर आई एस सी का कोई [[माइक्रोकोड]] नहीं है।<ref>{{cite web |first=David |last=Patterson| title=RISC I: A Reduced Instruction Set VLSI Computer |series=Isca '81|date=12 May 1981|pages=443–457|url=https://dl.acm.org/doi/10.5555/800052.801895}}</ref> CISC माइक्रो-कोडेड अनुदेश ों के मामले में, एक बार अनुदेश कैश से प्राप्त करने के बाद, अनुदेश बिट्स को संपंक्ति के नीचे स्थानांतरित कर दिया जाता है, जहां प्रत्येक संपंक्ति चरण में सरल संयोजन तर्क अनुदेश बिट्स से सीधे डेटापथ के लिए नियंत्रण संकेत उत्पन्न करता है। उन CISC रुपरेखा ों में, पारंपरिक रूप से डिकोड चरण कहे जाने वाले चरण में बहुत कम डिकोडिंग किया जाता है। डिकोडिंग की इस कमी का एक परिणाम यह है कि अनुदेश क्या करता है यह निर्दिष्ट करने के लिए अधिक अनुदेश बिट्स का उपयोग किया जाना है। सूची इंडेक्स जैसी कारण ों के लिए यह कम बिट्स छोड़ता है। | ||
सभी एमआईपीएस, स्पार्क और डीएलएक्स अनुदेश ों में अधिकतम दो | सभी एमआईपीएस, स्पार्क और डीएलएक्स अनुदेश ों में अधिकतम दो सूची इनपुट होते हैं। डिकोड चरण के अवधि , इन दो सूचीों के इंडेक्स को अनुदेश के भीतर पहचाना जाता है, और इंडेक्स को सूची मेमोरी में स्थल के रूप में प्रस्तुत किया जाता है। इस प्रकार नामित दो सूचीों को [[रजिस्टर फ़ाइल|सूची फ़ाइल]] से पढ़ा जाता है। एमआईपीएस डिज़ाइन में, सूची फ़ाइल में 32 प्रविष्टियाँ थीं। | ||
उसी | उसी अवधि सूची फ़ाइल पढ़ी जाती है, इस चरण में अनुदेश जारी करने का तर्क यह निर्धारित करता है कि क्या संपंक्ति इस चरण में अनुदेश को कार्यान्वित करने के लिए तैयार है। यदि नहीं, तो समस्या तर्क अनुदेश फ़ेच चरण और डिकोड चरण दोनों को रोक देता है। स्टॉल आवर्तन पर, इनपुट फ्लिप फ्लॉप नए बिट्स को स्वीकार नहीं करते हैं, इस प्रकार उस आवर्तन के अवधि कोई नई गणना नहीं होती है। | ||
यदि डिकोड किया गया अनुदेश एक शाखा या छलांग है, तो शाखा या छलांग का लक्ष्य पता | यदि डिकोड किया गया अनुदेश एक शाखा या छलांग है, तो शाखा या छलांग का लक्ष्य पता सूची फ़ाइल को पढ़ने के साथ-साथ गणना की जाती है। शाखा स्थिति की गणना निम्नलिखित आवर्तन में की जाती है (सूची फ़ाइल पढ़ने के बाद), और यदि शाखा ली जाती है या यदि अनुदेश एक छलांग है, तो पहले चरण में पीसी को बढ़े हुए पीसी के बजाय शाखा लक्ष्य सौंपा जाता है गणना की गई है। कुछ आर्किटेक्चर ने निष्पादन चरण में [[अंकगणितीय तर्क इकाई]] (एएलयू) का उपयोग किया, थोड़ा कम अनुदेश थ्रूपुट की कीमत पर। | ||
डीकोड चरण बहुत सारे हार्डवेयर के साथ समाप्त हुआ: एमआइपी में दो | डीकोड चरण बहुत सारे हार्डवेयर के साथ समाप्त हुआ: एमआइपी में दो सूचीों के बराबर होने पर शाखाओं में बंटने की संभावना है, इसलिए एक 32-बिट-चौड़ा और पेड़ सूची फ़ाइल पढ़ने के बाद श्रृंखला में चलता है, इसके माध्यम से बहुत लंबा महत्वपूर्ण पथ बनाता है चरण (जिसका अर्थ है प्रति सेकंड कम आवर्तन)। इसके अलावा, शाखा लक्ष्य संगणना के लिए आम तौर पर 16 बिट ऐड और 14 बिट इंक्रीमेंटर की आवश्यकता होती है। डिकोड चरण में शाखा को हल करने से यह संभव हो गया है कि केवल एक-आवर्तन शाखा गलत अनुमान लगा सकती है। चूँकि शाखाएँ बहुत बार ली जाती थीं (और इस प्रकार गलत भविष्यवाणी की जाती थी), इस दंड को कम रखना बहुत महत्वपूर्ण था। | ||
=== कार्यान्वित करें === | === कार्यान्वित करें === | ||
निष्पादन चरण वह जगह है जहां वास्तविक गणना होती है। आमतौर पर इस चरण में एक ALU होता है, और थोड़ा शिफ्टर भी होता है। इसमें एक बहु | निष्पादन चरण वह जगह है जहां वास्तविक गणना होती है। आमतौर पर इस चरण में एक ALU होता है, और थोड़ा शिफ्टर भी होता है। इसमें एक बहु आवर्तन गुणक और विभक्त भी शामिल हो सकता है। | ||
ALU बूलियन संचालन करने के लिए जिम्मेदार है (और, या, नहीं, नंद, न ही, xor, xnor) और पूर्णांक जोड़ और घटाव करने के लिए भी। परिणाम के अलावा, ALU आमतौर पर स्थिति बिट्स प्रदान करता है जैसे परिणाम 0 था या नहीं, या यदि कोई अतिप्रवाह हुआ। | ALU बूलियन संचालन करने के लिए जिम्मेदार है (और, या, नहीं, नंद, न ही, xor, xnor) और पूर्णांक जोड़ और घटाव करने के लिए भी। परिणाम के अलावा, ALU आमतौर पर स्थिति बिट्स प्रदान करता है जैसे परिणाम 0 था या नहीं, या यदि कोई अतिप्रवाह हुआ। | ||
Line 34: | Line 33: | ||
संचालन के प्रकार के अनुसार इन सरल आरआईएससी मशीनों पर अनुदेश ों को तीन विलंबता वर्गों में विभाजित किया जा सकता है: | संचालन के प्रकार के अनुसार इन सरल आरआईएससी मशीनों पर अनुदेश ों को तीन विलंबता वर्गों में विभाजित किया जा सकता है: | ||
* | * सूची-सूची संचालन (एकल-आवर्तन विलंबता): जोड़ें, घटाएं, तुलना करें और तार्किक संचालन करें। निष्पादन चरण के अवधि , दो तर्क एक साधारण ALU को खिलाए गए थे, जो निष्पादन चरण के अंत तक परिणाम उत्पन्न करता था। | ||
* | * मैमोरी संदर्भ (दो-आवर्तन विलंबता)। मैमोरी से सभी भार। निष्पादन चरण के अवधि , आवर्तन के अंत तक एक आभासी पता बनाने के लिए ALU ने दो तर्क (एक सूची और एक स्थिर ऑफसेट) जोड़े। | ||
*प्रति अनुदेश | *प्रति अनुदेश आवर्तन | बहु-आवर्तन अनुदेश (कई आवर्तन विलंबता)। पूर्णांक गुणा और भाग और सभी [[तैरनेवाला स्थल]] संचालन । निष्पादन चरण के अवधि , इन परिचालनों के संचालन को बहु-आवर्तन गुणा/विभाजित इकाई को खिलाया गया था। शेष संपंक्ति निष्पादन जारी रखने के लिए स्वतंत्र थी जबकि गुणा/विभाजन इकाई ने अपना काम किया था। राइटबैक चरण को जटिल बनाने और तर्क जारी करने से बचने के लिए, मल्टीसाइकिल इंस्ट्रक्शन ने अपने परिणामों को सूचीों के एक पृथक सेट पर लिखा। | ||
=== मेमोरी एक्सेस === | === मेमोरी एक्सेस === | ||
Line 42: | Line 41: | ||
यदि डेटा मेमोरी को एक्सेस करने की आवश्यकता है, तो यह इस चरण में किया जाता है। | यदि डेटा मेमोरी को एक्सेस करने की आवश्यकता है, तो यह इस चरण में किया जाता है। | ||
इस चरण के | इस चरण के अवधि , एकल आवर्तन विलंबता अनुदेश केवल उनके परिणामों को आगामी चरण में अग्रेषित करते हैं। यह अग्रेषण सुनिश्चित करता है कि एक और दो आवर्तन अनुदेश हमेशा अपने परिणाम संपंक्ति के एक ही चरण में लिखते हैं ताकि सूची फ़ाइल में केवल एक लेखन पोर्ट का उपयोग किया जा सके, और यह हमेशा उपलब्ध हो। | ||
सीधे मैप किए गए और वस्तुतः टैग किए गए डेटा कैशिंग के लिए, [[सीपीयू कैश]] के सबसे सरल, दो [[स्टेटिक रैम]] का उपयोग किया जाता है, एक स्टोरिंग डेटा और दूसरा स्टोरिंग टैग। | सीधे मैप किए गए और वस्तुतः टैग किए गए डेटा कैशिंग के लिए, [[सीपीयू कैश]] के सबसे सरल, दो [[स्टेटिक रैम]] का उपयोग किया जाता है, एक स्टोरिंग डेटा और दूसरा स्टोरिंग टैग। | ||
Line 48: | Line 47: | ||
=== राइटबैक === | === राइटबैक === | ||
इस चरण के | इस चरण के अवधि , एकल आवर्तन और दो आवर्तन अनुदेश दोनों अपने परिणाम सूची फ़ाइल में लिखते हैं। | ||
ध्यान दें कि एक ही | ध्यान दें कि एक ही अवधि में दो पृथक -पृथक चरण सूची फ़ाइल तक पहुंच रहे हैं - डिकोड चरण दो स्रोत सूचीों को पढ़ रहा है, उसी अवधि राइटबैक चरण पिछले अनुदेश के गंतव्य सूची को लिख रहा है। | ||
वास्तविक सिलिकॉन पर, यह एक खतरा हो सकता है (खतरों के बारे में अधिक जानकारी के लिए नीचे देखें)। ऐसा इसलिए है क्योंकि डिकोड में पढ़े जाने वाले स्रोत | वास्तविक सिलिकॉन पर, यह एक खतरा हो सकता है (खतरों के बारे में अधिक जानकारी के लिए नीचे देखें)। ऐसा इसलिए है क्योंकि डिकोड में पढ़े जाने वाले स्रोत सूचीों में से एक वही हो सकता है, जैसा कि गंतव्य सूची राइटबैक में लिखा जा रहा है। जब ऐसा होता है, तो सूची फाइल में एक ही मेमोरी सेल को एक ही अवधि में पढ़ा और लिखा जा रहा है। सिलिकॉन पर, एक ही अवधि में पढ़ने और लिखने पर मेमोरी सेल के कई कार्यान्वयन ठीक से काम नहीं करेंगे। | ||
== खतरे == | == खतरे == | ||
Line 58: | Line 57: | ||
=== संरचनात्मक खतरे === | === संरचनात्मक खतरे === | ||
संरचनात्मक खतरे तब होते हैं जब दो अनुदेश एक ही | संरचनात्मक खतरे तब होते हैं जब दो अनुदेश एक ही अवधि में समान संसाधनों का उपयोग करने का प्रयास कर सकते हैं। उत्कृष्ट आरआईएससी संपंक्ति ों ने हार्डवेयर की नकल करके इन खतरों से बचा लिया। विशेष रूप से, शाखा अनुदेश शाखा के लक्षित स्थल की गणना करने के लिए ALU का उपयोग कर सकते थे। यदि उस उद्देश्य के लिए डीकोड चरण में एएलयू का उपयोग किया गया था, तो शाखा द्वारा पालन किए जाने वाले एएलयू अनुदेश ने दोनों अनुदेश ों को एक साथ एएलयू का उपयोग करने का प्रयास देखा होगा। डिकोड चरण में एक विशेष शाखा लक्ष्य योजक को डिज़ाइन करके इस विरोध को हल करना आसान है। | ||
=== डेटा खतरे === | === डेटा खतरे === | ||
डेटा के खतरे तब होते हैं जब एक अनुदेश , अंधाधुंध रूप से निर्धारित किया जाता है, डेटा को | डेटा के खतरे तब होते हैं जब एक अनुदेश , अंधाधुंध रूप से निर्धारित किया जाता है, डेटा को सूची फ़ाइल में उपलब्ध होने से पहले डेटा का उपयोग करने का प्रयास करेगा। | ||
उत्कृष्ट आरआईएससी संपंक्ति में, डेटा खतरों को दो तरीकों से टाला जाता है: | उत्कृष्ट आरआईएससी संपंक्ति में, डेटा खतरों को दो तरीकों से टाला जाता है: | ||
Line 75: | Line 74: | ||
AND r10,r3 -> r11 ; Writes r10 & r3 to r11 | AND r10,r3 -> r11 ; Writes r10 & r3 to r11 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
अनुदेश | अनुदेश प्राप्ति और डिकोड करने के चरण पहले के बाद दूसरा अनुदेश एक आवर्तन भेजते हैं। वे इस आरेख में दिखाए अनुसार संपंक्ति में प्रवाहित होते हैं: | ||
[[File:Pipeline Data Hazard.svg|center]]एक सहज संपंक्ति में, खतरे पर विचार किए बिना, डेटा जोखिम निम्नानुसार बढ़ता है: | [[File:Pipeline Data Hazard.svg|center]]एक सहज संपंक्ति में, खतरे पर विचार किए बिना, डेटा जोखिम निम्नानुसार बढ़ता है: | ||
आवर्तन 3 में, <code>SUB</code> अनुदेश के लिए नए मान की गणना करता है <code>r10</code>. इसी आवर्तन में, <code>AND</code> संचालन डीकोड किया गया है, और का मूल्य <code>r10</code> सूची फ़ाइल से लाया जाता है। हालांकि <code>SUB</code> अनुदेश ने अभी तक इसका परिणाम नहीं लिखा है <code>r10</code>. इसका राइट-बैक सामान्य रूप से आवर्तन 5 (हरा बॉक्स) में होता है। इसलिए, मान सूची फ़ाइल से पढ़ा जाता है और ALU को दिया जाता है (निष्पादन चरण में <code>AND</code> संचालन , लाल बॉक्स) गलत है। | |||
इसके बजाय, हमें उस डेटा को पास करना होगा जिसकी गणना की गई थी <code>SUB</code> के निष्पादन चरण (यानी आरेख में लाल वृत्त के लिए) पर वापस जाएं <code>AND</code> संचालन से पहले यह सामान्य रूप से लिखा-वापस होता है। इस समस्या का समाधान बायपास मल्टीप्लेक्सर्स की एक जोड़ी है। ये मल्टीप्लेक्सर्स डिकोड चरण के अंत में बैठते हैं, और उनके फ्लॉप आउटपुट ALU के इनपुट होते हैं। प्रत्येक मल्टीप्लेक्सर के बीच चयन करता है: | इसके बजाय, हमें उस डेटा को पास करना होगा जिसकी गणना की गई थी <code>SUB</code> के निष्पादन चरण (यानी आरेख में लाल वृत्त के लिए) पर वापस जाएं <code>AND</code> संचालन से पहले यह सामान्य रूप से लिखा-वापस होता है। इस समस्या का समाधान बायपास मल्टीप्लेक्सर्स की एक जोड़ी है। ये मल्टीप्लेक्सर्स डिकोड चरण के अंत में बैठते हैं, और उनके फ्लॉप आउटपुट ALU के इनपुट होते हैं। प्रत्येक मल्टीप्लेक्सर के बीच चयन करता है: | ||
# एक | # एक सूची फाइल रीड पोर्ट (यानी डिकोड स्टेज का आउटपुट, जैसा कि भोली संपंक्ति में है): {{red|red}} तीर | ||
# ALU की वर्तमान | # ALU की वर्तमान सूची संपंक्ति (एक चरण से बायपास करने के लिए): {{blue|blue}} तीर | ||
# एक्सेस चरण की वर्तमान | # एक्सेस चरण की वर्तमान सूची संपंक्ति (जो या तो एक लोडेड वैल्यू है या एक अग्रेषित ALU परिणाम है, यह दो चरणों को बायपास करता है): {{purple|purple}} तीर। ध्यान दें कि इसके लिए डेटा को एक आवर्तन द्वारा अवधि में पीछे की ओर भेजने की आवश्यकता होती है। यदि ऐसा होता है, तो इसे रोकने के लिए एक [[बुलबुला (कंप्यूटिंग)]] डाला जाना चाहिए <code>AND</code> डेटा तैयार होने तक संचालन । | ||
डिकोड चरण तर्क डिकोड चरण में अनुदेश द्वारा पढ़े गए | डिकोड चरण तर्क डिकोड चरण में अनुदेश द्वारा पढ़े गए सूचीों के लिए संपंक्ति के निष्पादन और पहुंच चरणों में अनुदेश ों द्वारा लिखे गए सूचीों की तुलना करता है, और मल्टीप्लेक्सर्स को सबसे हाल के डेटा का चयन करने का कारण बनता है। ये बाईपास मल्टीप्लेक्सर्स संपंक्ति के लिए एएलयू, मल्टीप्लेक्सर और फ्लिप-फ्लॉप की विलंबता के साथ सरल अनुदेश ों को कार्यान्वित करना संभव बनाते हैं। मल्टीप्लेक्सर्स के बिना, सूची फ़ाइल को लिखने और पुनः पढ़ने की विलंबता को इन अनुदेश ों की विलंबता में शामिल करना होगा। | ||
ध्यान दें कि डेटा को केवल | ध्यान दें कि डेटा को केवल अवधि पर आगे बढ़ाया जा सकता है - यदि डेटा को अभी तक संसाधित नहीं किया गया है तो डेटा को पहले चरण में वापस बायपास नहीं किया जा सकता है। उपरोक्त मामले में, डेटा को आगे बढ़ाया जाता है (उस अवधि तक <code>AND</code> एएलयू में सूची के लिए तैयार है <code>SUB</code> पहले ही इसकी गणना कर चुका है)। | ||
[[File:Data Forwarding (One Stage).svg|center]] | [[File:Data Forwarding (One Stage).svg|center]] | ||
Line 99: | Line 98: | ||
AND r10,r3 -> r11 | AND r10,r3 -> r11 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
डेटा | डेटा स्थल से पढ़ा <code>adr</code> के मेमोरी एक्सेस चरण के बाद तक डेटा कैश में मौजूद नहीं है <code>LD</code> अनुदेश । इस अवधि तक, <code>AND</code> अनुदेश पहले से ही ALU के माध्यम से है। इसे हल करने के लिए एएलयू में इनपुट के लिए मैमोरी से डेटा को अवधि पर पीछे की ओर पारित करने की आवश्यकता होगी। ऐसा नहीं हो सकता। समाधान में देरी करना है <code>AND</code> एक आवर्तन द्वारा अनुदेश । डिकोड चरण में डेटा खतरे का पता लगाया जाता है, और प्राप्ति और डिकोड करने के चरण ठप हो जाते हैं - उन्हें अपने इनपुट को फ़्लॉप करने से रोका जाता है और इसलिए एक आवर्तन के लिए उसी स्थिति में रहते हैं। निष्पादन, पहुंच और राइट-बैक चरणों के डाउनस्ट्रीम में एक अतिरिक्त नो- संचालन अनुदेश (एनओपी) डाला गया है <code>LD</code> और <code>AND</code> अनुदेश । | ||
इस एनओपी को संपंक्ति बबल (कंप्यूटिंग) कहा जाता है क्योंकि यह संपंक्ति में तैरता है, पानी के पाइप में हवा के बुलबुले की तरह, संसाधनों पर कब्जा कर रहा है लेकिन उपयोगी परिणाम नहीं दे रहा है। डेटा खतरे का पता लगाने और खतरे को दूर करने तक संपंक्ति को रोकने के लिए हार्डवेयर को ' संपंक्ति इंटरलॉक' कहा जाता है। | इस एनओपी को संपंक्ति बबल (कंप्यूटिंग) कहा जाता है क्योंकि यह संपंक्ति में तैरता है, पानी के पाइप में हवा के बुलबुले की तरह, संसाधनों पर कब्जा कर रहा है लेकिन उपयोगी परिणाम नहीं दे रहा है। डेटा खतरे का पता लगाने और खतरे को दूर करने तक संपंक्ति को रोकने के लिए हार्डवेयर को ' संपंक्ति इंटरलॉक' कहा जाता है। | ||
Line 110: | Line 109: | ||
|[[File:Data Forwarding (Two Stage).svg]] | |[[File:Data Forwarding (Two Stage).svg]] | ||
|} | |} | ||
हालाँकि, किसी भी डेटा अग्रेषण के साथ एक संपंक्ति इंटरलॉक का उपयोग नहीं किया जाना चाहिए। का पहला उदाहरण <code>SUB</code> के बाद <code>AND</code> और दूसरा उदाहरण <code>LD</code> के बाद <code>AND</code> राइट-बैक प्राप्त होने तक पहले चरण को तीन | हालाँकि, किसी भी डेटा अग्रेषण के साथ एक संपंक्ति इंटरलॉक का उपयोग नहीं किया जाना चाहिए। का पहला उदाहरण <code>SUB</code> के बाद <code>AND</code> और दूसरा उदाहरण <code>LD</code> के बाद <code>AND</code> राइट-बैक प्राप्त होने तक पहले चरण को तीन आवर्तनों तक रोककर हल किया जा सकता है, और सूची फ़ाइल में डेटा सही है, जिससे सही सूची मूल्य प्राप्त किया जा सकता है <code>AND</code>डिकोड चरण। यह काफी प्रदर्शन हिट का कारण बनता है, क्योंकि प्रोसेसर कुछ भी संसाधित करने में बहुत अवधि व्यतीत करता है, लेकिन घड़ी की गति बढ़ाई जा सकती है क्योंकि प्रतीक्षा करने के लिए कम अग्रेषण तर्क है। | ||
जब प्रोग्राम का मशीन कोड कंपाइलर द्वारा लिखा जाता है तो इस डेटा खतरे का आसानी से पता लगाया जा सकता है। [[स्टैनफोर्ड एमआईपीएस]] मशीन इस मामले में एनओपी अनुदेश ों को जोड़ने के लिए संकलक पर निर्भर थी, बजाय इसके कि पहले दो संपंक्ति चरणों का पता लगाने के लिए सर्किट्री का पता लगाया जाए और (अधिक करबद्ध रूप से) स्टाल किया जाए। इसलिए नाम एमआईपीएस: इंटरलॉक्ड संपंक्ति चरणों के बिना माइक्रोप्रोसेसर। यह पता चला कि संकलक द्वारा जोड़े गए अतिरिक्त एनओपी अनुदेश ों ने प्रोग्राम बायनेरिज़ को पर्याप्त रूप से विस्तारित किया कि अनुदेश कैश हिट दर कम हो गई। स्टाल हार्डवेयर, हालांकि महंगा था, अनुदेश कैश हिट दर में सुधार करने के लिए बाद के रुपरेखा ों में वापस रखा गया था, जिस बिंदु पर संक्षिप्त नाम अब समझ में नहीं आता है। | जब प्रोग्राम का मशीन कोड कंपाइलर द्वारा लिखा जाता है तो इस डेटा खतरे का आसानी से पता लगाया जा सकता है। [[स्टैनफोर्ड एमआईपीएस]] मशीन इस मामले में एनओपी अनुदेश ों को जोड़ने के लिए संकलक पर निर्भर थी, बजाय इसके कि पहले दो संपंक्ति चरणों का पता लगाने के लिए सर्किट्री का पता लगाया जाए और (अधिक करबद्ध रूप से) स्टाल किया जाए। इसलिए नाम एमआईपीएस: इंटरलॉक्ड संपंक्ति चरणों के बिना माइक्रोप्रोसेसर। यह पता चला कि संकलक द्वारा जोड़े गए अतिरिक्त एनओपी अनुदेश ों ने प्रोग्राम बायनेरिज़ को पर्याप्त रूप से विस्तारित किया कि अनुदेश कैश हिट दर कम हो गई। स्टाल हार्डवेयर, हालांकि महंगा था, अनुदेश कैश हिट दर में सुधार करने के लिए बाद के रुपरेखा ों में वापस रखा गया था, जिस बिंदु पर संक्षिप्त नाम अब समझ में नहीं आता है। | ||
Line 116: | Line 115: | ||
=== खतरों को नियंत्रित करें === | === खतरों को नियंत्रित करें === | ||
नियंत्रण के खतरे सशर्त और बिना शर्त शाखाओं के कारण होते हैं। उत्कृष्ट आरआईएससी संपंक्ति डिकोड चरण में शाखाओं को हल करती है, जिसका अर्थ है कि शाखा संकल्प पुनरावृत्ति दो | नियंत्रण के खतरे सशर्त और बिना शर्त शाखाओं के कारण होते हैं। उत्कृष्ट आरआईएससी संपंक्ति डिकोड चरण में शाखाओं को हल करती है, जिसका अर्थ है कि शाखा संकल्प पुनरावृत्ति दो आवर्तन लंबी है। तीन निहितार्थ हैं: | ||
* ब्रांच रिजॉल्यूशन रिकरेंस काफी सर्किट्री से होकर गुजरता है: इंस्ट्रक्शन कैश रीड, | * ब्रांच रिजॉल्यूशन रिकरेंस काफी सर्किट्री से होकर गुजरता है: इंस्ट्रक्शन कैश रीड, सूची फाइल रीड, ब्रांच कंडीशन कंप्यूट (जिसमें एमआईपीएस CPU पर 32-बिट तुलना शामिल है), और अगला इंस्ट्रक्शन एड्रेस मल्टीप्लेक्सर। | ||
* क्योंकि शाखा और कूद लक्ष्यों की गणना | * क्योंकि शाखा और कूद लक्ष्यों की गणना सूची पढ़ने के समानांतर में की जाती है, आरआईएससी आईएसए के पास आमतौर पर उस शाखा को सूची + ऑफसेट स्थल पर अनुदेश नहीं होते हैं। सूची करने के लिए कूदो समर्थित है। | ||
* ली गई किसी भी शाखा पर, शाखा के तुरंत बाद का अनुदेश हमेशा अनुदेश कैश से प्राप्त किया जाता है। यदि इस अनुदेश की अनदेखी की जाती है, तो प्रति | * ली गई किसी भी शाखा पर, शाखा के तुरंत बाद का अनुदेश हमेशा अनुदेश कैश से प्राप्त किया जाता है। यदि इस अनुदेश की अनदेखी की जाती है, तो प्रति आवर्तन जुर्माना एक आवर्तन प्रति शाखा अनुदेश है, जो पर्याप्त रूप से बड़ा है। | ||
शाखाओं के साथ इस प्रदर्शन की समस्या को हल करने के लिए चार योजनाएँ हैं: | शाखाओं के साथ इस प्रदर्शन की समस्या को हल करने के लिए चार योजनाएँ हैं: | ||
* अनुमान नहीं लिया गया: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा न लेने पर ही इसे कार्यान्वित करें। टहनी नहीं ली तो पाइप लाइन भरी रहती है। यदि शाखा ली जाती है, तो अनुदेश फ़्लश हो जाता है (चिन्हित किया जाता है जैसे कि यह एक NOP था), और एक | * अनुमान नहीं लिया गया: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा न लेने पर ही इसे कार्यान्वित करें। टहनी नहीं ली तो पाइप लाइन भरी रहती है। यदि शाखा ली जाती है, तो अनुदेश फ़्लश हो जाता है (चिन्हित किया जाता है जैसे कि यह एक NOP था), और एक आवर्तन का एक अनुदेश समाप्त करने का अवसर खो जाता है। | ||
* शाखा की संभावना: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा लेने पर ही इसे कार्यान्वित करें। संकलक हमेशा ऐसी शाखा पर [[शाखा विलंब स्लॉट]] को भर सकता है, और चूंकि शाखाओं को अधिक बार नहीं लिया जाता है, ऐसी शाखाओं में पिछले प्रकार की तुलना में एक छोटा IPC जुर्माना होता है। | * शाखा की संभावना: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा लेने पर ही इसे कार्यान्वित करें। संकलक हमेशा ऐसी शाखा पर [[शाखा विलंब स्लॉट]] को भर सकता है, और चूंकि शाखाओं को अधिक बार नहीं लिया जाता है, ऐसी शाखाओं में पिछले प्रकार की तुलना में एक छोटा IPC जुर्माना होता है। | ||
* शाखा विलंब स्लॉट: अनुदेश कैश से हमेशा शाखा के बाद अनुदेश प्राप्त करें, और हमेशा इसे कार्यान्वित करें, भले ही शाखा ली गई हो। शाखाओं के कुछ अंश (शायद 60%) या नहीं लिए गए (शायद 40%) के लिए आईपीसी जुर्माना लेने के बजाय, शाखा देरी स्लॉट उन शाखाओं के लिए आईपीसी जुर्माना लेते हैं जिनमें संकलक शाखा देरी स्लॉट को शेड्यूल नहीं कर सका। स्पार्क, एमआईपीएस और MC88K रुपरेखा रों ने अपने ISAs में एक शाखा विलंब स्लॉट तैयार किया। | * शाखा विलंब स्लॉट: अनुदेश कैश से हमेशा शाखा के बाद अनुदेश प्राप्त करें, और हमेशा इसे कार्यान्वित करें, भले ही शाखा ली गई हो। शाखाओं के कुछ अंश (शायद 60%) या नहीं लिए गए (शायद 40%) के लिए आईपीसी जुर्माना लेने के बजाय, शाखा देरी स्लॉट उन शाखाओं के लिए आईपीसी जुर्माना लेते हैं जिनमें संकलक शाखा देरी स्लॉट को शेड्यूल नहीं कर सका। स्पार्क, एमआईपीएस और MC88K रुपरेखा रों ने अपने ISAs में एक शाखा विलंब स्लॉट तैयार किया। | ||
* [[शाखा भविष्यवाणी]]: प्रत्येक अनुदेश को | * [[शाखा भविष्यवाणी]]: प्रत्येक अनुदेश को प्राप्ति के समानांतर में, अनुमान लगाएं कि क्या अनुदेश एक शाखा या छलांग है, और यदि ऐसा है, तो लक्ष्य का अनुमान लगाएं। एक शाखा या छलांग के बाद साइकिल पर, अनुमानित लक्ष्य पर अनुदेश प्राप्त करें। जब अनुमान गलत हो, तो गलत तरीके से प्राप्त लक्ष्य को फ्लश करें। | ||
विलंबित शाखाएँ विवादास्पद थीं, सबसे पहले, क्योंकि उनके शब्दार्थ जटिल हैं। एक विलंबित शाखा निर्दिष्ट करती है कि एक नए स्थान पर कूदना | विलंबित शाखाएँ विवादास्पद थीं, सबसे पहले, क्योंकि उनके शब्दार्थ जटिल हैं। एक विलंबित शाखा निर्दिष्ट करती है कि एक नए स्थान पर कूदना आगामी अनुदेश के ''बाद'' होता है। वह अगला अनुदेश शाखा के बाद अनुदेश कैश द्वारा अपरिहार्य रूप से लोड किया गया है। | ||
विलंबित शाखाओं की आलोचना की गई है{{By whom|date=May 2012}} ISA डिज़ाइन में खराब अल्पकालिक विकल्प के रूप में: | विलंबित शाखाओं की आलोचना की गई है{{By whom|date=May 2012}} ISA डिज़ाइन में खराब अल्पकालिक विकल्प के रूप में: | ||
* कंपाइलर्स को आमतौर पर शाखा के बाद तार्किक रूप से स्वतंत्र अनुदेश खोजने में कुछ कठिनाई होती है (शाखा के बाद के अनुदेश को विलंब स्लॉट कहा जाता है), ताकि उन्हें NOPs को विलंब स्लॉट में सम्मिलित करना पड़े। | * कंपाइलर्स को आमतौर पर शाखा के बाद तार्किक रूप से स्वतंत्र अनुदेश खोजने में कुछ कठिनाई होती है (शाखा के बाद के अनुदेश को विलंब स्लॉट कहा जाता है), ताकि उन्हें NOPs को विलंब स्लॉट में सम्मिलित करना पड़े। | ||
* [[ सुपरस्कालर ]] प्रोसेसर, जो प्रति | * [[ सुपरस्कालर ]] प्रोसेसर, जो प्रति आवर्तन कई अनुदेश प्राप्त करते हैं और शाखा भविष्यवाणी के कुछ रूप होने चाहिए, विलंबित शाखाओं से लाभ नहीं होता है। [[डीईसी अल्फा]] आईएसए ने विलंबित शाखाओं को छोड़ दिया, क्योंकि यह सुपरअदिष्ट प्रोसेसर के लिए अभिप्रेत था। | ||
* विलंबित शाखाओं की सबसे गंभीर कमी उनके द्वारा आवश्यक अतिरिक्त नियंत्रण जटिलता है। यदि देरी स्लॉट अनुदेश अपवाद लेता है, तो प्रोसेसर को उस | * विलंबित शाखाओं की सबसे गंभीर कमी उनके द्वारा आवश्यक अतिरिक्त नियंत्रण जटिलता है। यदि देरी स्लॉट अनुदेश अपवाद लेता है, तो प्रोसेसर को उस आगामी अनुदेश के बजाय शाखा पर पुनरारंभ करना होगा। अपवादों में अनिवार्य रूप से दो स्थल होते हैं, अपवाद पता और पुनरारंभ पता, और सभी मामलों में सही ढंग से दोनों के बीच उत्पन्न और अंतर करना बाद के रुपरेखा ों के लिए बग का स्रोत रहा है। | ||
== अपवाद == | == अपवाद == | ||
Line 146: | Line 145: | ||
उत्कृष्ट आरआईएससी मशीनों में से एक पर सबसे आम प्रकार का सॉफ़्टवेयर-दिखने वाला अपवाद एक ट्रांसलेशन_लुकसाइड_बफ़र#टीएलबी-मिस_हैंडलिंग है। | उत्कृष्ट आरआईएससी मशीनों में से एक पर सबसे आम प्रकार का सॉफ़्टवेयर-दिखने वाला अपवाद एक ट्रांसलेशन_लुकसाइड_बफ़र#टीएलबी-मिस_हैंडलिंग है। | ||
अपवाद शाखाओं और कूद से भिन्न होते हैं, क्योंकि उन अन्य नियंत्रण प्रवाह परिवर्तनों को डिकोड चरण में हल किया जाता है। राइटबैक चरण में अपवादों का समाधान किया जाता है। जब एक अपवाद का पता चलता है, तो निम्नलिखित अनुदेश (पहले संपंक्ति में) अमान्य के रूप में चिह्नित किए जाते हैं, और जैसे ही वे पाइप के अंत तक प्रवाहित होते हैं, उनके परिणाम खारिज कर दिए जाते हैं। प्रोग्राम काउंटर एक विशेष अपवाद हैंडलर के | अपवाद शाखाओं और कूद से भिन्न होते हैं, क्योंकि उन अन्य नियंत्रण प्रवाह परिवर्तनों को डिकोड चरण में हल किया जाता है। राइटबैक चरण में अपवादों का समाधान किया जाता है। जब एक अपवाद का पता चलता है, तो निम्नलिखित अनुदेश (पहले संपंक्ति में) अमान्य के रूप में चिह्नित किए जाते हैं, और जैसे ही वे पाइप के अंत तक प्रवाहित होते हैं, उनके परिणाम खारिज कर दिए जाते हैं। प्रोग्राम काउंटर एक विशेष अपवाद हैंडलर के स्थल पर सेट है, और अपवाद स्थान और कारण के साथ विशेष सूची लिखे गए हैं। | ||
समस्या को ठीक करने और प्रोग्राम को पुनरारंभ करने के लिए सॉफ़्टवेयर को आसान (और तेज़) बनाने के लिए, CPU को एक सटीक अपवाद लेना चाहिए। एक सटीक अपवाद का अर्थ है कि अपवाद अनुदेश तक सभी अनुदेश कार्यान्वित किए गए हैं, और अपवाद अनुदेश और बाद में सब कुछ कार्यान्वित नहीं किया गया है। | समस्या को ठीक करने और प्रोग्राम को पुनरारंभ करने के लिए सॉफ़्टवेयर को आसान (और तेज़) बनाने के लिए, CPU को एक सटीक अपवाद लेना चाहिए। एक सटीक अपवाद का अर्थ है कि अपवाद अनुदेश तक सभी अनुदेश कार्यान्वित किए गए हैं, और अपवाद अनुदेश और बाद में सब कुछ कार्यान्वित नहीं किया गया है। | ||
सटीक अपवाद लेने के लिए, CPU को प्रोग्राम क्रम में सॉफ़्टवेयर दृश्य स्थिति में परिवर्तन करना चाहिए। यह इन-ऑर्डर कमिटमेंट उत्कृष्ट आरआईएससी संपंक्ति में स्वाभाविक रूप से होता है। अधिकांश अनुदेश अपने परिणामों को राइटबैक चरण में | सटीक अपवाद लेने के लिए, CPU को प्रोग्राम क्रम में सॉफ़्टवेयर दृश्य स्थिति में परिवर्तन करना चाहिए। यह इन-ऑर्डर कमिटमेंट उत्कृष्ट आरआईएससी संपंक्ति में स्वाभाविक रूप से होता है। अधिकांश अनुदेश अपने परिणामों को राइटबैक चरण में सूची फ़ाइल में लिखते हैं, और इसलिए प्रोग्राम ऑर्डर में स्वचालित रूप से लिखना होता है। स्टोर अनुदेश , हालांकि, उनके परिणाम एक्सेस चरण में स्टोर डेटा कतार में लिखते हैं। यदि स्टोर अनुदेश एक अपवाद लेता है, तो स्टोर डेटा कतार प्रविष्टि को अमान्य कर दिया जाता है ताकि बाद में इसे कैश डेटा SRAM में न लिखा जाए। | ||
== कैश मिस हैंडलिंग == | == कैश मिस हैंडलिंग == | ||
कभी-कभी, या तो डेटा या अनुदेश कैश में आवश्यक डेटाम या अनुदेश नहीं होता है। इन मामलों में, सीपीयू को आवश्यक डेटा से कैश भरने तक संचालन को निलंबित करना चाहिए, और | कभी-कभी, या तो डेटा या अनुदेश कैश में आवश्यक डेटाम या अनुदेश नहीं होता है। इन मामलों में, सीपीयू को आवश्यक डेटा से कैश भरने तक संचालन को निलंबित करना चाहिए, और पुनः निष्पादन को पुनः से प्रारंभ करना चाहिए। आवश्यक डेटा के साथ कैश भरने की समस्या (और संभावित रूप से बेदखल कैश लाइन को मैमोरी में वापस लिखना) संपंक्ति संगठन के लिए विशिष्ट नहीं है, और यहां पर चर्चा नहीं की गई है। | ||
सस्पेंड / रिज्यूम समस्या को संभालने के लिए दो रणनीतियाँ हैं। पहला वैश्विक स्टाल सिग्नल है। यह संकेत, सक्रिय होने पर, प्रत्येक चरण की शुरुआत में फ्लिप-फ्लॉप पर घड़ी बंद करके आम तौर पर पाइप लाइन को आगे बढ़ने से अनुदेश ों को रोकता है। इस रणनीति का नुकसान यह है कि बड़ी संख्या में फ्लिप फ्लॉप हैं, इसलिए वैश्विक स्टाल सिग्नल को फैलने में लंबा | सस्पेंड / रिज्यूम समस्या को संभालने के लिए दो रणनीतियाँ हैं। पहला वैश्विक स्टाल सिग्नल है। यह संकेत, सक्रिय होने पर, प्रत्येक चरण की शुरुआत में फ्लिप-फ्लॉप पर घड़ी बंद करके आम तौर पर पाइप लाइन को आगे बढ़ने से अनुदेश ों को रोकता है। इस रणनीति का नुकसान यह है कि बड़ी संख्या में फ्लिप फ्लॉप हैं, इसलिए वैश्विक स्टाल सिग्नल को फैलने में लंबा अवधि लगता है। चूंकि मशीन को आम तौर पर उसी आवर्तन में रुकना पड़ता है जिससे यह स्टाल की आवश्यकता वाली स्थिति की पहचान करता है, स्टाल सिग्नल एक गति-सीमित महत्वपूर्ण पथ बन जाता है। | ||
निलंबन/ | निलंबन/पुनः से प्रारंभ करने के लिए एक और रणनीति अपवाद तर्क का पुन: उपयोग करना है। मशीन अपमानजनक अनुदेश पर अपवाद लेती है, और आगे के सभी अनुदेश अमान्य हो जाते हैं। जब कैश को आवश्यक डेटा से भर दिया जाता है, तो कैश मिस करने वाला अनुदेश पुनः से प्रारंभ हो जाता है। डेटा कैश मिस हैंडलिंग में तेजी प्राप्ति के लिए, अनुदेश को पुनः से प्रारंभ किया जा सकता है ताकि डेटा कैश भरने के एक आवर्तन के बाद इसका एक्सेस आवर्तन हो। | ||
== यह भी देखें == | == यह भी देखें == |
Revision as of 18:11, 3 June 2023
कंप्यूटर हार्डवेयर के इतिहास में कुछ शुरुआती कम किए गए अनुदेश सेट कंप्यूटर सेंट्रल प्रोसेसिंग यूनिट (आर आई एस सी सीपीयू) ने एक बहुत ही समान स्थापत्य समाधान का उपयोग किया, जिसे अब उत्कृष्ट आर आई एस सी संपंक्ति कहा जाता है। वे सीपीयू एमआईपीएस आर्किटेक्चर, स्पार्क, मोटोरोला मोटोरोला 88000 थे और बाद में शिक्षा के लिए आविष्कृत सांकेतिक सीपीयू डीएलएक्स।
इनमें से प्रत्येक उत्कृष्ट अदिष्ट आरआईएससी रुपरेखा प्राप्त करता है और प्रति आवर्तन एक अनुदेश कार्यान्वित करने का प्रयास करता है। प्रत्येक रुपरेखा की मुख्य सामान्य अवधारणा पांच-चरण निष्पादन अनुदेश संपंक्ति है। संचालन के अवधि प्रत्येक संपंक्ति चरण एक अवधि में एक अनुदेश पर काम करता है। इन चरणों में से प्रत्येक में क्षेत्र धारण करने के लिए फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स) का एक समूह होता है, और संयोजन तर्क जो उन फ्लिप-फ्लॉप के आउटपुट पर संचालित होता है।
उत्कृष्ट पांच चरण आरआईएससी संपंक्ति
अनुदेश प्राप्त करना
अनुदेश मेमोरी में रहते हैं जिसे पढ़ने में एक आवर्तन लगता है। यह मैमोरी एसआरएएम या एक अनुदेश कैचे (कंप्यूटिंग) को समर्पित हो सकती है। विलंबता शब्द का प्रयोग कंप्यूटर विज्ञान में प्रायः किया जाता है और इसका अर्थ उस अवधि से है। जब कोई संचालन प्रारंभ होता है, एवं जब तक कि यह पूरा नहीं हो जाता। इस प्रकार अनुदेश प्राप्ति में एक घड़ी आवर्तन की विलंबता होती है (यदि एकल-आवर्तन एसआरएएम का उपयोग किया जाता है या यदि अनुदेश कैचे में था)। इस प्रकार अनुदेश प्राप्ति के चरण के अवधि मे अनुदेश मैमोरी से 32-बिट अनुदेश प्राप्त किया जाता है।
प्रोग्राम गणक या पीसी एक सूची है जो उस स्थल को रखता है एवं अनुदेश मैमोरी को प्रस्तुत करता है। एक आवर्तन के प्रारंभ में अनुदेश मैमोरी के स्थल को प्रस्तुत करता है। पुनः आवर्तन की अवधि मे अनुदेश मैमोरी से अनुदेश पढ़ा जाता है, और साथ ही आगामी पीसी को निर्धारित करने के लिए गणना की जाती है। आगामी पीसी की गणना पीसी को 4 से वृद्धि की जाती है, और यह चयन करके कि आगामी पीसी के रूप में लेना है या आगामी पीसी के रूप में उपखंड/सम्मलित गणना का परिणाम लेना है। ध्यान दें कि उत्कृष्ट आरआईएससी में सभी अनुदेशों की लंबाई समान होती है। (यह एक कारण है जो आरआईएससी को सीआईएससी से पृथक करती है [1]). मूल आरआईएससी डिज़ाइन में, एक अनुदेश का आकार 4 बाइट्स होता है, इसलिए अनुदेश के स्थल में हमेशा 4 जोड़ें, लेकिन किसी शाखा, छलांग या अपवाद के मामले में पीसी + 4 का उपयोग न करें (विलंबित शाखाएं देखें, नीचे ). (ध्यान दें कि कुछ आधुनिक मशीनें आगामी अनुदेश स्थल का अनुमान लगाने के लिए अधिक जटिल एल्गोरिदम (शाखा भविष्यवाणी और शाखा लक्ष्य भविष्यवक्ता) का उपयोग करती हैं।)
अनुदेश डिकोड
एक और कारण जो पहली आर आई एस सी मशीनों को पहले की CISC मशीनों से पृथक करती है, वह यह है कि आर आई एस सी का कोई माइक्रोकोड नहीं है।[2] CISC माइक्रो-कोडेड अनुदेश ों के मामले में, एक बार अनुदेश कैश से प्राप्त करने के बाद, अनुदेश बिट्स को संपंक्ति के नीचे स्थानांतरित कर दिया जाता है, जहां प्रत्येक संपंक्ति चरण में सरल संयोजन तर्क अनुदेश बिट्स से सीधे डेटापथ के लिए नियंत्रण संकेत उत्पन्न करता है। उन CISC रुपरेखा ों में, पारंपरिक रूप से डिकोड चरण कहे जाने वाले चरण में बहुत कम डिकोडिंग किया जाता है। डिकोडिंग की इस कमी का एक परिणाम यह है कि अनुदेश क्या करता है यह निर्दिष्ट करने के लिए अधिक अनुदेश बिट्स का उपयोग किया जाना है। सूची इंडेक्स जैसी कारण ों के लिए यह कम बिट्स छोड़ता है।
सभी एमआईपीएस, स्पार्क और डीएलएक्स अनुदेश ों में अधिकतम दो सूची इनपुट होते हैं। डिकोड चरण के अवधि , इन दो सूचीों के इंडेक्स को अनुदेश के भीतर पहचाना जाता है, और इंडेक्स को सूची मेमोरी में स्थल के रूप में प्रस्तुत किया जाता है। इस प्रकार नामित दो सूचीों को सूची फ़ाइल से पढ़ा जाता है। एमआईपीएस डिज़ाइन में, सूची फ़ाइल में 32 प्रविष्टियाँ थीं।
उसी अवधि सूची फ़ाइल पढ़ी जाती है, इस चरण में अनुदेश जारी करने का तर्क यह निर्धारित करता है कि क्या संपंक्ति इस चरण में अनुदेश को कार्यान्वित करने के लिए तैयार है। यदि नहीं, तो समस्या तर्क अनुदेश फ़ेच चरण और डिकोड चरण दोनों को रोक देता है। स्टॉल आवर्तन पर, इनपुट फ्लिप फ्लॉप नए बिट्स को स्वीकार नहीं करते हैं, इस प्रकार उस आवर्तन के अवधि कोई नई गणना नहीं होती है।
यदि डिकोड किया गया अनुदेश एक शाखा या छलांग है, तो शाखा या छलांग का लक्ष्य पता सूची फ़ाइल को पढ़ने के साथ-साथ गणना की जाती है। शाखा स्थिति की गणना निम्नलिखित आवर्तन में की जाती है (सूची फ़ाइल पढ़ने के बाद), और यदि शाखा ली जाती है या यदि अनुदेश एक छलांग है, तो पहले चरण में पीसी को बढ़े हुए पीसी के बजाय शाखा लक्ष्य सौंपा जाता है गणना की गई है। कुछ आर्किटेक्चर ने निष्पादन चरण में अंकगणितीय तर्क इकाई (एएलयू) का उपयोग किया, थोड़ा कम अनुदेश थ्रूपुट की कीमत पर।
डीकोड चरण बहुत सारे हार्डवेयर के साथ समाप्त हुआ: एमआइपी में दो सूचीों के बराबर होने पर शाखाओं में बंटने की संभावना है, इसलिए एक 32-बिट-चौड़ा और पेड़ सूची फ़ाइल पढ़ने के बाद श्रृंखला में चलता है, इसके माध्यम से बहुत लंबा महत्वपूर्ण पथ बनाता है चरण (जिसका अर्थ है प्रति सेकंड कम आवर्तन)। इसके अलावा, शाखा लक्ष्य संगणना के लिए आम तौर पर 16 बिट ऐड और 14 बिट इंक्रीमेंटर की आवश्यकता होती है। डिकोड चरण में शाखा को हल करने से यह संभव हो गया है कि केवल एक-आवर्तन शाखा गलत अनुमान लगा सकती है। चूँकि शाखाएँ बहुत बार ली जाती थीं (और इस प्रकार गलत भविष्यवाणी की जाती थी), इस दंड को कम रखना बहुत महत्वपूर्ण था।
कार्यान्वित करें
निष्पादन चरण वह जगह है जहां वास्तविक गणना होती है। आमतौर पर इस चरण में एक ALU होता है, और थोड़ा शिफ्टर भी होता है। इसमें एक बहु आवर्तन गुणक और विभक्त भी शामिल हो सकता है।
ALU बूलियन संचालन करने के लिए जिम्मेदार है (और, या, नहीं, नंद, न ही, xor, xnor) और पूर्णांक जोड़ और घटाव करने के लिए भी। परिणाम के अलावा, ALU आमतौर पर स्थिति बिट्स प्रदान करता है जैसे परिणाम 0 था या नहीं, या यदि कोई अतिप्रवाह हुआ।
बिट शिफ्टर शिफ्ट और रोटेशन के लिए जिम्मेदार होता है।
संचालन के प्रकार के अनुसार इन सरल आरआईएससी मशीनों पर अनुदेश ों को तीन विलंबता वर्गों में विभाजित किया जा सकता है:
- सूची-सूची संचालन (एकल-आवर्तन विलंबता): जोड़ें, घटाएं, तुलना करें और तार्किक संचालन करें। निष्पादन चरण के अवधि , दो तर्क एक साधारण ALU को खिलाए गए थे, जो निष्पादन चरण के अंत तक परिणाम उत्पन्न करता था।
- मैमोरी संदर्भ (दो-आवर्तन विलंबता)। मैमोरी से सभी भार। निष्पादन चरण के अवधि , आवर्तन के अंत तक एक आभासी पता बनाने के लिए ALU ने दो तर्क (एक सूची और एक स्थिर ऑफसेट) जोड़े।
- प्रति अनुदेश आवर्तन | बहु-आवर्तन अनुदेश (कई आवर्तन विलंबता)। पूर्णांक गुणा और भाग और सभी तैरनेवाला स्थल संचालन । निष्पादन चरण के अवधि , इन परिचालनों के संचालन को बहु-आवर्तन गुणा/विभाजित इकाई को खिलाया गया था। शेष संपंक्ति निष्पादन जारी रखने के लिए स्वतंत्र थी जबकि गुणा/विभाजन इकाई ने अपना काम किया था। राइटबैक चरण को जटिल बनाने और तर्क जारी करने से बचने के लिए, मल्टीसाइकिल इंस्ट्रक्शन ने अपने परिणामों को सूचीों के एक पृथक सेट पर लिखा।
मेमोरी एक्सेस
यदि डेटा मेमोरी को एक्सेस करने की आवश्यकता है, तो यह इस चरण में किया जाता है।
इस चरण के अवधि , एकल आवर्तन विलंबता अनुदेश केवल उनके परिणामों को आगामी चरण में अग्रेषित करते हैं। यह अग्रेषण सुनिश्चित करता है कि एक और दो आवर्तन अनुदेश हमेशा अपने परिणाम संपंक्ति के एक ही चरण में लिखते हैं ताकि सूची फ़ाइल में केवल एक लेखन पोर्ट का उपयोग किया जा सके, और यह हमेशा उपलब्ध हो।
सीधे मैप किए गए और वस्तुतः टैग किए गए डेटा कैशिंग के लिए, सीपीयू कैश के सबसे सरल, दो स्टेटिक रैम का उपयोग किया जाता है, एक स्टोरिंग डेटा और दूसरा स्टोरिंग टैग।
राइटबैक
इस चरण के अवधि , एकल आवर्तन और दो आवर्तन अनुदेश दोनों अपने परिणाम सूची फ़ाइल में लिखते हैं। ध्यान दें कि एक ही अवधि में दो पृथक -पृथक चरण सूची फ़ाइल तक पहुंच रहे हैं - डिकोड चरण दो स्रोत सूचीों को पढ़ रहा है, उसी अवधि राइटबैक चरण पिछले अनुदेश के गंतव्य सूची को लिख रहा है। वास्तविक सिलिकॉन पर, यह एक खतरा हो सकता है (खतरों के बारे में अधिक जानकारी के लिए नीचे देखें)। ऐसा इसलिए है क्योंकि डिकोड में पढ़े जाने वाले स्रोत सूचीों में से एक वही हो सकता है, जैसा कि गंतव्य सूची राइटबैक में लिखा जा रहा है। जब ऐसा होता है, तो सूची फाइल में एक ही मेमोरी सेल को एक ही अवधि में पढ़ा और लिखा जा रहा है। सिलिकॉन पर, एक ही अवधि में पढ़ने और लिखने पर मेमोरी सेल के कई कार्यान्वयन ठीक से काम नहीं करेंगे।
खतरे
हेनेसी और पैटरसन ने हज़ार्ड (कंप्यूटर आर्किटेक्चर) शब्द को उन स्थितियों के लिए गढ़ा जहां एक संपंक्ति में अनुदेश गलत उत्तर देंगे।
संरचनात्मक खतरे
संरचनात्मक खतरे तब होते हैं जब दो अनुदेश एक ही अवधि में समान संसाधनों का उपयोग करने का प्रयास कर सकते हैं। उत्कृष्ट आरआईएससी संपंक्ति ों ने हार्डवेयर की नकल करके इन खतरों से बचा लिया। विशेष रूप से, शाखा अनुदेश शाखा के लक्षित स्थल की गणना करने के लिए ALU का उपयोग कर सकते थे। यदि उस उद्देश्य के लिए डीकोड चरण में एएलयू का उपयोग किया गया था, तो शाखा द्वारा पालन किए जाने वाले एएलयू अनुदेश ने दोनों अनुदेश ों को एक साथ एएलयू का उपयोग करने का प्रयास देखा होगा। डिकोड चरण में एक विशेष शाखा लक्ष्य योजक को डिज़ाइन करके इस विरोध को हल करना आसान है।
डेटा खतरे
डेटा के खतरे तब होते हैं जब एक अनुदेश , अंधाधुंध रूप से निर्धारित किया जाता है, डेटा को सूची फ़ाइल में उपलब्ध होने से पहले डेटा का उपयोग करने का प्रयास करेगा।
उत्कृष्ट आरआईएससी संपंक्ति में, डेटा खतरों को दो तरीकों से टाला जाता है:
उपाय A. बाइपास करना
बायपासिंग को ऑपरेंड अग्रेषण के रूप में भी जाना जाता है।
मान लीजिए कि सीपीयू निम्नलिखित कोड का निष्पादन कर रहा है:
SUB r3,r4 -> r10 ; Writes r3 - r4 to r10
AND r10,r3 -> r11 ; Writes r10 & r3 to r11
अनुदेश प्राप्ति और डिकोड करने के चरण पहले के बाद दूसरा अनुदेश एक आवर्तन भेजते हैं। वे इस आरेख में दिखाए अनुसार संपंक्ति में प्रवाहित होते हैं:
एक सहज संपंक्ति में, खतरे पर विचार किए बिना, डेटा जोखिम निम्नानुसार बढ़ता है:
आवर्तन 3 में, SUB
अनुदेश के लिए नए मान की गणना करता है r10
. इसी आवर्तन में, AND
संचालन डीकोड किया गया है, और का मूल्य r10
सूची फ़ाइल से लाया जाता है। हालांकि SUB
अनुदेश ने अभी तक इसका परिणाम नहीं लिखा है r10
. इसका राइट-बैक सामान्य रूप से आवर्तन 5 (हरा बॉक्स) में होता है। इसलिए, मान सूची फ़ाइल से पढ़ा जाता है और ALU को दिया जाता है (निष्पादन चरण में AND
संचालन , लाल बॉक्स) गलत है।
इसके बजाय, हमें उस डेटा को पास करना होगा जिसकी गणना की गई थी SUB
के निष्पादन चरण (यानी आरेख में लाल वृत्त के लिए) पर वापस जाएं AND
संचालन से पहले यह सामान्य रूप से लिखा-वापस होता है। इस समस्या का समाधान बायपास मल्टीप्लेक्सर्स की एक जोड़ी है। ये मल्टीप्लेक्सर्स डिकोड चरण के अंत में बैठते हैं, और उनके फ्लॉप आउटपुट ALU के इनपुट होते हैं। प्रत्येक मल्टीप्लेक्सर के बीच चयन करता है:
- एक सूची फाइल रीड पोर्ट (यानी डिकोड स्टेज का आउटपुट, जैसा कि भोली संपंक्ति में है): red तीर
- ALU की वर्तमान सूची संपंक्ति (एक चरण से बायपास करने के लिए): blue तीर
- एक्सेस चरण की वर्तमान सूची संपंक्ति (जो या तो एक लोडेड वैल्यू है या एक अग्रेषित ALU परिणाम है, यह दो चरणों को बायपास करता है): purple तीर। ध्यान दें कि इसके लिए डेटा को एक आवर्तन द्वारा अवधि में पीछे की ओर भेजने की आवश्यकता होती है। यदि ऐसा होता है, तो इसे रोकने के लिए एक बुलबुला (कंप्यूटिंग) डाला जाना चाहिए
AND
डेटा तैयार होने तक संचालन ।
डिकोड चरण तर्क डिकोड चरण में अनुदेश द्वारा पढ़े गए सूचीों के लिए संपंक्ति के निष्पादन और पहुंच चरणों में अनुदेश ों द्वारा लिखे गए सूचीों की तुलना करता है, और मल्टीप्लेक्सर्स को सबसे हाल के डेटा का चयन करने का कारण बनता है। ये बाईपास मल्टीप्लेक्सर्स संपंक्ति के लिए एएलयू, मल्टीप्लेक्सर और फ्लिप-फ्लॉप की विलंबता के साथ सरल अनुदेश ों को कार्यान्वित करना संभव बनाते हैं। मल्टीप्लेक्सर्स के बिना, सूची फ़ाइल को लिखने और पुनः पढ़ने की विलंबता को इन अनुदेश ों की विलंबता में शामिल करना होगा।
ध्यान दें कि डेटा को केवल अवधि पर आगे बढ़ाया जा सकता है - यदि डेटा को अभी तक संसाधित नहीं किया गया है तो डेटा को पहले चरण में वापस बायपास नहीं किया जा सकता है। उपरोक्त मामले में, डेटा को आगे बढ़ाया जाता है (उस अवधि तक AND
एएलयू में सूची के लिए तैयार है SUB
पहले ही इसकी गणना कर चुका है)।
समाधान बी। संपंक्ति इंटरलॉक
हालाँकि, निम्नलिखित अनुदेश ों पर विचार करें:
LD adr -> r10
AND r10,r3 -> r11
डेटा स्थल से पढ़ा adr
के मेमोरी एक्सेस चरण के बाद तक डेटा कैश में मौजूद नहीं है LD
अनुदेश । इस अवधि तक, AND
अनुदेश पहले से ही ALU के माध्यम से है। इसे हल करने के लिए एएलयू में इनपुट के लिए मैमोरी से डेटा को अवधि पर पीछे की ओर पारित करने की आवश्यकता होगी। ऐसा नहीं हो सकता। समाधान में देरी करना है AND
एक आवर्तन द्वारा अनुदेश । डिकोड चरण में डेटा खतरे का पता लगाया जाता है, और प्राप्ति और डिकोड करने के चरण ठप हो जाते हैं - उन्हें अपने इनपुट को फ़्लॉप करने से रोका जाता है और इसलिए एक आवर्तन के लिए उसी स्थिति में रहते हैं। निष्पादन, पहुंच और राइट-बैक चरणों के डाउनस्ट्रीम में एक अतिरिक्त नो- संचालन अनुदेश (एनओपी) डाला गया है LD
और AND
अनुदेश ।
इस एनओपी को संपंक्ति बबल (कंप्यूटिंग) कहा जाता है क्योंकि यह संपंक्ति में तैरता है, पानी के पाइप में हवा के बुलबुले की तरह, संसाधनों पर कब्जा कर रहा है लेकिन उपयोगी परिणाम नहीं दे रहा है। डेटा खतरे का पता लगाने और खतरे को दूर करने तक संपंक्ति को रोकने के लिए हार्डवेयर को ' संपंक्ति इंटरलॉक' कहा जाता है।
Bypassing backwards in time | Problem resolved using a bubble |
हालाँकि, किसी भी डेटा अग्रेषण के साथ एक संपंक्ति इंटरलॉक का उपयोग नहीं किया जाना चाहिए। का पहला उदाहरण SUB
के बाद AND
और दूसरा उदाहरण LD
के बाद AND
राइट-बैक प्राप्त होने तक पहले चरण को तीन आवर्तनों तक रोककर हल किया जा सकता है, और सूची फ़ाइल में डेटा सही है, जिससे सही सूची मूल्य प्राप्त किया जा सकता है AND
डिकोड चरण। यह काफी प्रदर्शन हिट का कारण बनता है, क्योंकि प्रोसेसर कुछ भी संसाधित करने में बहुत अवधि व्यतीत करता है, लेकिन घड़ी की गति बढ़ाई जा सकती है क्योंकि प्रतीक्षा करने के लिए कम अग्रेषण तर्क है।
जब प्रोग्राम का मशीन कोड कंपाइलर द्वारा लिखा जाता है तो इस डेटा खतरे का आसानी से पता लगाया जा सकता है। स्टैनफोर्ड एमआईपीएस मशीन इस मामले में एनओपी अनुदेश ों को जोड़ने के लिए संकलक पर निर्भर थी, बजाय इसके कि पहले दो संपंक्ति चरणों का पता लगाने के लिए सर्किट्री का पता लगाया जाए और (अधिक करबद्ध रूप से) स्टाल किया जाए। इसलिए नाम एमआईपीएस: इंटरलॉक्ड संपंक्ति चरणों के बिना माइक्रोप्रोसेसर। यह पता चला कि संकलक द्वारा जोड़े गए अतिरिक्त एनओपी अनुदेश ों ने प्रोग्राम बायनेरिज़ को पर्याप्त रूप से विस्तारित किया कि अनुदेश कैश हिट दर कम हो गई। स्टाल हार्डवेयर, हालांकि महंगा था, अनुदेश कैश हिट दर में सुधार करने के लिए बाद के रुपरेखा ों में वापस रखा गया था, जिस बिंदु पर संक्षिप्त नाम अब समझ में नहीं आता है।
खतरों को नियंत्रित करें
नियंत्रण के खतरे सशर्त और बिना शर्त शाखाओं के कारण होते हैं। उत्कृष्ट आरआईएससी संपंक्ति डिकोड चरण में शाखाओं को हल करती है, जिसका अर्थ है कि शाखा संकल्प पुनरावृत्ति दो आवर्तन लंबी है। तीन निहितार्थ हैं:
- ब्रांच रिजॉल्यूशन रिकरेंस काफी सर्किट्री से होकर गुजरता है: इंस्ट्रक्शन कैश रीड, सूची फाइल रीड, ब्रांच कंडीशन कंप्यूट (जिसमें एमआईपीएस CPU पर 32-बिट तुलना शामिल है), और अगला इंस्ट्रक्शन एड्रेस मल्टीप्लेक्सर।
- क्योंकि शाखा और कूद लक्ष्यों की गणना सूची पढ़ने के समानांतर में की जाती है, आरआईएससी आईएसए के पास आमतौर पर उस शाखा को सूची + ऑफसेट स्थल पर अनुदेश नहीं होते हैं। सूची करने के लिए कूदो समर्थित है।
- ली गई किसी भी शाखा पर, शाखा के तुरंत बाद का अनुदेश हमेशा अनुदेश कैश से प्राप्त किया जाता है। यदि इस अनुदेश की अनदेखी की जाती है, तो प्रति आवर्तन जुर्माना एक आवर्तन प्रति शाखा अनुदेश है, जो पर्याप्त रूप से बड़ा है।
शाखाओं के साथ इस प्रदर्शन की समस्या को हल करने के लिए चार योजनाएँ हैं:
- अनुमान नहीं लिया गया: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा न लेने पर ही इसे कार्यान्वित करें। टहनी नहीं ली तो पाइप लाइन भरी रहती है। यदि शाखा ली जाती है, तो अनुदेश फ़्लश हो जाता है (चिन्हित किया जाता है जैसे कि यह एक NOP था), और एक आवर्तन का एक अनुदेश समाप्त करने का अवसर खो जाता है।
- शाखा की संभावना: अनुदेश कैश से शाखा के बाद हमेशा अनुदेश प्राप्त करें, लेकिन शाखा लेने पर ही इसे कार्यान्वित करें। संकलक हमेशा ऐसी शाखा पर शाखा विलंब स्लॉट को भर सकता है, और चूंकि शाखाओं को अधिक बार नहीं लिया जाता है, ऐसी शाखाओं में पिछले प्रकार की तुलना में एक छोटा IPC जुर्माना होता है।
- शाखा विलंब स्लॉट: अनुदेश कैश से हमेशा शाखा के बाद अनुदेश प्राप्त करें, और हमेशा इसे कार्यान्वित करें, भले ही शाखा ली गई हो। शाखाओं के कुछ अंश (शायद 60%) या नहीं लिए गए (शायद 40%) के लिए आईपीसी जुर्माना लेने के बजाय, शाखा देरी स्लॉट उन शाखाओं के लिए आईपीसी जुर्माना लेते हैं जिनमें संकलक शाखा देरी स्लॉट को शेड्यूल नहीं कर सका। स्पार्क, एमआईपीएस और MC88K रुपरेखा रों ने अपने ISAs में एक शाखा विलंब स्लॉट तैयार किया।
- शाखा भविष्यवाणी: प्रत्येक अनुदेश को प्राप्ति के समानांतर में, अनुमान लगाएं कि क्या अनुदेश एक शाखा या छलांग है, और यदि ऐसा है, तो लक्ष्य का अनुमान लगाएं। एक शाखा या छलांग के बाद साइकिल पर, अनुमानित लक्ष्य पर अनुदेश प्राप्त करें। जब अनुमान गलत हो, तो गलत तरीके से प्राप्त लक्ष्य को फ्लश करें।
विलंबित शाखाएँ विवादास्पद थीं, सबसे पहले, क्योंकि उनके शब्दार्थ जटिल हैं। एक विलंबित शाखा निर्दिष्ट करती है कि एक नए स्थान पर कूदना आगामी अनुदेश के बाद होता है। वह अगला अनुदेश शाखा के बाद अनुदेश कैश द्वारा अपरिहार्य रूप से लोड किया गया है।
विलंबित शाखाओं की आलोचना की गई है[by whom?] ISA डिज़ाइन में खराब अल्पकालिक विकल्प के रूप में:
- कंपाइलर्स को आमतौर पर शाखा के बाद तार्किक रूप से स्वतंत्र अनुदेश खोजने में कुछ कठिनाई होती है (शाखा के बाद के अनुदेश को विलंब स्लॉट कहा जाता है), ताकि उन्हें NOPs को विलंब स्लॉट में सम्मिलित करना पड़े।
- सुपरस्कालर प्रोसेसर, जो प्रति आवर्तन कई अनुदेश प्राप्त करते हैं और शाखा भविष्यवाणी के कुछ रूप होने चाहिए, विलंबित शाखाओं से लाभ नहीं होता है। डीईसी अल्फा आईएसए ने विलंबित शाखाओं को छोड़ दिया, क्योंकि यह सुपरअदिष्ट प्रोसेसर के लिए अभिप्रेत था।
- विलंबित शाखाओं की सबसे गंभीर कमी उनके द्वारा आवश्यक अतिरिक्त नियंत्रण जटिलता है। यदि देरी स्लॉट अनुदेश अपवाद लेता है, तो प्रोसेसर को उस आगामी अनुदेश के बजाय शाखा पर पुनरारंभ करना होगा। अपवादों में अनिवार्य रूप से दो स्थल होते हैं, अपवाद पता और पुनरारंभ पता, और सभी मामलों में सही ढंग से दोनों के बीच उत्पन्न और अंतर करना बाद के रुपरेखा ों के लिए बग का स्रोत रहा है।
अपवाद
मान लीजिए कि 32-बिट आरआईएससी एक एडीडी अनुदेश को संसाधित करता है जो दो बड़ी संख्याएं जोड़ता है, और परिणाम 32 बिट्स में फिट नहीं होता है।
अधिकांश आर्किटेक्चर द्वारा प्रदान किया जाने वाला सबसे सरल समाधान रैपिंग अंकगणित है। अधिकतम संभव एन्कोडेड मान से अधिक संख्या में उनके सबसे महत्वपूर्ण बिट्स फिट होने तक काट दिए जाते हैं। सामान्य पूर्णांक संख्या प्रणाली में, 3000000000+3000000000=6000000000। अहस्ताक्षरित 32 बिट रैपिंग अंकगणित के साथ, 3000000000+3000000000=1705032704 (6000000000 मॉड 2^32)। यह बहुत उपयोगी नहीं लग सकता है। अंकगणित को लपेटने का सबसे बड़ा लाभ यह है कि प्रत्येक संक्रिया का एक सुपरिभाषित परिणाम होता है।
लेकिन प्रोग्रामर, विशेष रूप से यदि बड़ी संख्या का समर्थन करने वाली भाषा में प्रोग्रामिंग (जैसे लिस्प (प्रोग्रामिंग भाषा) या स्कीम (प्रोग्रामिंग भाषा)), हो सकता है कि अंकगणित को लपेटना न चाहें। कुछ आर्किटेक्चर (जैसे एमआईपीएस), विशेष जोड़ संचालन को परिभाषित करते हैं जो परिणाम को लपेटने के बजाय अतिप्रवाह पर विशेष स्थानों पर शाखा करते हैं। समस्या को ठीक करने के लिए लक्ष्य स्थान पर सॉफ़्टवेयर जिम्मेदार है। इस विशेष शाखा को अपवाद कहा जाता है। अपवाद नियमित शाखाओं से भिन्न होते हैं जिसमें लक्ष्य पता अनुदेश द्वारा ही निर्दिष्ट नहीं किया जाता है, और शाखा का निर्णय अनुदेश के परिणाम पर निर्भर होता है।
उत्कृष्ट आरआईएससी मशीनों में से एक पर सबसे आम प्रकार का सॉफ़्टवेयर-दिखने वाला अपवाद एक ट्रांसलेशन_लुकसाइड_बफ़र#टीएलबी-मिस_हैंडलिंग है।
अपवाद शाखाओं और कूद से भिन्न होते हैं, क्योंकि उन अन्य नियंत्रण प्रवाह परिवर्तनों को डिकोड चरण में हल किया जाता है। राइटबैक चरण में अपवादों का समाधान किया जाता है। जब एक अपवाद का पता चलता है, तो निम्नलिखित अनुदेश (पहले संपंक्ति में) अमान्य के रूप में चिह्नित किए जाते हैं, और जैसे ही वे पाइप के अंत तक प्रवाहित होते हैं, उनके परिणाम खारिज कर दिए जाते हैं। प्रोग्राम काउंटर एक विशेष अपवाद हैंडलर के स्थल पर सेट है, और अपवाद स्थान और कारण के साथ विशेष सूची लिखे गए हैं।
समस्या को ठीक करने और प्रोग्राम को पुनरारंभ करने के लिए सॉफ़्टवेयर को आसान (और तेज़) बनाने के लिए, CPU को एक सटीक अपवाद लेना चाहिए। एक सटीक अपवाद का अर्थ है कि अपवाद अनुदेश तक सभी अनुदेश कार्यान्वित किए गए हैं, और अपवाद अनुदेश और बाद में सब कुछ कार्यान्वित नहीं किया गया है।
सटीक अपवाद लेने के लिए, CPU को प्रोग्राम क्रम में सॉफ़्टवेयर दृश्य स्थिति में परिवर्तन करना चाहिए। यह इन-ऑर्डर कमिटमेंट उत्कृष्ट आरआईएससी संपंक्ति में स्वाभाविक रूप से होता है। अधिकांश अनुदेश अपने परिणामों को राइटबैक चरण में सूची फ़ाइल में लिखते हैं, और इसलिए प्रोग्राम ऑर्डर में स्वचालित रूप से लिखना होता है। स्टोर अनुदेश , हालांकि, उनके परिणाम एक्सेस चरण में स्टोर डेटा कतार में लिखते हैं। यदि स्टोर अनुदेश एक अपवाद लेता है, तो स्टोर डेटा कतार प्रविष्टि को अमान्य कर दिया जाता है ताकि बाद में इसे कैश डेटा SRAM में न लिखा जाए।
कैश मिस हैंडलिंग
कभी-कभी, या तो डेटा या अनुदेश कैश में आवश्यक डेटाम या अनुदेश नहीं होता है। इन मामलों में, सीपीयू को आवश्यक डेटा से कैश भरने तक संचालन को निलंबित करना चाहिए, और पुनः निष्पादन को पुनः से प्रारंभ करना चाहिए। आवश्यक डेटा के साथ कैश भरने की समस्या (और संभावित रूप से बेदखल कैश लाइन को मैमोरी में वापस लिखना) संपंक्ति संगठन के लिए विशिष्ट नहीं है, और यहां पर चर्चा नहीं की गई है।
सस्पेंड / रिज्यूम समस्या को संभालने के लिए दो रणनीतियाँ हैं। पहला वैश्विक स्टाल सिग्नल है। यह संकेत, सक्रिय होने पर, प्रत्येक चरण की शुरुआत में फ्लिप-फ्लॉप पर घड़ी बंद करके आम तौर पर पाइप लाइन को आगे बढ़ने से अनुदेश ों को रोकता है। इस रणनीति का नुकसान यह है कि बड़ी संख्या में फ्लिप फ्लॉप हैं, इसलिए वैश्विक स्टाल सिग्नल को फैलने में लंबा अवधि लगता है। चूंकि मशीन को आम तौर पर उसी आवर्तन में रुकना पड़ता है जिससे यह स्टाल की आवश्यकता वाली स्थिति की पहचान करता है, स्टाल सिग्नल एक गति-सीमित महत्वपूर्ण पथ बन जाता है।
निलंबन/पुनः से प्रारंभ करने के लिए एक और रणनीति अपवाद तर्क का पुन: उपयोग करना है। मशीन अपमानजनक अनुदेश पर अपवाद लेती है, और आगे के सभी अनुदेश अमान्य हो जाते हैं। जब कैश को आवश्यक डेटा से भर दिया जाता है, तो कैश मिस करने वाला अनुदेश पुनः से प्रारंभ हो जाता है। डेटा कैश मिस हैंडलिंग में तेजी प्राप्ति के लिए, अनुदेश को पुनः से प्रारंभ किया जा सकता है ताकि डेटा कैश भरने के एक आवर्तन के बाद इसका एक्सेस आवर्तन हो।
यह भी देखें
संदर्भ
- Hennessy, John L.; Patterson, David A. (2011). Computer Architecture, A Quantitative Approach (5th ed.). Morgan Kaufmann. ISBN 978-0123838728.
- ↑ Patterson, David (12 May 1981). "RISC I: A Reduced Instruction Set VLSI Computer". Isca '81. pp. 443–457.
- ↑ Patterson, David (12 May 1981). "RISC I: A Reduced Instruction Set VLSI Computer". Isca '81. pp. 443–457.