सबसे पहले एक मुख्य मेमोरी एक्सेस बहुत महंगी है। वर्तमान में एक 2GHz CPU (सबसे धीमा एक बार) 2G टिक (चक्र) प्रति सेकंड है। एक सीपीयू (आजकल वर्चुअल कोर) टिक के अनुसार अपने रजिस्टरों से एक मूल्य प्राप्त कर सकता है। चूंकि एक आभासी कोर में कई प्रसंस्करण इकाइयाँ (ALU - अंकगणितीय तर्क इकाई, FPU आदि) होती हैं, यह वास्तव में यदि संभव हो तो समानांतर में कुछ निर्देशों को संसाधित कर सकता है।
मुख्य मेमोरी की पहुंच लगभग 70ns से 100ns (DDR4 थोड़ी तेज़) है। यह समय मूल रूप से L1, L2 और L3 कैश को देख रहा है और मेमोरी को हिट करने से (मेमोरी कंट्रोलर को कमांड भेजें, जो इसे मेमोरी बैंकों को भेजता है), प्रतिक्रिया की प्रतीक्षा करें और किया।
100ns का मतलब लगभग 200 टिक होता है। इसलिए मूल रूप से अगर कोई प्रोग्राम हमेशा उन कैश को याद रखेगा जो प्रत्येक मेमोरी एक्सेस करता है, तो सीपीयू अपने समय का लगभग 99,5% खर्च करेगा (यदि यह केवल मेमोरी पढ़ता है) बेकार है जो मेमोरी का इंतजार कर रहा है।
चीजों को गति देने के लिए एल 1, एल 2, एल 3 कैश है। वे मेमोरी को सीधे चिप पर रखे जाने और दिए गए बिट्स को स्टोर करने के लिए एक अलग तरह के ट्रांजिस्टर सर्किट का उपयोग करते हैं। यह अधिक कमरे, अधिक ऊर्जा लेता है और मुख्य मेमोरी की तुलना में अधिक महंगा है क्योंकि एक सीपीयू आमतौर पर एक अधिक उन्नत तकनीक और एल 1, एल 2 में उत्पादन विफलता का उपयोग करके उत्पादित होता है, एल 3 मेमोरी में सीपीयू को बेकार (दोष) को प्रस्तुत करने का मौका होता है। बड़े L1, L2, L3 कैश त्रुटि दर को बढ़ाते हैं जो पैदावार को घटाता है जो सीधे ROI घटता है। जब उपलब्ध कैश आकार की बात आती है तो बहुत बड़ा व्यापार बंद होता है।
(वर्तमान में कोई व्यक्ति अधिक L1, L2, L3 कैश बनाता है ताकि कुछ भागों को निष्क्रिय करने में सक्षम हो सके ताकि वास्तविक उत्पादन दोष कैश मेमोरी क्षेत्रों में CPU दोष को एक पूरे के रूप में प्रस्तुत किया जा सके)।
एक समय पर विचार देने के लिए (स्रोत: कैश और मेमोरी तक पहुंचने के लिए लागत )
- L1 कैश: 1ns से 2ns (2-4 चक्र)
- L2 कैश: 3ns से 5ns (6-10 चक्र)
- L3 कैश: 12ns से 20ns (24-40 चक्र)
- RAM: 60ns (120 चक्र)
चूंकि हम अलग-अलग सीपीयू प्रकारों का मिश्रण करते हैं, ये केवल अनुमान हैं, लेकिन एक अच्छा विचार दें कि वास्तव में क्या हो रहा है जब कोई मेमोरी वैल्यू प्राप्त होती है और हमारे पास निश्चित कैश लेयर में हिट या मिस हो सकती है।
तो एक कैश मूल रूप से मेमोरी एक्सेस को बहुत तेज कर देता है (60ns बनाम 1ns)।
एक मूल्य प्राप्त करना, इसे कैश में संग्रहीत करना फिर से चलाने की संभावना के लिए यह उन चर के लिए अच्छा है जो अक्सर एक्सेस किए जाते हैं लेकिन मेमोरी कॉपी संचालन के लिए यह अभी भी धीमा करना होगा क्योंकि एक मूल्य पढ़ता है, कहीं मूल्य लिखता है और कभी भी मूल्य नहीं पढ़ता है। फिर से ... कोई कैश हिट नहीं होता है, मृत धीमी गति से (इसके पास समानांतर में हो सकता है क्योंकि हमारे पास ऑर्डर निष्पादन से बाहर है)।
यह मेमोरी कॉपी इतनी महत्वपूर्ण है कि इसे गति देने के लिए अलग-अलग साधन हैं। शुरुआती दिनों में मेमोरी अक्सर सीपीयू के बाहर मेमोरी को कॉपी करने में सक्षम थी। इसे सीधे मेमोरी कंट्रोलर द्वारा हैंडल किया गया था, इसलिए मेमोरी कॉपी ऑपरेशन ने कैश को प्रदूषित नहीं किया।
लेकिन मैदानी मेमोरी कॉपी के अलावा मेमोरी के अन्य सीरियल एक्सेस काफी सामान्य थे। एक उदाहरण जानकारी की एक श्रृंखला का विश्लेषण कर रहा है। पूर्णांकों की एक सरणी होने और योग, औसत, या उससे भी अधिक सरल गणना करने के लिए एक निश्चित मान (फ़िल्टर / खोज) किसी भी सामान्य उद्देश्य सीपीयू पर हर बार चलने वाले एल्गोरिदम का एक और बहुत महत्वपूर्ण वर्ग था।
इसलिए मेमोरी एक्सेस पैटर्न का विश्लेषण करके यह स्पष्ट था कि डेटा को क्रमिक रूप से बहुत बार पढ़ा जाता है। इस बात की बहुत अधिक संभावना थी कि यदि कोई प्रोग्राम इंडेक्स i पर वैल्यू पढ़ता है, तो वह प्रोग्राम वैल्यू i + 1 को भी पढ़ेगा। यह संभावना इस संभावना से थोड़ी अधिक है कि एक ही कार्यक्रम भी i + 2 और इसी तरह के मूल्य को पढ़ेगा।
इसलिए एक स्मृति पता दिया गया था (और अभी भी) आगे पढ़ने और अतिरिक्त मूल्यों को प्राप्त करने के लिए एक अच्छा विचार है। यही कारण है कि एक बढ़ावा मोड है।
बूस्ट मोड में मेमोरी एक्सेस का मतलब है, एक पता भेजना और कई मान क्रमिक रूप से भेजना है। प्रत्येक अतिरिक्त मूल्य भेजें केवल अतिरिक्त 10ns (या नीचे भी) लेता है।
एक और समस्या का पता था। किसी पते को भेजने में समय लगता है। स्मृति के एक बड़े हिस्से को संबोधित करने के लिए बड़े पते भेजने पड़ते हैं। शुरुआती दिनों में इसका मतलब था कि एड्रेस बस एक चक्र (टिक) में पता भेजने के लिए पर्याप्त नहीं थी और अधिक विलंब जोड़ते हुए पता भेजने के लिए एक से अधिक चक्र की आवश्यकता थी।
उदाहरण के लिए 64 बाइट्स की एक कैश लाइन का मतलब है कि मेमोरी को मेमोरी के अलग-अलग (गैर-ओवरलैपिंग) ब्लॉक में विभाजित किया गया है, जिसका आकार 64bytes है। 64bytes का अर्थ है कि प्रत्येक ब्लॉक के प्रारंभ पते में हमेशा शून्य होने के लिए सबसे कम छह पता बिट्स होते हैं। इसलिए हर बार इन छह शून्य बिट्स को भेजने की जरूरत नहीं है, पते की चौड़ाई (स्वागत प्रभाव) की किसी भी संख्या के लिए पता स्थान को 64 गुना बढ़ाने की आवश्यकता है।
एक अन्य समस्या कैश लाइन हल करती है (आगे पढ़ने और पता बस पर छह बिट्स को सहेजने / मुक्त करने के साथ) जिस तरह से कैश का आयोजन किया जाता है। उदाहरण के लिए यदि एक कैश को 8 बाइट (64 बिट) ब्लॉक (सेल) में विभाजित किया जाएगा, तो किसी को मेमोरी सेल के पते को स्टोर करने की आवश्यकता होती है, यह कैश सेल इसके लिए मान रखता है। यदि पता भी 64bit होगा तो इसका मतलब है कि पते के आधे कैश आकार का उपभोग किया जाता है जिसके परिणामस्वरूप 100% ओवरहेड होता है।
चूंकि एक कैश लाइन 64bytes है और एक सीपीयू 64 बिट - 6 बिट = 58 बिट (शून्य बिट्स को भी स्टोर करने की आवश्यकता नहीं है) का उपयोग कर सकता है, इसका मतलब है कि हम 58 बिट (11% ओवरहेड) के ओवरहेड के साथ 64 बिट्स या 512 बिट्स को कैश कर सकते हैं। वास्तविकता में संग्रहीत पते इससे भी छोटे होते हैं लेकिन स्टेटस informations होते हैं (जैसे कैश लाइन वैध और सटीक, गंदी और राम आदि में वापस लिखने की आवश्यकता होती है)।
एक और पहलू यह है कि हमारे पास सेट-एसोसिएटिव कैश है। प्रत्येक कैश सेल एक निश्चित पते को संग्रहीत करने में सक्षम नहीं है, लेकिन केवल उन का एक सबसेट है। यह आवश्यक संग्रहीत पता बिट्स भी छोटे बना देता है, कैश की समानांतर एक्सेस (प्रत्येक सबसेट एक बार पहुँचा जा सकता है लेकिन अन्य सबसेट से स्वतंत्र) की अनुमति देता है।
विशेष रूप से तब होता है जब अलग-अलग आभासी कोर के बीच कैश / मेमोरी एक्सेस को सिंक्रनाइज़ करने की बात आती है, प्रति कोर में उनकी कई स्वतंत्र प्रसंस्करण इकाइयाँ और अंत में एक मेनबोर्ड पर कई प्रोसेसर होते हैं (जो कि बोर्ड आवास 48 से अधिक प्रोसेसर और अधिक होते हैं)।
यह मूल रूप से वर्तमान विचार है कि हमारे पास कैश लाइनें क्यों हैं। आगे पढ़ने से लाभ बहुत अधिक है और कैश-लाइन से एक भी बाइट पढ़ने का सबसे खराब मामला है और बाकी कभी नहीं पढ़ा है क्योंकि संभावना बहुत पतली है।
कैश-लाइन का आकार (64) बड़ी कैश-लाइनों के बीच एक बुद्धिमान चुना हुआ व्यापार है, जो इसे अंतिम बाइट के निकट भविष्य में भी पढ़ने की संभावना नहीं बनाता है, जिस अवधि को पूरा कैश लाइन प्राप्त करना होता है। स्मृति से कैश संगठन में भूमि के ऊपर और कैश और स्मृति उपयोग का बनता है (और इसे वापस लिखने के लिए) और भी।