मेमोरी बाड़ क्या है?


जवाबों:


115

प्रदर्शन लाभ के लिए आधुनिक सीपीयू अक्सर उपलब्ध सिलिकॉन (मेमोरी रीड / राइट्स सहित) का अधिकतम उपयोग करने के लिए निर्देशों को निष्पादित करते हैं। क्योंकि हार्डवेयर निर्देशों की अखंडता को लागू करता है जिसे आप निष्पादन के एक ही धागे में कभी नोटिस नहीं करते हैं। हालाँकि वाष्पशील मेमोरी (उदाहरण के लिए मेमोरी मैपेड I / O) के साथ कई थ्रेड्स या वातावरण के लिए यह अप्रत्याशित व्यवहार को जन्म दे सकता है।

एक मेमोरी बाड़ / बाधा निर्देशों का एक वर्ग है जिसका अर्थ है कि आप जो उम्मीद करते हैं उसमें मेमोरी रीड / राइट होती है। उदाहरण के लिए एक 'पूर्ण बाड़' का अर्थ है बाड़ के बाद उन सभी को पढ़ने / लिखने से पहले बाड़ की कॉमेडी की जाती है।

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

CPU रिफॉर्मिंग कंपाइलर ऑप्टिमाइजेशन से अलग है - हालांकि आर्टिफैक्ट्स समान हो सकते हैं। यदि आपको अवांछनीय व्यवहार (जैसे C में वाष्पशील कीवर्ड का उपयोग) हो सकता है, तो आपको अपने निर्देशों को पुन: व्यवस्थित करने वाले कंपाइलर को रोकने के लिए अलग से उपाय करने की आवश्यकता है।


