18 / 24 · अवधारणा
निर्भरताएँ, संसाधन हैज़र्ड और फ़ॉरवर्डिंग
ऑपरेशन को पिछले परिणाम की जरूरत हो तो स्टॉल और फ़ॉरवर्डिंग तुलना करें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
एक साथ चलने के लिए क्रम बनाए रखना पर्याप्त नहीं
स्वतंत्र स्ट्रीम गणनाएँ पहले के परिणाम नहीं पढ़तीं, इसलिए लेनदेन सुरक्षित रूप से एक साथ चल सकते हैं। इसके विपरीत रजिस्टर फ़ाइल ऑपरेटर को पिछले ऑपरेशन का परिणाम चाहिए हो सकता है। पुराना लेखन उपलब्ध होने से पहले रजिस्टर पढ़ना read-after-write डेटा हैज़र्ड बनाता है। अंकगणित सही हो सकता है, लेकिन उसका ऑपरैंड बहुत जल्दी लिया गया था।
R1=4 से शुरू करें। I0, R1←R1+3 और I1, R2←R1×2 करे। इस उदाहरण में I0 किनारा 0 पर ऑपरैंड 4 कैप्चर करता है, अगले चक्र में 7 निकालता है और किनारा 1 पर R1 लिखता है। किनारा 1 पर R1 नमूना लेने वाला I1 पुराना 4 देख सकता है और R2=8 बना सकता है। क्रमिक निष्पादन में R2=14 चाहिए। एक ही किनारे पर रजिस्टर फ़ाइल के पढ़ने/लिखने का व्यवहार स्पष्ट तय करें।
| उपाय | I1 को मिला ऑपरैंड | आवश्यकता |
|---|---|---|
| पुराना R1 पढ़ें | 4 | यहाँ गलत |
| किनारा 2 तक स्टॉल | 7 | ऑपरेशन और साथ के फ़ील्ड सुरक्षित रखें |
| निष्पादन परिणाम फ़ॉरवर्ड करें | किनारा 1 से ठीक पहले 7 | परिणाम उपलब्ध हो और पथ समय पूरा करे |
फ़ॉरवर्डिंग गणना परिणाम को वास्तुकीय भंडारण तक पहुँचने से पहले चुनती है। गंतव्य संख्याएँ मिलना पर्याप्त नहीं: उत्पादक वैध हो, सच में रजिस्टर लिखता हो और उसका परिणाम तैयार हो। कई उत्पादक मिलें तो सबसे नया पुराना ऑपरेशन चुनें। बुलबुले या फ़्लश किए ऑपरेशन से कभी फ़ॉरवर्ड न करें।
जिस लोड का उत्तर नहीं आया, उसे अनुपलब्ध डेटा फ़ॉरवर्ड करके नहीं सुधार सकते। उपभोक्ता स्टॉल करें और ऑपकोड, स्रोत पहचान तथा टैग बनाए रखें। तय करें कि अन्य स्वतंत्र चरण जारी रह सकते हैं या नहीं।
दो चरणों को एक ही समय एक मेमोरी पोर्ट चाहिए तो संरचनात्मक हैज़र्ड होता है। डेटा निर्भरता न होने पर भी मध्यस्थता या अतिरिक्त संसाधन चाहिए। ब्रांच नियंत्रण हैज़र्ड लाती है, जिसमें गलत पथ का काम रद्द करना पड़ता है। विश्लेषण करें कि हर ऑपरेशन किसका इंतजार करता है और कौन सी स्थिति रखनी है। हमारी समापन परियोजना स्वतंत्र स्ट्रीम रहती है; उसे पास करना CPU निर्भरता संभालने का प्रमाण नहीं है।
खुद आज़माएँ
R1=4 है, I0 तीन जोड़ता है और I1 परिणाम दुगुना करता है। पुराने भंडारण और सही फ़ॉरवर्डिंग से I1 के परिणाम तुलना करें। I0 ऐसा लोड हो जिसका डेटा उपलब्ध नहीं है तो क्या होगा?
व्याख्या पढ़ें
पुराना 4 पढ़ने से 8; 7 फ़ॉरवर्ड करने से 14 मिलता है। अनुपलब्ध लोड परिणाम में उपभोक्ता स्टॉल होना चाहिए और उसका ऑपरेशन तथा टैग सुरक्षित रहना चाहिए। गंतव्य मिलना अधूरे डेटा की फ़ॉरवर्डिंग को उचित नहीं बनाता।