" कोलेसिंग " को मेमोरी एक्सेस पैटर्न को समेटने के लिए भी संदर्भित किया जा सकता है । इस उपयोग में, कोलेसिंग का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि थ्रेड्स एक साथ चलते हैं, स्मृति को पास तक पहुंचने का प्रयास करें। यह आमतौर पर है क्योंकि:
- मेमोरी आमतौर पर रैम से बड़े ब्लॉकों में पुनर्प्राप्त की जाती है।
- कुछ प्रसंस्करण इकाइयाँ भविष्य की मेमोरी एक्सेस और कैश को आगे की भविष्यवाणी करने की कोशिश करेंगी, जबकि स्मृति के पुराने हिस्सों को अभी भी संसाधित कर रही हैं।
- मेमोरी को क्रमिक रूप से बड़े-लेकिन धीमे कैश के एक पदानुक्रम में कैश किया जाता है।
इसलिए, ऐसे प्रोग्राम बनाना जो पूर्वानुमान योग्य मेमोरी पैटर्न का उपयोग कर सकते हैं, महत्वपूर्ण है। एक थ्रेडेड प्रोग्राम के साथ यह और भी महत्वपूर्ण है, ताकि मेमोरी अनुरोध सभी पर कूद न जाएं; अन्यथा प्रोसेसिंग यूनिट स्मृति अनुरोधों के पूरा होने की प्रतीक्षा कर रही होगी।
समानांतर प्रोग्रामिंग के परिचय से प्रेरित चित्र : पाठ 2 जीपीयू हार्डवेयर और समानांतर संचार पैटर्न :
नीचे: चार धागे, समान मेमोरी एक्सेस के साथ। काले धराशायी आयत एक एकल 4-शब्द मेमोरी अनुरोध का प्रतिनिधित्व करता है।
मेमोरी एक्सेस करीब हैं, और इसे एक ही गो / ब्लॉक (या अनुरोधों की कम से कम संख्या) में पुनर्प्राप्त किया जा सकता है।
हालांकि, अगर हम " स्ट्राइड " बढ़ाते हैं थ्रेड्स के बीच पहुंच " को , तो इसके लिए कई और मेमोरी एक्सेस की आवश्यकता होगी। नीचे: दो के एक स्ट्राइड के साथ चार और धागे।
यहां आप देख सकते हैं कि इन 4 थ्रेड्स के लिए 2 मेमोरी ब्लॉक अनुरोधों की आवश्यकता होती है। छोटे स्ट्राइड बेहतर है। व्यापक व्यापक, अधिक अनुरोध संभावित रूप से आवश्यक हैं।
बेशक, एक बड़ी मेमोरी स्ट्राइड से भी बदतर एक यादृच्छिक मेमोरी एक्सेस पैटर्न है। ये पाइपलाइन, कैश या पूर्वानुमान के लिए लगभग असंभव होगा।
TikZ स्रोत: