सामग्री पर जाएँ

कैश (कंप्यूटिंग)

मुक्त ज्ञानकोश विकिपीडिया से

कैश (अंग्रेज़ी: cache) कंप्यूटर प्रणाली में प्रयुक्त एक छोटी और उच्च-गति वाली स्मृति है, जिसमें अपेक्षाकृत धीमी और बड़ी स्मृति से बार-बार उपयोग होने वाले डेटा अथवा निर्देशों की प्रतिलिपियाँ अस्थायी रूप से रखी जाती हैं। इसका मुख्य उद्देश्य प्रोसेसर और मुख्य स्मृति के बीच गति के अंतर को कम करना तथा औसत स्मृति-अभिगम समय को घटाना है। कैश मेमोरी हाइरार्की का एक महत्वपूर्ण स्तर है।[1]

आधुनिक प्रोसेसरों में सामान्यतः कैश के कई स्तर होते हैं, जैसे L1, L2 और L3। L1 कैश सामान्यतः सबसे छोटी और सबसे कम विलंबता वाली होती है, जबकि L2 और L3 क्रमशः बड़ी लेकिन अपेक्षाकृत अधिक विलंबता वाली होती हैं। कई आधुनिक प्रोसेसरों में L1 कैश को निर्देशों और डेटा के लिए अलग-अलग भागों में विभाजित किया जाता है, जबकि अंतिम-स्तर की कैश कई प्रोसेसर कोर के बीच साझा हो सकती है।[2]

कैश की प्रभावशीलता मुख्यतः प्रोग्रामों में पाए जाने वाले स्थानीयता के सिद्धांत (principle of locality) पर निर्भर करती है। स्थानिक स्थानीयता (spatial locality) के अनुसार किसी स्मृति स्थान के निकट स्थित स्थानों के शीघ्र उपयोग की संभावना अधिक होती है, जबकि कालिक स्थानीयता (temporal locality) के अनुसार हाल में उपयोग किए गए डेटा या निर्देशों के निकट भविष्य में पुनः उपयोग होने की संभावना अधिक होती है।[3]

आवश्यकता और उद्देश्य

[संपादित करें]

प्रोसेसर की गणना करने की क्षमता की तुलना में मुख्य स्मृति से डेटा प्राप्त करने में अधिक समय लग सकता है। यदि प्रत्येक मेमोरी अभिगम के लिए प्रोसेसर को सीधे मुख्य स्मृति तक जाना पड़े, तो प्रोसेसर को कई बार डेटा उपलब्ध होने की प्रतीक्षा करनी पड़ सकती है। कैश इस समस्या को कम करने के लिए अक्सर उपयोग किए जाने वाले डेटा की एक छोटी प्रतिलिपि प्रोसेसर के निकट रखती है।[4]

कैश का मूल विचार यह है कि छोटी, तेज और महँगी स्मृति को बड़ी, धीमी और अपेक्षाकृत सस्ती स्मृति के सामने एक मध्यवर्ती स्तर के रूप में उपयोग किया जाए। यदि आवश्यक डेटा कैश में मिल जाता है, तो प्रोसेसर को मुख्य स्मृति तक जाने की आवश्यकता नहीं होती। इस स्थिति में अभिगम को कैश हिट कहा जाता है। यदि डेटा कैश में नहीं मिलता, तो कैश मिस होता है और डेटा को निचले स्तर की स्मृति से प्राप्त करना पड़ता है।[5]

कैश और मेमोरी हाइरार्की

[संपादित करें]

कंप्यूटर की स्मृति को सामान्यतः विभिन्न स्तरों की एक हाइरार्की के रूप में व्यवस्थित किया जाता है। ऊपरी स्तरों की स्मृतियाँ छोटी और तेज होती हैं, जबकि निचले स्तरों की स्मृतियाँ बड़ी और अपेक्षाकृत धीमी होती हैं। एक सामान्य प्रोसेसर प्रणाली में यह क्रम इस प्रकार दिखाई दे सकता है:

  • रजिस्टर — प्रोसेसर के सबसे निकट और अत्यंत तेज।
  • L1 कैश — छोटी और बहुत कम विलंबता वाली कैश।
  • L2 कैश — L1 से बड़ी और सामान्यतः अधिक विलंबता वाली।
  • L3 कैश — कई आधुनिक मल्टी-कोर प्रोसेसरों में बड़ी तथा कई कोर द्वारा साझा की जाने वाली कैश।
  • मुख्य स्मृति (DRAM) — कैश की तुलना में बहुत बड़ी लेकिन धीमी।
  • द्वितीयक भंडारण, जैसे SSD या हार्ड डिस्क।

