x86 - इंटेल कोर i7 प्रोसेसर में किस कैश मैपिंग तकनीक का उपयोग किया जाता है?



intel amd (1)

मैंने अलग-अलग कैश मैपिंग तकनीक के बारे में सीखा है जैसे डायरेक्ट मैपिंग, एसोसिएट मैपिंग और सेट एसोसिएटिव मैपिंग तकनीक और ट्रेड-ऑफ भी सीखे। लेकिन मैं उत्सुक हूं कि आजकल इंटेल कोर i7 या एएमडी प्रोसेसर में क्या उपयोग किया जाता है। और तकनीकें कैसे विकसित होती हैं। और ऐसी कौन सी चीजें हैं जिन्हें सुधारने की आवश्यकता है?


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

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

आधुनिक सीपीयू इतनी तेज़ हैं कि DRAM विलंबता 200 से अधिक कोर घड़ी चक्र हैं, जो कि कैश आउट पर बहुत अच्छी तरह से छिपाने के लिए शक्तिशाली आउट-ऑफ-ऑर्डर निष्पादन सीपीयू के लिए बहुत बड़ा है।

मल्टी-लेवल कैश आवश्यक हैं (और इसका उपयोग सभी उच्च-प्रदर्शन सीपीयू के लिए किया जाता है) सबसे कम डेटा (जैसे 2 भार और 1 स्टोर प्रति घड़ी , 128, 256 के साथ) के लिए कम विलंबता (~ 4 चक्र) / उच्च थ्रूपुट देने के लिए। या L1D कैश और वेक्टर लोड / स्टोर निष्पादन इकाइयों के बीच 512-बिट पथ), जबकि अभी भी एक उचित आकार के कार्य सेट को कैश करने के लिए पर्याप्त बड़ा है। शारीरिक रूप से असंभव है कि एक बहुत बड़े / बहुत तेज़ / अत्यधिक-सहयोगी कैश का निर्माण किया जाए जो कि विशिष्ट वर्कलोड के साथ-साथ वर्तमान बहु-स्तरीय कैश भी करता है; जब डेटा को भौतिक रूप से यात्रा करना पड़ता है तो गति में कमी होती है। बिजली की लागत भी निषेधात्मक होगी। (वास्तव में, पावर / पावर घनत्व आधुनिक सीपीयू के लिए एक प्रमुख सीमित कारक है, आधुनिक माइक्रोप्रोसेसरों को देखें : एक 90-मिनट गाइड ।)

कैश के सभी स्तर (यूओपी कैश को छोड़कर) शारीरिक रूप से अनुक्रमित / शारीरिक रूप से उन सभी x86 सीपीयू में टैग किए गए हैं जिनसे मैं अवगत हूं। अधिकांश डिज़ाइनों में L1D कैश पेज ऑफ़सेट के नीचे से अपने इंडेक्स बिट्स को लेते हैं, और इस प्रकार वे टीएलबी लुकअप को भी टैग भ्रूण के साथ समानांतर में होने देते हैं, लेकिन बिना किसी अन्य समस्या के। इस प्रकार, कैश को संदर्भ स्विच या कुछ भी पर फ्लश करने की आवश्यकता नहीं है। (सामान्य में मल्टी-लेवल कैश और VIPT स्पीड ट्रिक के बारे में अधिक के लिए यह उत्तर देखें और कुछ वास्तविक N86 सीपीयू के कुछ कैश पैरामीटर।)

निजी (प्रति-कोर) L1D / L1I और L2 कैश पारंपरिक सेट-एसोसिएटिव कैश हैं , जो अक्सर छोटे / तेज़ कैश के लिए 8-वे या 4-वे होते हैं। सभी आधुनिक x86 सीपीयू पर कैश लाइन का आकार 64 बाइट्स है। डेटा कैश राइट-बैक हैं। (एएमडी बुलडोजर-परिवार को छोड़कर, जहां L1D एक छोटे 4kiB राइट-कॉम्बिनेशन बफर के साथ राइट-थ्रू है।)

http://www.7-cpu.com/ पास अच्छे कैश संगठन / विलंबता संख्याएं, और बैंडविड्थ, और टीएलबी संगठन / प्रदर्शन संख्याएं हैं, जो विभिन्न सूक्ष्मकणों के लिए कई x86 सहित, जैसे हैसवेल

