@ peufeu का जवाब बताता है कि ये सिस्टम-वाइड एग्रीगेट बैंडविद हैं। इंटेल सैंडीब्रिज-परिवार में एल 1 और एल 2 निजी प्रति-कोर कैश हैं, इसलिए संख्या 2x है जो एक एकल कोर कर सकता है। लेकिन यह अभी भी हमें एक प्रभावशाली उच्च बैंडविड्थ, और कम विलंबता के साथ छोड़ देता है।
L1D कैश को CPU कोर में सही तरीके से बनाया गया है, और इसे लोड निष्पादन इकाइयों (और स्टोर बफर) के साथ बहुत कसकर जोड़ा गया है । इसी तरह, एल 1 आई कैश कोर के इंस्ट्रक्शन फ़ोकस / डिकोड भाग के ठीक बगल में है। (मैंने वास्तव में एक सैंडब्रिज सिलिकॉन फ्लोरप्लान को नहीं देखा है, इसलिए यह अक्षरशः सत्य नहीं हो सकता है। फ्रंट-एंड का मुद्दा / नाम बदलने वाला हिस्सा संभवतः "L0" डिकोड किए गए यूओपी कैश के करीब है, जो बिजली बचाता है और बेहतर बैंडविड्थ है डिकोडर्स की तुलना में।)
लेकिन L1 कैश के साथ, भले ही हम हर चक्र में पढ़ सकें ...
वहां क्यों रुके? Sand8 के बाद से Intel और K8 चूंकि K8 प्रति चक्र 2 भार को निष्पादित कर सकता है। मल्टी-पोर्ट कैश और टीएलबी एक चीज है।
डेविड कंटर के सैंडब्रिज माइक्रोआर्किटेक्चर राइट-अप में एक अच्छा चित्र है (जो आपके आईवीब्रिज सीपीयू पर भी लागू होता है:
("यूनिफाइड शेड्यूलर" ALU और मेमोरी यूओपी को अपने इनपुट्स के तैयार होने के इंतजार में रखता है, और / या अपने निष्पादन पोर्ट के लिए प्रतीक्षा कर रहा है। (उदाहरण के vmovdqa ymm0, [rdi]
लिए एक लोड यूओपी पर डिकोड होता है, जिसके लिए इंतजार करना पड़ता है rdi
यदि पिछले add rdi,32
किसी ने अभी तक निष्पादित नहीं किया है, के लिए) उदाहरण)। इंटेल शेड्यूल को पोर्ट्स पर जारी / नाम बदलने के समय पर करता है । यह आरेख केवल मेमोरी यूओपी के लिए निष्पादन पोर्ट दिखा रहा है, लेकिन इसके लिए संयुक्त राष्ट्र के निष्पादित ALU यूओपी भी प्रतिस्पर्धा करते हैं। मुद्दा / नाम चरण ROB और अनुसूचक के लिए यूओपी जोड़ता है। वे सेवानिवृत्ति तक आरओबी में रहते हैं, लेकिन अनुसूचक में केवल निष्पादन बंदरगाह तक भेजते हैं। (यह इंटेल शब्दावली है; अन्य लोग मुद्दे का उपयोग करते हैं और अलग तरीके से भेजते हैं)। AMD पूर्णांक / FP के लिए अलग शेड्यूलर का उपयोग करता है, लेकिन एड्रेसिंग मोड हमेशा पूर्णांक रजिस्टरों का उपयोग करता है
जैसा कि पता चलता है, केवल 2 AGU पोर्ट (एड्रेस-जेनरेशन यूनिट्स हैं, जो एक एड्रेसिंग मोड को लेते हैं [rdi + rdx*4 + 1024]
और एक रैखिक एड्रेस का उत्पादन करते हैं)। यह 2 मेमोरी ऑप्स प्रति घड़ी (128 बी / 16 बाइट्स प्रत्येक) को निष्पादित कर सकता है, उनमें से एक स्टोर तक है।
लेकिन इसकी आस्तीन में एक चाल है: SnB / IvB 256b AVX लोड / स्टोर को एक एकल यूओपी के रूप में चलाता है जो लोड / स्टोर पोर्ट में 2 चक्र लेता है, लेकिन केवल पहले चक्र में एजीयू की आवश्यकता होती है। यह स्टोर-एड्रेस यूओपी को किसी भी लोड थ्रूपुट को खोए बिना उस दूसरे चक्र के दौरान 2/3 पर एजीयू पर चलाने की सुविधा देता है। तो AVX के साथ (जो Intel Pentium / Celeron CPUs समर्थन नहीं करता है: /), SnB / IvB (सिद्धांत रूप में) 2 भार और प्रति चक्र 1 स्टोर बनाए रख सकता है।
आपका IvyBridge CPU सैंडब्रिज की डाई - सिकुड़न है (कुछ सूक्ष्मजैविक सुधारों के साथ , जैसे- विल -उन्मूलन , ERMSB (मेमरी / मेमसेट), और अगले पृष्ठ हार्डवेयर प्रीफ़ेटिंग)। उसके बाद की पीढ़ी (हैसवेल) ने प्रति यूनिट L1D बैंडविड्थ को दोगुना कर दिया, निष्पादन इकाइयों से डेटा पथों को L1 से 128b से 256b तक चौड़ा कर दिया ताकि AVX 256b भार 2 प्रति घड़ी कायम रह सके। इसमें साधारण एड्रेसिंग मोड के लिए एक अतिरिक्त स्टोर-एजीयू पोर्ट भी जोड़ा गया है।
हैसवेल / स्काईलेक का शिखर थ्रूपुट 96 बाइट्स प्रति घड़ी लोड + संग्रहीत है, लेकिन इंटेल के अनुकूलन मैनुअल से पता चलता है कि स्काईलेक का निरंतर औसत थ्रूपुट (अभी भी कोई एल 1 डी या टीएलबी याद नहीं है) ~ 81 बी प्रति चक्र है। (एक स्केलर पूर्णांक लूप SKL पर मेरे परीक्षण के अनुसार प्रति घड़ी 2 लोड + 1 स्टोर बनाए रख सकता है , 4 फ़्यूज़-डोमेन यूओपी से प्रति घड़ी 7 (अप्रयुक्त-डोमेन) यूपीएस निष्पादित करता है। लेकिन यह 64-बिटबैंड के बजाय कुछ हद तक धीमा हो जाता है। 32-बिट, इसलिए स्पष्ट रूप से कुछ माइक्रोऑर्किटेक्टुरल संसाधन सीमा है और यह स्टोरेज-एड्रेस यूओपी को केवल 2/3 पोर्ट करने और लोड से साइकिल चोरी करने का मुद्दा नहीं है।)
हम अपने मापदंडों से कैश के थ्रूपुट की गणना कैसे करते हैं?
आप नहीं कर सकते, जब तक कि मापदंडों में व्यावहारिक थ्रूपुट संख्या शामिल नहीं है। जैसा कि ऊपर उल्लेख किया गया है, यहां तक कि स्काईलेक का एल 1 डी 256b वैक्टर के लिए लोड / स्टोर निष्पादन इकाइयों के साथ काफी नहीं रख सकता है। यद्यपि यह करीब है, और यह 32-बिट पूर्णांक के लिए कर सकता है। (यह समझ में नहीं आता है कि कैश में लोड यूनिट्स की तुलना में अधिक पोर्ट्स हैं, या इसके विपरीत, आपने बस हार्डवेयर को छोड़ दिया है जो कभी भी पूरी तरह से उपयोग नहीं किया जा सकता है। ध्यान दें कि एल 1 डी में लाइनें भेजने / प्राप्त करने के लिए अतिरिक्त पोर्ट हो सकते हैं। / अन्य कोर से, साथ ही कोर के भीतर से पढ़ता / लिखता है।)
डेटा बस की चौड़ाई और घड़ियों को देखने से आपको पूरी कहानी नहीं मिलती।
L2 और L3 (और मेमोरी) बैंडविड्थ को बकाया मिसाइलों की संख्या द्वारा सीमित किया जा सकता है जो L1 या L2 ट्रैक कर सकते हैं । बैंडविड्थ विलंबता * max_concurrency से अधिक नहीं हो सकता है, और उच्च विलंबता L3 के साथ चिप्स (जैसे कई-कोर Xeon) में एक ही माइक्रोऑर्किटेक्चर के दोहरे / क्वाड कोर सीपीयू की तुलना में बहुत कम सिंगल-कोर L3 बैंडविड्थ है। इस SO उत्तर का "विलंब-बाउंड प्लेटफ़ॉर्म" अनुभाग देखें । सैंडब्रिज-परिवार CPU में L1D मिसेस (NT स्टोर द्वारा उपयोग की जाने वाली) को ट्रैक करने के लिए 10 लाइन-फिल बफ़र्स हैं।
(कई कोर सक्रिय के साथ कुल L3 / मेमोरी बैंडविड्थ एक बड़े Xeon पर बहुत बड़ा है, लेकिन एकल-थ्रेडेड कोड एक ही घड़ी की गति पर क्वाड कोर की तुलना में बदतर बैंडविड्थ को देखता है क्योंकि अधिक कोर का मतलब रिंग बस पर अधिक स्टॉप है, और इस तरह उच्चतर विलंबता L3।)
कैश विलंबता
ऐसी गति कैसे प्राप्त की जाती है?
L1D कैश का 4 चक्र लोड-उपयोग विलंबता बहुत अद्भुत है , विशेष रूप से यह देखते हुए कि इसे एक एड्रेसिंग मोड के साथ शुरू करना है [rsi + 32]
, इसलिए इसे एक वर्चुअल एड्रेस होने से पहले भी एक ऐड करना होगा । फिर उसे एक मैच के लिए कैशे टैग की जाँच के लिए भौतिक में अनुवाद करना होगा।
( [base + 0-2047]
इंटेल सैंडीब्रिज-परिवार पर एक अतिरिक्त चक्र लेने के अलावा अन्य मोड को संबोधित करना , इसलिए साधारण एड्रेसिंग मोड के लिए AGUs में एक शॉर्टकट है (पॉइंटर-पीछा मामलों के लिए विशिष्ट है जहां कम लोड-उपयोग विलंबता शायद सबसे महत्वपूर्ण है, लेकिन सामान्य रूप से भी सामान्य है) । ( इंटेल का अनुकूलन मैनुअल देखें , सैंडब्रिज खंड 2.3.5.2 L1 DCache।) यह कोई खंड ओवरराइड नहीं मानता है, और इसका एक खंड आधार पता है 0
, जो सामान्य है।)
यह देखने के लिए कि क्या यह किसी भी पहले के स्टोर के साथ ओवरलैप है, स्टोर बफर को भी जांचना होगा। और यह पता लगाना है कि कहीं पहले (प्रोग्राम ऑर्डर में) स्टोर-एड्रेस यूओपी को अभी तक निष्पादित नहीं किया गया है, इसलिए स्टोर-एड्रेस का पता नहीं है। लेकिन संभवतः यह एक L1D हिट के लिए जाँच के समानांतर हो सकता है। यदि यह पता चलता है कि L1D डेटा की आवश्यकता नहीं थी क्योंकि स्टोर-फ़ॉरवर्डिंग स्टोर बफर से डेटा प्रदान कर सकता है, तो यह कोई नुकसान नहीं है।
Intel VIPT का उपयोग करता है (वस्तुतः अनुक्रमित शारीरिक रूप से टैग किया हुआ) लगभग हर किसी की तरह कैश का उपयोग करता है, कैश के पर्याप्त छोटे होने के मानक चाल का उपयोग करते हुए और उच्च समरूपता के साथ कि यह VIPT की गति के साथ एक PIPT कैश (कोई aliasing) की तरह व्यवहार कर सकता है (इंडेक्स कर सकता है) TLB आभासी-> भौतिक देखने के साथ समानांतर)।
इंटेल का L1 कैश 32kiB, 8-वे एसोसिएटिव हैं। पृष्ठ का आकार 4kiB है। इसका अर्थ है "इंडेक्स" बिट्स (जो चयन करते हैं कि कौन से 8 तरीके किसी भी लाइन को कैश कर सकते हैं) पृष्ठ ऑफसेट के नीचे हैं; यानी उन पते बिट्स एक पृष्ठ में ऑफसेट हैं, और हमेशा आभासी और भौतिक पते में समान होते हैं।
उसके बारे में अधिक जानकारी के लिए और क्यों छोटे / तेज़ कैश उपयोगी / संभव हैं (और बड़े धीमे कैश के साथ जोड़े जाने पर अच्छी तरह से काम करते हैं) के अन्य विवरण के लिए, मेरा जवाब L2D L2 की तुलना में छोटा / तेज़ क्यों है पर देखें ।
छोटे कैश वे काम कर सकते हैं जो बड़े कैश में बहुत अधिक बिजली-खर्चीले होंगे, जैसे कि एक सेट से डेटा सरणियों को लाने के साथ-साथ टैग लगाना। एक बार एक तुलनित्र को पता चलता है कि कौन सा टैग मेल खाता है, उसे सिर्फ आठ 64-बाइट कैश लाइनों में से एक को मिटाना होगा जो पहले ही SRAM से मंगाई गई थी।
(यह वास्तव में इतना आसान नहीं है: सैंडीब्रिज / आइवीब्रिज एक बैंक वाले एल 1 डी कैश का उपयोग करता है, जिसमें 16 बाइट्स वाले आठ बैंक होते हैं। यदि आप एक ही बैंक में अलग-अलग कैश लाइनों में दो एक्सेस एक ही चक्र में निष्पादित करने का प्रयास करते हैं, तो आप कैश-बैंक संघर्ष प्राप्त कर सकते हैं। (8 बैंक हैं, इसलिए यह 128 के एक से अधिक के पते के साथ हो सकता है, अर्थात 2 कैश लाइनें।)
जब तक यह 64B कैश-लाइन सीमा को पार नहीं करता है, तब तक आइवीब्रिज के पास अनलगनेटेड एक्सेस के लिए कोई जुर्माना नहीं है। मुझे लगता है कि यह पता चलता है कि कौन से बैंक (ओं) को कम पते के बिट्स के आधार पर प्राप्त करना है, और यह निर्धारित करना है कि जो भी स्थानांतरण हो रहा है उसे सही 1 से 16 बाइट्स डेटा प्राप्त करने की आवश्यकता होगी।
कैश-लाइन विभाजन पर, यह अभी भी केवल एक ही है, लेकिन कई कैश एक्सेस करता है। 4k-विभाजन पर छोड़कर, दंड अभी भी छोटा है। स्काईलेक 4k स्प्लिट्स को काफी सस्ता बनाता है, जिसमें 11 चक्रों के साथ विलंबता होती है, जो कि जटिल एड्रेसिंग मोड के साथ सामान्य कैश-लाइन विभाजन के समान है। लेकिन 4k- विभाजन थ्रूपुट cl-विभाजित गैर-विभाजन से काफी खराब है।
स्रोत :