कैश की प्रत्येक ऊपरी परत सामान्यतः उसके नीचे स्थित बड़े और धीमे स्तर के डेटा का एक छोटा उपसमुच्चय रखती है। इस व्यवस्था से पूरे सिस्टम को अपेक्षाकृत बड़ी स्मृति की क्षमता और छोटी स्मृति की गति के बीच संतुलन मिलता है।[6]

स्थानीयता का सिद्धांत

[संपादित करें]

कैश की उपयोगिता का प्रमुख आधार स्थानीयता का सिद्धांत है। अधिकांश वास्तविक प्रोग्राम किसी भी क्षण अपनी पूरी स्मृति-अंतरिक्ष को समान रूप से नहीं पढ़ते, बल्कि उसके अपेक्षाकृत छोटे हिस्से पर बार-बार काम करते हैं।[7]

कालिक स्थानीयता

[संपादित करें]

कालिक स्थानीयता (temporal locality) का अर्थ है कि यदि किसी डेटा या निर्देश का अभी उपयोग किया गया है, तो निकट भविष्य में उसी का पुनः उपयोग होने की संभावना अधिक होती है। उदाहरण के लिए, किसी लूप में बार-बार निष्पादित होने वाले निर्देश या बार-बार उपयोग होने वाला चर कालिक स्थानीयता प्रदर्शित कर सकता है।[8]

स्थानिक स्थानीयता

[संपादित करें]

स्थानिक स्थानीयता (spatial locality) का अर्थ है कि यदि किसी स्मृति स्थान का उपयोग किया गया है, तो उसके निकट स्थित स्मृति स्थानों का शीघ्र उपयोग होने की संभावना अधिक होती है। सरणी के क्रमिक तत्वों को पढ़ना इसका सामान्य उदाहरण है।[9]

इसी कारण कैश सामान्यतः किसी एक बाइट के बजाय डेटा के एक छोटे लगातार ब्लॉक को कैश लाइन (cache line) या कैश ब्लॉक के रूप में स्थानांतरित करती है।[10]

कैश लाइन

[संपादित करें]

कैश में डेटा सामान्यतः निश्चित आकार की इकाइयों में संग्रहीत और स्थानांतरित किया जाता है, जिन्हें कैश लाइन कहा जाता है। कैश लाइन का आकार वास्तुकला और प्रोसेसर के अनुसार अलग-अलग हो सकता है। उदाहरण के लिए, कई आधुनिक Intel प्रणालियों में 64-बाइट कैश लाइन का उपयोग किया जाता है।[11]

जब प्रोसेसर किसी ऐसे पते को पढ़ता है जो वर्तमान कैश स्तर में उपलब्ध नहीं है, तो आवश्यक डेटा को केवल एक छोटे हिस्से के रूप में नहीं बल्कि संबंधित कैश लाइन के रूप में ऊपरी स्तर की कैश में लाया जा सकता है। यदि प्रोग्राम शीघ्र ही उसी लाइन के अन्य डेटा का उपयोग करता है, तो अतिरिक्त मुख्य-स्मृति अभिगम की आवश्यकता नहीं पड़ती।[12]

कैश हिट और कैश मिस

[संपादित करें]

जब प्रोसेसर द्वारा माँगा गया डेटा वर्तमान कैश स्तर में उपलब्ध होता है, तो इसे कैश हिट कहा जाता है। यदि डेटा उपलब्ध नहीं होता, तो इसे कैश मिस कहा जाता है। मिस की स्थिति में सिस्टम को कैश के निचले स्तर या अंततः मुख्य स्मृति से डेटा प्राप्त करना पड़ता है।[13]

कैश के प्रदर्शन को मापने के लिए कुछ प्रमुख अवधारणाएँ हैं:

