मेमोरी मेमोरी है। लेकिन अलग-अलग चीजें उस स्मृति तक पहुंच सकती हैं। जीपीयू मेमोरी एक्सेस कर सकता है, सीपीयू मेमोरी एक्सेस कर सकता है, शायद अन्य हार्डवेयर बिट्स, जो भी हो।
पाठक को दृश्य दिखाई देने वाले किसी भी चीज़ में स्मृति के लिए "सुसंगत" पहुंच है। अब, आपको लगता है कि यह मूर्खता है। आखिरकार, अगर स्मृति बदल दी गई है, तो संभवतः इसे देखने में असमर्थ कैसे हो सकता है?
बस डालें, कैश।
यह पता चला है कि बदलती मेमोरी महंगा है। तो हम से सब कुछ संभव कर सकते हैं तब तक स्मृति को बदलना जब तक कि हमें बिल्कुल नहीं करना पड़े। जब आप सीपीयू से स्मृति में एक पॉइंटर लिखते हैं, तो CPU उस बाइट को अभी तक नहीं लिखता है। या कम से कम, स्मृति के लिए नहीं। यह इसे उस स्मृति की स्थानीय प्रतिलिपि में लिखता है जिसे "कैश" कहा जाता है।
इसका कारण यह है कि, आम तौर पर बोलते हुए, अनुप्रयोग एकल बाइट्स नहीं लिखते (या पढ़ते हैं)। वे छोटे टुकड़ों में बहुत सारे बाइट लिखने (और पढ़ने) की अधिक संभावना रखते हैं। तो यदि आप मेमोरी लोड या स्टोर जैसे महंगे ऑपरेशन करने जा रहे हैं, तो आपको मेमोरी का एक बड़ा हिस्सा लोड या स्टोर करना चाहिए। इसलिए आप उन सभी परिवर्तनों को संग्रहीत करते हैं जिन्हें आप कैश में मेमोरी के एक हिस्से में बनाने जा रहे हैं, फिर भविष्य में किसी बिंदु पर उस कैश किए गए खंड को वास्तविक स्मृति में एक ही लिखें।
लेकिन यदि आपके पास दो अलग-अलग डिवाइस हैं जो समान स्मृति का उपयोग करते हैं, तो आपको यह सुनिश्चित करने के लिए कुछ तरीका चाहिए कि एक डिवाइस बनाता है अन्य उपकरणों के लिए दृश्यमान होता है। अधिकांश जीपीयू सीपीयू कैश नहीं पढ़ सकते हैं। और अधिकांश सीपीयू भाषाओं में भाषा-स्तर का समर्थन नहीं है "अरे, वह सामान जो मैंने स्मृति में लिखा था? मैं वास्तव में आपके लिए इसे स्मृति में लिखना चाहता हूं।" इसलिए आपको आमतौर पर परिवर्तन की दृश्यता सुनिश्चित करने के लिए कुछ चाहिए।
Vulkan में, स्मृति जो "HOST_COHERENT" लेबल किया गया है इसका मतलब है कि, (कि एक ही रास्ता Vulkan आप सीधे स्मृति पर लिखते हैं की सुविधा देता है, क्योंकि, एक मैप की गई सूचक के माध्यम से) अगर आपको लगता है कि स्मृति पर लिखते हैं, तो आप की जरूरत नहीं है यह सुनिश्चित करने के लिए विशेष सुविधाओं का उपयोग करने के लिए कि GPU उन परिवर्तनों को देख सके। किसी भी बदलाव की जीपीयू की दृश्यता की गारंटी है। यदि वह ध्वज स्मृति पर उपलब्ध नहीं है, तो आपको उस डेटा के विशिष्ट क्षेत्रों की समेकन सुनिश्चित करने के लिए वल्कन एपीआई का उपयोग करना होगा, जिसे आप एक्सेस करना चाहते हैं।
सुसंगत स्मृति के साथ, हार्डवेयर के मामले में दो चीजों में से एक चल रहा है। किसी भी सीपीयू के कैश में मेमोरी तक सीपीयू का उपयोग कैश नहीं किया जाता है, या जीपीयू के पास सीपीयू के कैश की सीधी पहुंच होती है (शायद सीपीयू के समान मरने के कारण)। आप आमतौर पर बता सकते हैं कि उत्तरार्द्ध हो रहा है, क्योंकि वल्कन के जीपीयू कार्यान्वयन गैर-सुसंगत स्मृति विकल्पों की पेशकश करने के लिए परेशान नहीं हैं।
"सुसंगत" का अर्थ है कि यदि एकाधिक ऑब्जेक्ट्स (या एकाधिक पथों पर) डेटा ऑब्जेक्ट का उपयोग किया जाता है, तो प्रत्येक एक ही स्थिति को बिल्कुल देखेगा। दो एजेंट एक सीपीयू और एक जीपीयू हो सकता है। दो पठित पथों के लिए उदाहरण बनावट कैश बनाम एल 1 कैश के माध्यम से हो सकता है। सहारे को बनाए रखने के लिए आमतौर पर अतिरिक्त हार्डवेयर तंत्र की आवश्यकता होती है, उदा। एमईएसआई या एमओईएसआई कैश लाइनों की स्थिति को ट्रैक करने के लिए बिट्स, और आसपास के शिपिंग डेटा के लिए महत्वपूर्ण मात्रा में कोचेंसी यातायात का कारण बन सकता है, खासकर यदि कई एजेंट हैं। – njuffa
GPUs में बनावट कैश एक "अंतर्निहित" तंत्र के लिए एक विशिष्ट उदाहरण है। यदि बनावट मैपिंग में अंतर्निहित डेटा बदलता है, तो बनावट कैश में किसी भी कैश की गई सामग्री को अमान्य या रीफ्रेश नहीं किया जा सकता है, और इसके बाद बनावट कैश के परिणामस्वरूप स्टेल डेटा पढ़ा जा सकता है। – njuffa