fence

fence

RISC-V असेंबली संदर्भ

lyszt.net fence और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।

विवरण

FENCE निर्देशों का उपयोग डिवाइस I/O और मेमोरी एक्सेस को क्रमबद्ध करने के लिए किया जाता है, जैसा कि अन्य RISC-V हार्ट्स और बाहरी डिवाइस या कोप्रोसेसर द्वारा देखा जाता है। डिवाइस इनपुट (I), डिवाइस आउटपुट (O), मेमोरी रीड्स (R), और मेमोरी राइट्स (W) का कोई भी संयोजन इन्हीं के किसी भी संयोजन के संबंध में क्रमबद्ध किया जा सकता है। अनौपचारिक रूप से, कोई भी अन्य RISC-V हार्ट या बाहरी डिवाइस FENCE से पहले के predecessor सेट में किसी भी ऑपरेशन से पहले FENCE के बाद के successor सेट में किसी भी ऑपरेशन को नहीं देख सकता। memorymodel RISC-V मेमोरी कंसिस्टेंसी मॉडल का सटीक विवरण प्रदान करता है।

FENCE निर्देश हार्ट द्वारा किए गए मेमोरी रीड्स और राइट्स को भी क्रमबद्ध करते हैं, जैसा कि बाहरी डिवाइस द्वारा किए गए मेमोरी रीड्स और राइट्स द्वारा देखा जाता है। हालाँकि, FENCE निर्देश किसी अन्य सिग्नलिंग तंत्र का उपयोग करके बाहरी डिवाइस द्वारा किए गए इवेंट्स के अवलोकनों को क्रमबद्ध नहीं करते हैं।

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

EEI यह परिभाषित करेगा कि कौन से I/O ऑपरेशन संभव हैं, और विशेष रूप से, लोड और स्टोर निर्देशों द्वारा एक्सेस किए जाने पर कौन से मेमोरी पते क्रमशः मेमोरी रीड्स और राइट्स के बजाय डिवाइस इनपुट और डिवाइस आउटपुट ऑपरेशन के रूप में माने और क्रमबद्ध किए जाएंगे। उदाहरण के लिए, मेमोरी-मैप्ड I/O डिवाइस आमतौर पर अनकैश्ड लोड और स्टोर के साथ एक्सेस किए जाएंगे जो R और W बिट्स के बजाय I और O बिट्स का उपयोग करके क्रमबद्ध होते हैं। इंस्ट्रक्शन-सेट एक्सटेंशन नए I/O निर्देशों का भी वर्णन कर सकते हैं जो FENCE निर्देश में I और O बिट्स का उपयोग करके क्रमबद्ध किए जाएंगे।

Fence मोड एन्कोडिंग

FENCE मोड फ़ील्ड fm FENCE निर्देश की सिमैंटिक्स को परिभाषित करता है। एक FENCE (fm=0000 के साथ) अपने predecessor सेट में सभी मेमोरी ऑपरेशन्स को अपने successor सेट में सभी मेमोरी ऑपरेशन्स से पहले क्रमबद्ध करता है।

एक FENCE.TSO निर्देश fm=1000, predecessor=RW, और successor=RW के साथ FENCE निर्देश के रूप में एन्कोड किया जाता है। FENCE.TSO अपने predecessor सेट में सभी लोड ऑपरेशन्स को अपने successor सेट में सभी मेमोरी ऑपरेशन्स से पहले क्रमबद्ध करता है, और अपने predecessor सेट में सभी स्टोर ऑपरेशन्स को अपने successor सेट में सभी स्टोर ऑपरेशन्स से पहले क्रमबद्ध करता है। यह FENCE.TSO's predecessor सेट में non-AMO स्टोर ऑपरेशन्स को इसके successor सेट में non-AMO लोड्स के साथ अक्रमबद्ध छोड़ देता है।

ℹ
चूंकि FENCE RW,RW उन ऑर्डरिंग्स का एक सुपरसेट लागू करता है जो FENCE.TSO लागू करता है, इसलिए fm फ़ील्ड को अनदेखा करना और FENCE.TSO को FENCE RW,RW के रूप में लागू करना सही है।

FENCE निर्देशों में अप्रयुक्त फ़ील्ड्स--rs1 and rd--भविष्य के एक्सटेंशन्स में बारीक-दाने वाले fences के लिए आरक्षित हैं। फ़ॉरवर्ड कम्पैटिबिलिटी के लिए, बेस इम्प्लीमेंटेशन्स इन फ़ील्ड्स को अनदेखा करेंगे#, और मानक सॉफ़्टवेयर इन फ़ील्ड्स को शून्य करेगा। इसी तरह, कई fm और predecessor/successor सेट सेटिंग्स भी भविष्य के उपयोग के लिए आरक्षित हैं। बेस इम्प्लीमेंटेशन्स ऐसे सभी आरक्षित कॉन्फ़िगरेशन्स को FENCE निर्देशों (fm=0000 के साथ) के रूप में मानेंगे, और मानक सॉफ़्टवेयर केवल गैर-आरक्षित कॉन्फ़िगरेशन्स का उपयोग करेगा।

ℹ
हमने सरल मशीन इम्प्लीमेंटेशन्स और संभावित भविष्य के कोप्रोसेसर या एक्सेलेरेटर एक्सटेंशन्स से उच्च प्रदर्शन की अनुमति देने के लिए एक रिलैक्स्ड मेमोरी मॉडल चुना। हम डिवाइस-ड्राइवर हार्ट के भीतर अनावश्यक सीरियलाइज़ेशन से बचने के लिए और जोड़े गए कोप्रोसेसर या I/O डिवाइसेस को नियंत्रित करने के लिए वैकल्पिक गैर-मेमोरी पथों का समर्थन करने के लिए भी I/O ऑर्डरिंग को मेमोरी R/W ऑर्डरिंग से अलग करते हैं। सरल इम्प्लीमेंटेशन्स predecessor and successor फ़ील्ड्स को अतिरिक्त रूप से अनदेखा कर सकते हैं और हमेशा सभी ऑपरेशन्स पर एक रूढ़िवादी FENCE निष्पादित कर सकते हैं।