हिट दर
कुल मेमोरी अभिगमों में से वे अभिगम जिनमें आवश्यक डेटा कैश में मिल जाता है, उनका अनुपात हिट दर कहलाता है।
मिस दर
कुल मेमोरी अभिगमों में से वे अभिगम जिनमें डेटा कैश में नहीं मिलता, उनका अनुपात मिस दर कहलाता है। सामान्यतः मिस दर = 1 − हिट दर।
हिट समय
कैश में डेटा खोजने और उपलब्ध होने पर उसे प्राप्त करने में लगने वाला समय।
मिस दंड
कैश मिस होने के बाद निचले स्तर से डेटा लाने और कैश को अद्यतन करने में लगने वाला अतिरिक्त समय।[14]

उच्च हिट दर सामान्यतः बेहतर प्रदर्शन की ओर संकेत करती है, लेकिन वास्तविक प्रदर्शन केवल हिट दर पर निर्भर नहीं करता। कैश का आकार, हिट समय, मिस दंड, मेमोरी बैंडविड्थ और प्रोसेसर की अन्य विशेषताएँ भी महत्वपूर्ण होती हैं।

कैश का संगठन

[संपादित करें]

कैश को इस प्रकार व्यवस्थित करना आवश्यक है कि किसी मेमोरी पते के लिए यह निर्धारित किया जा सके कि उसकी कैश लाइन कहाँ रखी गई है। इस कार्य के लिए कैश में सामान्यतः टैग, इंडेक्स और ब्लॉक ऑफसेट जैसे पता-क्षेत्रों का उपयोग किया जाता है।[15]

कैश संगठन की प्रमुख विधियाँ हैं:

डायरेक्ट-मैप्ड कैश

[संपादित करें]

डायरेक्ट-मैप्ड कैश (direct-mapped cache) में प्रत्येक मेमोरी ब्लॉक के लिए कैश में केवल एक संभावित स्थान होता है। मेमोरी पते के कुछ बिट यह निर्धारित करते हैं कि डेटा किस कैश इंडेक्स में रखा जाएगा।[16]

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

सेट-असोसिएटिव कैश

[संपादित करें]

सेट-असोसिएटिव कैश (set-associative cache) डायरेक्ट-मैप्ड और पूर्णतः असोसिएटिव कैश के बीच का एक समझौता है। इसमें कैश को कई सेटों में बाँटा जाता है और किसी मेमोरी ब्लॉक को संबंधित सेट के भीतर सीमित संख्या में स्थानों में रखा जा सकता है। उदाहरण के लिए, 4-way set-associative कैश में किसी ब्लॉक के लिए संबंधित सेट के चार संभावित स्थान हो सकते हैं।[17]

सेट-असोसिएटिव संगठन कन्फ्लिक्ट मिस को कम करने में मदद कर सकता है, हालांकि अधिक associativity के लिए अतिरिक्त हार्डवेयर और तुलना तंत्र की आवश्यकता होती है।[18]

पूर्णतः असोसिएटिव कैश

[संपादित करें]

पूर्णतः असोसिएटिव कैश (fully associative cache) में किसी मेमोरी ब्लॉक को कैश के किसी भी उपलब्ध स्थान पर रखा जा सकता है। इसमें किसी निश्चित इंडेक्स से बँधने की आवश्यकता नहीं होती।[19]

इससे स्थान-टकराव की समस्या कम हो सकती है, लेकिन प्रत्येक संभावित स्थान के टैग की तुलना करने के कारण इसका हार्डवेयर अधिक जटिल और महँगा हो सकता है। इसलिए पूर्णतः असोसिएटिव संगठन सामान्यतः छोटे कैश या विशेष प्रयोजनों में अधिक उपयुक्त होता है।[20]

कैश के स्तर

[संपादित करें]

L1 कैश प्रोसेसर के सबसे निकट स्थित सामान्य-उद्देश्य कैश स्तरों में से एक है। यह आकार में छोटी होती है लेकिन इसकी पहुँच-प्रतीक्षा अवधि बहुत कम होती है। कई प्रोसेसरों में L1 को L1 instruction cache (L1I) और L1 data cache (L1D) में विभाजित किया जाता है।[21]