इंटेल सैंडीब्रिज-परिवार में "L0" डिकोडेड-यूओपी कैश सेट-एसोसिएटिव और वस्तुतः संबोधित है । मशीन कोड के 32-बाइट ब्लॉक में निर्देशों के अनुसार 6 यूओपी तक के 3 ब्लॉक तक परिणाम को कैश कर सकते हैं। संबंधित: इंटेल एसएनबी-परिवार सीपीयू पर सूक्ष्म-कोडित निर्देशों को शामिल करने वाले छोरों के लिए शाखा संरेखण । (एओपी कैश x86 के लिए एक बड़ा अग्रिम है: x86 निर्देश चर-लंबाई और हार्ड को तेज / डीकोड करने के लिए समानांतर हैं, इसलिए आंतरिक डिकोड परिणामों के साथ-साथ मशीन कोड (L1I $) को कैशिंग में महत्वपूर्ण शक्ति और थ्रूपुट फायदे हैं। शक्तिशाली) डिकोडर्स की अभी भी जरूरत है, क्योंकि यूओपी कैश बड़ी नहीं है; यह लूप्स (मध्यम से बड़े छोरों सहित) में सबसे प्रभावी है। यह कमजोर डिकोडर होने और भरोसा करने पर पेंटियम 4 गलती (या उस समय ट्रांजिस्टर आकार पर आधारित सीमा) से बचा जाता है। ट्रेस कैश।)