26
मुझे नहीं लगता कि संकलक को रोकने के लिए अस्थिरता पर्याप्त है; AFAIK केवल यह सुनिश्चित करता है कि संकलक चर मान को कैश नहीं कर सकता है। लिनक्स कर्नेल एक पूर्ण संकलक अनुकूलन अवरोध बनाने के लिए एक gcc एक्सटेंशन ( asm __volatile __ (":::" memory ")) का उपयोग करता है।
सीजरबी

5
सच है, वाष्पशील थ्रेड के बारे में पता नहीं है, लेकिन आप इसका उपयोग कुछ
आशाओं

3
(.NET CLR) वाष्पशील रीड्स बाड़ प्राप्त करते हैं, लिखते हैं रिलीज़ बाड़। इंटरलॉक किए गए ऑप्स मेमोरीबेरियर विधि के रूप में भरे हुए हैं।
ल्यूक पुप्लेट

3
वाष्पशील कीवर्ड के बारे में रोचक जानकारी .net यहां पाई जा सकती है। albahari.com/threading/part4.aspx#_NonBlockingSynch इस साइट में c # में थ्रेडिंग के बारे में बहुत सारी उपयोगी जानकारी है
Bas Smit

डेवलपर के पास पावरपीसी मेमोरी स्टोरेज मॉडल के बारे में एक अच्छा [लेख] [1] है। [1]: ibm.com/developerworks/systems/articles/powerpc.html
Iouri Goussev

17

एक अन्य प्रश्न के लिए मेरे जवाब की नकल करते हुए , क्या कुछ चालें हैं जो एक प्रोसेसर कोड को अनुकूलित करने के लिए करता है? :

सबसे महत्वपूर्ण एक मेमोरी एक्सेस रीऑर्डरिंग होगा।

अनुपस्थित स्मृति बाड़ या क्रम निर्देश, प्रोसेसर स्मृति अभिगम को फिर से शुरू करने के लिए स्वतंत्र है। कुछ प्रोसेसर आर्किटेक्चर पर प्रतिबंध है कि वे कितना फिर से व्यवस्थित कर सकते हैं; अल्फा सबसे कमजोर होने के लिए जाना जाता है (यानी, जो सबसे अधिक पुन: व्यवस्थित कर सकता है)।

विषय का एक बहुत अच्छा उपचार लिनक्स कर्नेल स्रोत प्रलेखन में दस्तावेज़ीकरण / मेमोरी-बैरियर.टैक्स पर पाया जा सकता है ।

अधिकांश समय, अपने संकलक या मानक पुस्तकालय से लॉकिंग प्राइमेटिक्स का उपयोग करना सबसे अच्छा है; इनका अच्छी तरह से परीक्षण किया जाना चाहिए, जगह में सभी आवश्यक मेमोरी बाधाएं होनी चाहिए, और संभवतः काफी अनुकूलित हैं (लॉकिंग प्राइमिंग लॉकिंग मुश्किल है, यहां तक ​​कि विशेषज्ञ उन्हें कभी-कभी गलत भी कर सकते हैं)।


यह पुनरावर्तन के प्रवाह को कैसे प्रभावित करता है? जब आपने कहा Alpha is known for being the weakest, क्यों weakest? क्या यह बेहतर नहीं है कि, यह अधिक पुन: व्यवस्थित करता है, इसलिए परिणामस्वरूप यह बहुत तेजी से निष्पादन होगा? (मैं अल्फा उपयोगकर्ता नहीं हूं, लेकिन very reorderingबनाम के प्रभाव के बारे में पूछ रहा हूं restricted reordering)। इसलिए बहुत सी रीऑर्डरिंग के डाउनसाइड हैं (अपरिभाषित व्यवहार के जोखिम को छोड़कर, लेकिन मुझे लगता है कि, अधिकांश आधुनिक सीपीयू को अच्छी रीऑर्डरिंग को हल करना चाहिए था और केवल परिभाषित रीऑर्डिंग को लागू करना चाहिए था, अन्यथा, यह उनके द्वारा किए गए निर्णय की समझ में नहीं आता)।
चरवाहा

8

मेरे अनुभव में यह एक मेमोरी बैरियर को संदर्भित करता है , जो कई थ्रेड्स के बीच मेमोरी एक्सेस को सिंक्रनाइज़ करने के लिए एक निर्देश (स्पष्ट या अंतर्निहित) है।

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

समस्या का एक अच्छा परिचय " द डबल-चेक्ड लॉकिंग ब्रोकन 'घोषणा " है। कई लोगों के लिए, यह वेक-अप कॉल था कि ड्रेगन हो।

अंतर्निहित पूर्ण मेमोरी बाधाएं आमतौर पर प्लेटफ़ॉर्म थ्रेड सिंक्रनाइज़ेशन रूटीन में शामिल होती हैं, जो इसके मूल को कवर करती हैं। हालांकि, लॉक-फ्री प्रोग्रामिंग और कस्टम, हल्के सिंक्रोनाइज़ेशन पैटर्न को लागू करने के लिए, आपको अक्सर केवल बाधा या केवल एक-तरफ़ा अवरोध की आवश्यकता होती है।


2

विकिपीडिया सब जानता है ...

मेमोरी बैरियर, जिसे मेमबर या मेमोरी बाड़ के रूप में भी जाना जाता है, निर्देशों का एक वर्ग है, जो एक सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) का कारण बनता है, जो बैरियर इंस्ट्रक्शन से पहले और बाद में जारी किए गए मेमोरी ऑपरेशंस पर एक ऑर्डर की कमी को लागू करता है।

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

मेमोरी बाधाओं का उपयोग आमतौर पर निम्न-स्तरीय मशीन कोड को लागू करते समय किया जाता है जो कई उपकरणों द्वारा साझा की गई मेमोरी पर काम करता है। इस तरह के कोड में मल्टीप्रोसेसर सिस्टम पर सिंक्रोनाइज़ेशन प्राइमेटीज़ और लॉक-फ्री डेटा संरचनाएं और कंप्यूटर हार्डवेयर के साथ संचार करने वाले डिवाइस ड्राइवर शामिल हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.