L2 कैश सामान्यतः L1 से बड़ी होती है और L1 मिस होने पर अगला कैश स्तर प्रदान करती है। किसी विशेष प्रोसेसर में L2 एक कोर के लिए निजी या वास्तुकला के अनुसार अन्य कोर के साथ किसी प्रकार से साझा हो सकती है।

L3 कैश कई आधुनिक मल्टी-कोर प्रोसेसरों में अंतिम-स्तर की कैश (last-level cache, LLC) के रूप में कार्य कर सकती है। कई डिजाइनों में यह अनेक प्रोसेसर कोर के बीच साझा होती है। हालांकि वास्तविक संगठन प्रोसेसर की माइक्रोआर्किटेक्चर पर निर्भर करता है।[22]

कैश में डेटा का विस्थापन

[संपादित करें]

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

विशेष रूप से set-associative या fully associative कैश में यह निर्धारित करने के लिए एक replacement policy की आवश्यकता होती है कि कौन-सी कैश लाइन हटाई जाए। संभावित नीतियों में Least Recently Used (LRU) जैसी रणनीतियाँ शामिल हैं।[23]

वास्तविक प्रोसेसरों में replacement mechanism आवश्यक रूप से शुद्ध LRU नहीं होता। हार्डवेयर लागत, ऊर्जा और गति को ध्यान में रखते हुए व्यावहारिक प्रणालियाँ LRU के अनुमान या अन्य replacement रणनीतियों का उपयोग कर सकती हैं।

कैश मिस के प्रकार

[संपादित करें]

कैश मिस को सामान्यतः तीन प्रमुख श्रेणियों में समझाया जाता है:

कम्पल्सरी मिस
पहली बार किसी डेटा ब्लॉक का उपयोग करते समय होने वाला मिस। इसे cold miss भी कहा जाता है।
कैपेसिटी मिस
तब होता है जब प्रोग्राम का सक्रिय डेटा-समुच्चय कैश की क्षमता से बड़ा हो और आवश्यक डेटा पहले ही हटाया जा चुका हो।
कन्फ्लिक्ट मिस
तब होता है जब कैश संगठन के कारण अलग-अलग सक्रिय ब्लॉक समान कैश स्थान या सेट के लिए प्रतिस्पर्धा करते हैं।[24]

कुछ उन्नत वास्तुकलाओं में अन्य प्रकार के प्रदर्शन-संबंधी मेमोरी व्यवहारों को भी अलग से वर्गीकृत किया जा सकता है।

डेटा लिखने की नीतियाँ

[संपादित करें]

कैश केवल डेटा पढ़ने के लिए ही नहीं, बल्कि लिखने के लिए भी उपयोग की जा सकती है। जब प्रोसेसर कैश में मौजूद डेटा को बदलता है, तो कैश और निचले स्तर की स्मृति के बीच डेटा-संगति बनाए रखने के लिए लेखन नीति आवश्यक होती है।

Write-through नीति में कैश में डेटा लिखे जाने के साथ ही संबंधित निचले स्तर की स्मृति में भी परिवर्तन किया जाता है। इससे निचले स्तर की प्रति अधिक तुरंत अद्यतन रहती है, लेकिन अधिक मेमोरी ट्रैफिक उत्पन्न हो सकता है।

Write-back नीति में परिवर्तन पहले कैश में किया जाता है और मुख्य स्मृति या निचले स्तर की कैश को बाद में अद्यतन किया जाता है, सामान्यतः तब जब संबंधित कैश लाइन को विस्थापित किया जाता है। इससे बार-बार होने वाले लेखन का ट्रैफिक कम किया जा सकता है, लेकिन कैश लाइन के संशोधित होने की स्थिति को ट्रैक करना आवश्यक होता है।

कैश सुसंगतता

[संपादित करें]

मल्टी-कोर प्रोसेसर में एक ही मेमोरी डेटा की प्रतियाँ एक से अधिक कोर की निजी कैश में हो सकती हैं। यदि एक कोर किसी साझा डेटा को बदलता है, तो अन्य कोर की कैश में मौजूद पुरानी प्रति को उचित रूप से अमान्य या अद्यतन करना आवश्यक होता है।

इस समस्या को कैश सुसंगतता (cache coherence) कहा जाता है। आधुनिक मल्टी-कोर कंप्यूटर वास्तुकला में cache coherence एक महत्वपूर्ण विषय है और इसके लिए विभिन्न hardware coherence protocols तथा mechanisms का उपयोग किया जाता है।[25]

कैश सुसंगतता और मेमोरी कंसिस्टेंसी एक ही अवधारणा नहीं हैं। coherence मुख्यतः किसी विशेष मेमोरी स्थान की विभिन्न कैश प्रतियों के बीच संबंध से जुड़ी होती है, जबकि consistency यह निर्धारित करती है कि विभिन्न मेमोरी अभिगमों का क्रम विभिन्न प्रोसेसरों या थ्रेडों को किस प्रकार दिखाई देता है।

कैश और प्रदर्शन

[संपादित करें]

कैश का प्रभाव केवल प्रोसेसर की कच्ची गति से निर्धारित नहीं होता। किसी प्रोग्राम के मेमोरी-अभिगम पैटर्न का भी महत्वपूर्ण प्रभाव पड़ता है। ऐसे प्रोग्राम जो temporal और spatial locality का अच्छा उपयोग करते हैं, वे अक्सर कैश का अधिक प्रभावी उपयोग कर सकते हैं।[26]

उदाहरण के लिए, किसी बड़े डेटा-समुच्चय पर काम करते समय डेटा को छोटे-छोटे ब्लॉकों में विभाजित करने की तकनीक को blocking या tiling कहा जाता है। इसका उद्देश्य किसी समय उपयोग किए जा रहे डेटा को कैश में रखने की संभावना बढ़ाना और अनावश्यक कैश मिस कम करना है।[27]

इस कारण कंपाइलर, लाइब्रेरी और एप्लिकेशन डेवलपर कई बार ऐसे डेटा-संरचनाओं और एल्गोरिदम का चयन करते हैं जिनमें बेहतर locality हो।

कैश का उदाहरण

[संपादित करें]

मान लें कि कोई प्रोग्राम किसी सरणी के तत्वों को क्रम से पढ़ता है। यदि पहला तत्व पढ़ने पर संबंधित कैश लाइन मुख्य स्मृति से कैश में लाई जाती है, तो उसी लाइन में मौजूद निकटवर्ती तत्व भी कैश में आ सकते हैं। इसलिए अगले कुछ तत्वों को पढ़ने पर वे सीधे कैश में मिल सकते हैं।

इसके विपरीत, यदि प्रोग्राम बहुत बड़े डेटा-समुच्चय में बार-बार दूर-दूर स्थित स्मृति पतों को पढ़ता है, तो प्रत्येक अभिगम अलग कैश लाइन से संबंधित हो सकता है। ऐसी स्थिति में कैश मिस की संख्या बढ़ सकती है और कैश का लाभ कम हो सकता है।[28]

कैश और अन्य कैशिंग प्रणालियाँ

[संपादित करें]

कंप्यूटिंग में कैशिंग की मूल अवधारणा केवल CPU कैश तक सीमित नहीं है। इसी सिद्धांत का उपयोग विभिन्न स्तरों पर किया जाता है। उदाहरण के लिए:

  • वेब ब्राउज़र वेब संसाधनों की स्थानीय प्रतियाँ रख सकता है।
  • ऑपरेटिंग सिस्टम बार-बार उपयोग होने वाले डेटा के लिए मेमोरी में कैश का उपयोग कर सकता है।
  • डेटाबेस सिस्टम डिस्क से पढ़े गए डेटा पृष्ठों को मेमोरी में रख सकते हैं।
  • नेटवर्क प्रणालियाँ बार-बार माँगी जाने वाली सामग्री को मध्यवर्ती स्थान पर रख सकती हैं।
  • CPU cache प्रोसेसर और मुख्य स्मृति के बीच तेज मध्यवर्ती भंडारण प्रदान करती है।

इन सभी में मूल विचार समान है—धीमे स्तर से बार-बार उपयोग होने वाले डेटा की प्रति तेज स्तर पर रखकर औसत अभिगम समय को कम करना।[29]

कैश के प्रमुख लाभ निम्नलिखित हैं:

  • प्रोसेसर और मुख्य स्मृति के बीच प्रभावी विलंबता कम करना।
  • बार-बार उपयोग होने वाले डेटा और निर्देशों को तेज स्तर पर उपलब्ध कराना।
  • मेमोरी ट्रैफिक और मुख्य स्मृति पर दबाव कम करना।
  • प्रोसेसर के बेहतर उपयोग में सहायता करना।
  • locality का लाभ उठाकर प्रोग्राम के वास्तविक प्रदर्शन में सुधार करना।
  • मल्टी-लेवल मेमोरी हाइरार्की के माध्यम से क्षमता, लागत और गति के बीच संतुलन प्रदान करना।[30]

कैश स्वयं मुख्य स्मृति का पूर्ण विकल्प नहीं है। इसकी क्षमता सीमित होती है और जब आवश्यक डेटा कैश में उपलब्ध नहीं होता, तब निचले स्तर की स्मृति से डेटा प्राप्त करना पड़ता है।

कैश का लाभ workload के access pattern पर भी निर्भर करता है। खराब locality, बड़े working set या बार-बार होने वाले conflict और capacity misses के कारण अपेक्षित प्रदर्शन लाभ कम हो सकता है।[31]

इसके अतिरिक्त, अधिक cache capacity और associativity के लिए अधिक silicon area, ऊर्जा और जटिल हार्डवेयर की आवश्यकता हो सकती है। इसलिए कैश डिजाइन में आकार, विलंबता, ऊर्जा, लागत और hit rate के बीच संतुलन बनाना आवश्यक है।

आधुनिक प्रोसेसरों में कैश

[संपादित करें]

आधुनिक CPU में कैश डिजाइन माइक्रोआर्किटेक्चर का एक महत्वपूर्ण भाग है। अलग-अलग प्रोसेसर परिवारों में कैश के आकार, स्तरों की संख्या, साझा या निजी संगठन, associativity, cache-line size और coherence mechanism अलग हो सकते हैं। इसलिए किसी एक प्रोसेसर की L1, L2 या L3 संरचना को सभी आधुनिक प्रोसेसरों के लिए सामान्य नियम नहीं माना जा सकता।[32]

कुछ प्रणालियों में CPU और अन्य processing units के बीच भी cache hierarchy तथा साझा अंतिम-स्तर के कैश का उपयोग किया जाता है। इसका वास्तविक संगठन संबंधित हार्डवेयर वास्तुकला पर निर्भर करता है।[33]

कैश-अनुकूल प्रोग्रामिंग

[संपादित करें]

कैश की संरचना को ध्यान में रखकर प्रोग्राम लिखने की प्रक्रिया को सामान्यतः cache-aware programming कहा जाता है। इसका उद्देश्य डेटा अभिगमों में ऐसी locality उत्पन्न करना है जिससे कैश मिस कम हों और डेटा पुनः उपयोग की संभावना बढ़े।

कुछ सामान्य तकनीकों में शामिल हैं:

  • डेटा को लगातार स्मृति स्थानों में व्यवस्थित करना।
  • बड़े लूपों में blocking या tiling का उपयोग करना।
  • डेटा संरचनाओं में अनावश्यक padding और memory footprint को कम करना।
  • बार-बार उपयोग होने वाले डेटा को पुनः उपयोग करना।
  • ऐसे access patterns से बचना जिनमें बहुत अधिक अनियमित या दूर-दूर के मेमोरी अभिगम हों।[34]

हालाँकि, इन तकनीकों का प्रभाव विशेष प्रोसेसर और workload पर निर्भर करता है; इसलिए वास्तविक प्रदर्शन के लिए profiling और benchmarking उपयोगी होते हैं।

कैश और वर्चुअल मेमोरी

[संपादित करें]

आधुनिक ऑपरेटिंग सिस्टम में वर्चुअल मेमोरी का उपयोग किया जाता है, जिसमें प्रोग्राम द्वारा प्रयुक्त virtual addresses को physical memory addresses में परिवर्तित किया जाता है। कैश और address translation एक ही अवधारणा नहीं हैं, हालांकि आधुनिक प्रोसेसरों में दोनों के बीच हार्डवेयर स्तर पर घनिष्ठ संबंध होता है।