आधुनिक इंटेल (एएमडी (एएमडी, मैं मानता हूं) एल 3 उर्फ ​​एलएलसी उर्फ अंतिम-स्तरीय कैश एक इंडेक्सिंग फ़ंक्शन का उपयोग करता है जो कि पता बिट्स की एक सीमा नहीं है । यह एक हैश फंक्शन है जो फिक्स्ड स्ट्राइड से टकराव को कम करने के लिए चीजों को बेहतर तरीके से वितरित करता है। इंटेल के अनुसार मेरा कैश 24-तरफा साहचर्य होना चाहिए, हालांकि इसका 12-तरीका, यह कैसे है?

Nehalem से , Intel ने एक बड़े समावेशी साझा L3 कैश का उपयोग किया है , जो कोर के बीच सुसंगतता ट्रैफ़िक को फ़िल्टर करता है । यानी जब एक कोर डेटा पढ़ता है जो किसी अन्य कोर के एल 1 डी में संशोधित स्थिति में है, तो एल 3 टैग कहते हैं कि कौन सा कोर, इसलिए एक आरएफओ (रीड फॉर ओनरशिप) केवल प्रसारण के बजाय उस कोर को भेजा जा सकता है। आधुनिक इंटेल सीपीयू L3 कैश कैसे व्यवस्थित किया जाता है? । समावेशी संपत्ति महत्वपूर्ण है, क्योंकि इसका मतलब है कि कोई भी निजी L2 या L1 कैश में L3 के बिना कैश लाइन की एक प्रति नहीं हो सकती है। यदि यह एक निजी कैश में अनन्य या संशोधित स्थिति में है, तो L3 में उस लाइन के लिए अमान्य डेटा होगा, लेकिन टैग अभी भी कहेंगे कि कौन सी कोर की प्रतिलिपि हो सकती है। कोर के पास निश्चित रूप से एक प्रति नहीं है, इसके बारे में एक संदेश भेजने की आवश्यकता नहीं है, कोर और एल 3 के बीच आंतरिक लिंक पर बिजली और बैंडविड्थ की बचत। देखें क्यों चिप चिप कैश सुसंगतता इंटेल "i7" (यानी नेहेलम और सैंडीब्रिज-परिवार में ऑन-चिप कैश सुसंगतता के बारे में अधिक विवरण के लिए यहां रहना है , जो अलग-अलग आर्किटेक्चर हैं, लेकिन एक ही कैश पदानुक्रम का उपयोग करें)।

Core2Duo में एक साझा अंतिम-स्तरीय कैश (L2) था, लेकिन L2 यादों पर RFO (रीड-फॉर-ओनरशिप) अनुरोधों को उत्पन्न करने में धीमा था। तो L1d में फिट होने वाले छोटे बफर के साथ कोर के बीच बैंडविड्थ L2 (यानी DRAM गति) में फिट नहीं होने वाले बड़े बफर के साथ धीमा है। जब L2 में बफ़र फिट होता है, तो आकारों की एक तेज़ श्रृंखला होती है, लेकिन L1d नहीं, क्योंकि लेखन कोर L2 के लिए अपने स्वयं के डेटा को प्रदर्शित करता है, जहां RFO अनुरोध को उत्पन्न किए बिना दूसरे कोर का लोड हिट कर सकता है। ( चित्र 3.27 देखें : कोर 2 बैंड उलरिच ड्रेपर के "थ्रू हर प्रोग्रामर को मेमोरी के बारे में क्या होना चाहिए" में 2 थ्रेड्स के साथ बैंडविड्थ । "( यहां पूर्ण संस्करण )।

Skylake-AVX512 में प्रति कोर बड़ा L2 (256k के बजाय 1MiB), और प्रति कोर में L3 (LLC) स्लाइस होता है। यह अब समावेशी नहीं है । यह कोर को एक दूसरे से जोड़ने के लिए रिंग बस के बजाय एक जाल नेटवर्क का उपयोग करता है। इस आनंदटेक लेख को देखें (लेकिन इसमें अन्य पृष्ठों पर सूक्ष्म-वैज्ञानिक विवरणों में कुछ अशुद्धियाँ हैं, जो टिप्पणी मैंने छोड़ी है उसे देखें )।

Intel® Xeon® प्रोसेसर स्केलेबल पारिवारिक तकनीकी अवलोकन से

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

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

या हो सकता है कि स्नूप फ़िल्टर अभी भी सभी L2 / L1 टैग के कड़ाई से समावेश किए बिना उपयोगी हो। मैं मल्टी-कोर / मल्टी-सॉकेट स्नूप प्रोटोकॉल का विशेषज्ञ नहीं हूं। मुझे लगता है कि वही स्नूप फिल्टर सॉकेट्स के बीच स्नूप अनुरोधों को फ़िल्टर करने में भी मदद कर सकता है। (ब्रॉडवेल और पूर्व में, केवल क्वाड-सॉकेट और उच्च Xeons में इंटर-कोर नेटवर्क के लिए एक स्नूप फ़िल्टर है; दोहरे सॉकेट-केवल ब्रॉडवेल एक्सॉन और पहले दोनों सॉकेट्स के बीच स्नूप अनुरोधों को फ़िल्टर नहीं करते हैं ।)

AMD Ryzen , cores के समूहों के लिए अलग L3 कैश का उपयोग करता है , इसलिए कई समूहों में साझा किए गए डेटा को L3 में प्रत्येक क्लस्टर के लिए डुप्लिकेट करना पड़ता है। इसके अलावा महत्वपूर्ण बात यह है कि एक क्लस्टर में एक कोर से लिखते हैं, दूसरे क्लस्टर में एक कोर को दिखाई देने में अधिक समय लगता है, जिसमें सुसंगतता के साथ क्लस्टर के बीच एक इंटरकनेक्ट पर जाने का अनुरोध होता है। (मल्टी सॉकेट इंटेल सिस्टम में सॉकेट्स के बीच, जहां प्रत्येक सीपीयू पैकेज का अपना एल 3 है।)

तो यह हमें NUCA (नॉन-यूनिफ़ॉर्म कैश एक्सेस) देता है, जो सामान्य NUMA (नॉन-यूनिफ़ॉर्म मेमोरी एक्सेस) के अनुरूप होता है, जो आपको एक मल्टी-सॉकेट सिस्टम में मिलता है, जहाँ प्रत्येक प्रोसेसर में एक मेमोरी कंट्रोलर अंतर्निहित होता है, और स्थानीय मेमोरी एक्सेस करता है। दूसरे सॉकेट से जुड़ी मेमोरी तक पहुँचने से तेज़।

हाल के इंटेल मल्टी-सॉकेट सिस्टम में विन्यास योग्य स्नूप मोड हैं, इसलिए सिद्धांत रूप में आप जिस वर्कलोड को चला रहे हैं, उसके लिए सबसे अच्छा काम करने के लिए NUMA तंत्र को ट्यून कर सकते हैं। उपलब्ध स्नूप मोड की तालिका + विवरण के लिए ब्रॉडवेल-एक्सॉन के बारे में इंटेल का पेज देखें।

एक अन्य अग्रिम / विकास I3Bridge पर और बाद में L3 में एक अनुकूली प्रतिस्थापन नीति है । यह प्रदूषण को कम कर सकता है जब कुछ डेटा में अस्थायी स्थानीयता होती है लेकिन काम करने वाले सेट के अन्य हिस्से बहुत बड़े होते हैं। (यानी मानक LRU प्रतिस्थापन के साथ एक विशाल सरणी पर लूपिंग सब कुछ बेदखल कर देगा, L3 कैश को केवल उस सरणी से डेटा कैशिंग करना होगा जो जल्द ही फिर से छुआ नहीं जाएगा। अनुकूली प्रतिस्थापन उस समस्या को कम करने का प्रयास करता है।)

आगे की पढाई: