मेमोरी कंसिस्टेंसी बनाम कैश कोहेरेंस


17

क्या यह सच है कि सीक्वेंशियल कंसिस्टेंसी कैशे कॉरेंस की तुलना में अधिक मजबूत संपत्ति है?

इसके अनुसार

सोरिन, डैनियल जे; हिल, मार्क डी; वुड, डेविड ए: ए प्राइमर ऑन मेमोरी कंसिस्टेंसी एंड कैच कोहरेंस , मॉर्गन एंड क्लेपूल, 2011

अनुक्रमिक संगति का वर्णन किया जा सकता है (औपचारिक रूप से नहीं):

अनुक्रमिक संगतता मेमोरी मॉडल निर्दिष्ट करता है कि सिस्टम को सभी थ्रेड के लोड और स्टोर को सभी मेमोरी स्थानों पर एक कुल आदेश में निष्पादित करना होगा जो प्रत्येक थ्रेड के प्रोग्राम ऑर्डर का सम्मान करता है। प्रत्येक लोड को उस कुल क्रम में सबसे हाल के स्टोर का मूल्य मिलता है।

दूसरे शब्दों में, प्रणाली क्रमिक रूप से सुसंगत है, यदि प्रत्येक थ्रेड की मेमोरी इवेंट (लोड और स्टोर) दिए गए हों, तो हम इन सभी घटनाओं को इस तरह से ऑर्डर कर सकते हैं: 1) प्रत्येक थ्रेड के लिए इसकी घटनाओं का क्रम संरक्षित है, और 2) ग्लोबल ऑर्डर है धारावाहिक (कोई भी लोड नवीनतम मान संग्रहीत)।

अब वे जारी रखते हैं और सुसंगतता का वर्णन करते हैं:

सुसंगतता की एक परिभाषा जो अनुक्रमिक संगति की परिभाषा के अनुरूप है वह यह है कि एक सुसंगत प्रणाली को सभी थ्रेड के लोड और स्टोर को कुल मेमोरी में एकल मेमोरी स्थान पर निष्पादित करना होगा जो प्रत्येक थ्रेड के प्रोग्राम ऑर्डर का सम्मान करता है।

दूसरे शब्दों में, प्रणाली सुसंगत है, यदि प्रत्येक स्थान के लिए प्रत्येक थ्रेड की मेमोरी इवेंट्स दी गई हैं, तो हम उस स्थान के लिए ईवेंट्स को ऑर्डर कर सकते हैं, जैसे: 1) प्रत्येक थ्रेड के लिए उस स्थान पर अपने ईवेंट का क्रम संरक्षित है, और प्रत्येक के लिए 2) स्थान क्रम है।

अंत में, वे अंतर बताते हैं:

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

इसलिए यह अंतर प्रतीत होता है कि सुसंगत प्रणालियों के लिए हमें प्रत्येक स्थान के लिए सभी घटनाओं पर कुल आदेश की आवश्यकता होती है (इस प्रकार विशेष स्थान के लिए आदेश के बीच), जबकि सुसंगत प्रणालियों के लिए कुल आदेश को सभी घटनाओं पर परिभाषित किया जाना चाहिए (और इस प्रकार) आदेश देना भी विभिन्न स्थानों के लिए घटनाओं के बीच है)?

इसका मतलब यह है कि सुसंगतता कम सख्त है कि संगति? (जो मनोरंजक लगता है!) क्या ऐसे निशान हैं जो सुसंगत हैं लेकिन सुसंगत नहीं हैं?


2
ध्यान दें कि हमें "कृपया मेरा उत्तर जांचें!" क्या आप अधिक विशिष्ट प्रश्न जोड़ सकते हैं? आपको कहां लगता है कि आपका अंतर हो सकता है?
राफेल

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

@ अरेत मैं आपके प्रश्न के अंतिम भाग को एक उत्तर के रूप में पढ़ता हूं जिसे आप जांचना चाहते हैं। यदि ऐसा है, तो कुछ संदेह होना चाहिए (अन्यथा, क्यों पूछें?) जो आपको पाठकों के लिए इंगित करना चाहिए। शायद मैं गलत समझूं?
राफेल

@ राफेल 'अंतिम भाग को जाँचना चाहते हैं' - हाँ। 'क्यों पूछें?' - विषय नया है, और मुझे यकीन नहीं था कि निष्कर्ष सही है। मैं भविष्य में इस तरह के सवालों से बचने की कोशिश करूंगा और संभवत: इसकी जांच करने के लिए किसी को
ढूंढूंगा

जवाबों:


11

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

क्रमिक रूप से सुसंगत का अर्थ सुसंगत है:

xx

xyx0y0xyxyyx

इससे आश्चर्यजनक परिणाम सामने आ सकते हैं। उदाहरण के लिए

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

यह निशान सुसंगत है:

  • एक के लिए आदेश है: proc2 loads A(gets 0),proc1 stores A:=1
  • बी के लिए आदेश है: proc1 stores B:=1,proc2 loads B(gets 1)

लेकिन यह सुसंगत नहीं है! चूँकि यदि proc2 load B1 लौटता है, तो proc1 store A := 1पहले से ही हुआ है और उसे proc2 load Aभी 1 वापस करना चाहिए।

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