विशेष रूप से, address translation को तेज करने के लिए प्रोसेसर Translation Lookaside Buffer (TLB) जैसी एक अलग छोटी cache का उपयोग कर सकता है। TLB में मेमोरी डेटा नहीं, बल्कि address translations की जानकारी रखी जाती है।[35]

कैश और बफर में अंतर

[संपादित करें]

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

इसलिए प्रत्येक cache को buffer मानना उचित नहीं है और प्रत्येक buffer cache नहीं होता।

कैश आधुनिक कंप्यूटर वास्तुकला में प्रोसेसर प्रदर्शन और मेमोरी सिस्टम के बीच संतुलन स्थापित करने वाली प्रमुख तकनीकों में से एक है। प्रोसेसर की गति और मुख्य स्मृति की विलंबता के बीच अंतर के कारण तेज स्थानीय स्मृति का प्रभावी उपयोग आवश्यक हो गया है। कैश, locality और memory hierarchy का संयुक्त डिजाइन इस अंतर को कम करने में महत्वपूर्ण भूमिका निभाता है।[36]

कैश का महत्व केवल हार्डवेयर तक सीमित नहीं है। एल्गोरिदम और डेटा संरचनाओं के डिजाइन, कंपाइलर अनुकूलन और उच्च-प्रदर्शन कंप्यूटिंग में भी memory locality महत्वपूर्ण भूमिका निभाती है। बड़े डेटा-समुच्चयों पर काम करने वाले प्रोग्रामों में cache behavior कई बार कुल प्रदर्शन का महत्वपूर्ण निर्धारक बन सकता है।[37]

यह भी देखें

[संपादित करें]
  1. ↑ Memory: Cache, University of Maryland, Department of Computer Science.
  2. ↑ Loop Optimizations Where Blocks are Required, Intel.
  3. ↑ Introduction to Caches, University of Maryland, Department of Computer Science.
  4. ↑ Memory Hierarchy, University of Maryland.
  5. ↑ The Memory Hierarchy, University of Maryland.
  6. ↑ Memory Hierarchy, University of Maryland.
  7. ↑ The Principle of Locality, University of Maryland.
  8. ↑ Introduction to Caches, University of Maryland.
  9. ↑ Introduction to Caches, University of Maryland.
  10. ↑ Loop Optimizations Where Blocks are Required, Intel.
  11. ↑ CPU Metrics Reference, Intel.
  12. ↑ Performance Basics, Cornell University.
  13. ↑ The Memory Hierarchy, University of Maryland.
  14. ↑ Cache and Memory Hierarchy Terminology, University of Maryland.
  15. ↑ Caches, Cornell University.
  16. ↑ Direct-Mapped Cache, Cornell University.
  17. ↑ Set-Associative Cache, Cornell University.
  18. ↑ Cache Associativity, Cornell University.
  19. ↑ Fully Associative Cache, Cornell University.
  20. ↑ Cache, Cornell University.
  21. ↑ CPU Metrics Reference, Intel.
  22. ↑ Intel Xeon Processor Scalable Family Technical Overview, Intel.
  23. ↑ Replacement Policies, Cornell University.
  24. ↑ Single-Core Architecture, Cornell University.
  25. ↑ CMSC 411: Computer Systems Architecture, University of Maryland.
  26. ↑ Introduction to Caches, University of Maryland.
  27. ↑ Loop Optimizations Where Blocks are Required, Intel.
  28. ↑ Performance Basics, Cornell University.
  29. ↑ Memory Hierarchy, University of Maryland.
  30. ↑ The Memory Hierarchy, University of Maryland.
  31. ↑ Single-Core Architecture, Cornell University.
  32. ↑ Intel Xeon Processor Scalable Family Technical Overview, Intel.
  33. ↑ Memory Hierarchy, Intel OpenCL Developer Guide.
  34. ↑ Loop Optimizations Where Blocks are Required, Intel.
  35. ↑ The Memory Hierarchy, University of Maryland.
  36. ↑ Memory Hierarchy, University of Maryland.
  37. ↑ Loop Optimizations Where Blocks are Required, Intel.