डेटा और निर्देशों के लिए अलग-अलग एल 1 कैश क्यों हैं?


23

बस कुछ स्लाइड्स पर गए और देखा कि L1 कैश (इंटेल सीपीयू पर कम से कम) डेटा और निर्देश कैश के बीच अंतर करता है, मैं जानना चाहूंगा कि यह क्यों है ..


जवाबों:


28

वास्तव में कई कारण हैं।

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

दूसरा, यह सर्किटरी को थोड़ा सरल करता है - डेटा कैश को रीड और राइट से निपटना होता है, लेकिन इंस्ट्रक्शन कैश केवल रीड से संबंधित होता है। (यह स्व-संशोधित कोड इतना महंगा क्यों है - निर्देश कैश में डेटा को सीधे ओवरराइट करने के बजाय, राइट डेटा कैश से होकर L2 कैश तक जाता है, और फिर निर्देश कैश में लाइन अमान्य और पुनः है -L2 से लोड किया गया)।

तीसरा, यह बैंडविड्थ बढ़ाता है: अधिकांश आधुनिक प्रोसेसर निर्देश कैश और डेटा कैश से डेटा को एक साथ पढ़ सकते हैं। अधिकांश भी कैश करने के लिए "प्रवेश द्वार" पर कतारें हैं, इसलिए वे वास्तव में दो पढ़ सकते हैं और किसी भी चक्र में लिख सकते हैं।

चौथा, यह शक्ति बचा सकता है। जब आपको मेमोरी सेल को अपनी सामग्री बनाए रखने के लिए खुद को शक्ति बनाए रखने की आवश्यकता होती है, तो कुछ प्रोसेसर संबंधित सर्किटरी (डिकोडर्स और ऐसे) के कुछ बिजली का उपयोग कर सकते हैं / कर सकते हैं जब उनका उपयोग नहीं किया जा रहा हो। अलग-अलग कैश के साथ, वे निर्देशों और डेटा के लिए इन सर्किटों को अलग-अलग कर सकते हैं, किसी भी चक्र के दौरान बिना सर्किट के शेष रहने की संभावना को बढ़ा सकते हैं (मुझे यकीन नहीं है कि कोई x86 प्रोसेसर ऐसा करता है - AFAIK, यह एक एआरएम से अधिक है चीज़)।


3
यह उल्लेख करना भी महत्वपूर्ण है कि कोड और डेटा अलग-अलग एक्सेस पैटर्न प्रदर्शित कर सकते हैं; उदाहरण के लिए, किसी सरणी में सभी तत्वों को समेटने के निर्देश अस्थायी लोकलिटी (समान निर्देशों का उपयोग अक्सर किया जाता है (यदि आप इसे लूप करते हैं)) और ऐरे में डेटा स्थानिक स्थान दिखाते हैं (निम्नलिखित डेटा अगला उपयोग किया जाता है)।
19-28 को गैबलिन

1
@ गैब्लिन: जबकि सच है, पैटर्न में अंतर अक्सर एक एकीकृत कैश के पक्ष में होगा। जैसा कि आप उल्लेख करते हैं, एक तंग पाश में, अधिकांश अनुदेश कैश बेकार बैठे हैं। एक एकीकृत कैश मूल रूप से लूप की अवधि के लिए डेटा कैश के आकार को दोगुना कर देगा।
जेरी कॉफिन

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

@ डॉनल फेलो: हाँ, वास्तव में। मुझे अच्छी तरह से पता है कि कैसे जल्दी कैशिंग किया गया था, और वे एक विभाजित कैश में क्यों बदल गए।
जेरी कॉफिन

5

अचल संपत्ति की तरह, कैश का उपयोग तीन चीजों से संचालित होता है: स्थान, स्थान, स्थान। कैश होने की पूरी बात यह है कि अधिकांश कार्यक्रम स्थान के पैटर्न को प्रदर्शित करते हैं: यदि वे बाइट 1111111 तक पहुंचते हैं, तो अगले बाइट तक वे पहुंचेंगे शायद 1111110 या 1111112, और इतना बाइट 9999999 नहीं है। हालांकि, अधिकांश कार्यक्रम बहुत अलग दिखेंगे उनके निर्देशों और उनके डेटा के लिए स्थान के पैटर्न। इसका मतलब यह है कि यह निर्देश और डेटा के लिए कैश को कुशलता से साझा करने में सक्षम होने की संभावना नहीं है। क्योंकि निर्देश और डेटा आवश्यक रूप से स्मृति में एक दूसरे के पास नहीं हैं। डेटा एक्सेस कैश से निर्देश को टक्कर देगा, और लोडिंग निर्देश कैश से डेटा टकराएगा।

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