कैश इतनी तेजी से कैसे हो सकता है?


37

यहाँ एक कैश बेंचमार्क का स्क्रीनशॉट दिया गया है:

AIDA64 कैश और मेमोरी बेंचमार्क के परिणाम

बेंचमार्क में L1 कैश रीड स्पीड लगभग 186 GB / s है, जिसमें विलंबता लगभग 3-4 घड़ी चक्र है। ऐसी गति कैसे प्राप्त की जाती है?

यहाँ स्मृति पर विचार करें: सैद्धांतिक अधिकतम गति 665 मेगाहर्ट्ज (मेमोरी फ़्रीक्वेंसी) x 2 (डबल डेटा दर) x 64 बिट (बस चौड़ाई) है जो लगभग 10.6 GB / s है, जो 9.6 GB / s के मानदंड मान के करीब है ।

लेकिन एल 1 कैश के साथ, भले ही हम प्रोसेसर के साथ हर चक्र पर इसकी अधिकतम आवृत्ति (3 गीगाहर्ट्ज) पर पढ़ सकते हैं, हमें इस तरह के थ्रूपुट को प्राप्त करने के लिए लगभग 496 डेटा लाइनों की आवश्यकता होगी, जो अवास्तविक लगता है। यह अन्य कैश पर भी लागू होता है।

मुझे किसकी याद आ रही है? हम अपने मापदंडों से कैश के थ्रूपुट की गणना कैसे करते हैं?


14
क्या आपने माना है कि L1,2,3 कैश कितना छोटा है और समान रूप से जहां वह भौतिक रूप से रहता है। टिप, यदि आप पूरे चिप के मालिक हैं, तो आपको बस मानक के साथ चिंता करने की आवश्यकता नहीं है
जॉनआरबी

2
इसके अलावा: क्या बेंचमार्क काफी कुछ जानता है कि वह यह सुनिश्चित करने के लिए क्या कर रहा है कि कुछ डेटा जो किसी रजिस्टर के अंदर सीधे नहीं रखे गए हैं?
रैकैंडबॉमनमैन

7
@rackandboneman: AIDA64 एक अच्छी तरह से सम्मानित बेंचमार्क है, न कि कुछ ऐसा जिसे किसी ने C में हैक कर लिया और कंपाइलर को कुछ लोड का अनुकूलन करने दिया! मुझे लगता है कि एसएसबी या एवीएक्स संस्करणों के साथ माइक्रोबेनमार्क भागों को विधानसभा में लिखा जाता है।
पीटर कॉर्डेस

1
@Peter कॉर्ड संतोषजनक उत्तर - एक आवश्यक प्रश्न के लिए।
रैकैंडबॉमनमैन

1
थिंक को शारीरिक परिप्रेक्ष्य में रखने के लिए: 1.4 नैनोसेकंड में प्रकाश एक फुट और एक आधे के बारे में यात्रा करता है। इसका मतलब है कि अगर कैश मदरबोर्ड के दूसरी तरफ स्थित था, तो इस तरह की एक विलंबता सापेक्षता को तोड़ सकती है। या माप त्रुटि हो
आर्थर

जवाबों:


35

इस CPU है ...

प्रत्येक कोर के लिए 2 कोर ए 32-केबी अनुदेश और 32-केबी डेटा प्रथम-स्तरीय कैश (एल 1)

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

Read   93 GB/s
Write  47 GB/s
Copy   90 GB/s

अब, "लिखने" की तुलना में तथ्य "प्रति" 2x अधिक तेज है। इसे लिखने की तुलना में यह तेजी से कैसे कॉपी कर सकता है? मैं शर्त लगा रहा हूं कि "कॉपी" के रूप में बेंचमार्क क्या प्रदर्शित करता है, थ्रूपुट पढ़ने + लिखने का योग है, और इस मामले में यह दोनों 45 जीबी / एस पर पढ़ना और लिखना होगा, लेकिन 90 प्रदर्शित करता है, क्योंकि यह एक बेंचमार्क है, और कौन बेंचमार्क पर भरोसा करता है? तो चलिए "कॉपी" को अनदेखा करते हैं।

Read   93 GB/s => 30 bytes/clock
Write  47 GB/s => 15 bytes/clock

अब, एक 128-बिट रजिस्टर 16 बाइट्स है, जो काफी करीब है, इसलिए ऐसा लगता है कि यह कैश दो 128-बिट रीड और एक घड़ी के अनुसार लिख सकता है।

यह वास्तव में आप वास्तव में उन SSE नंबर-क्रंचिंग निर्देशों को सरल बनाना चाहते हैं: दो रीड और एक प्रति चक्र लिखते हैं।

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


4
दस्तावेज़ के पृष्ठ 55 पर @ इसके अगले-हैक लिंक "आंतरिक रूप से, एक्सेस 16 बाइट्स तक हैं। [...] दो लोड संचालन और एक स्टोर ऑपरेशन को प्रत्येक चक्र को संभाला जा सकता है"। यह बताता है कि क्यों पढ़ा जाता है दो गुना तेज है - यह एक ही काम करते हुए एक ही ऑपरेशन में दो रीड कर सकता है।
टॉम कारपेंटर

2
हां, यह स्पष्ट रूप से कॉपी BW = पढ़ने और लिखने की गिनती है। यह विकल्प के रूप में के रूप में मान्य लगता है, क्योंकि यह हस्ताक्षर है कि पढ़ता है और लिखता है समानांतर में निष्पादित कर सकते हैं। ध्यान दें कि एल 2 / एल 3 के लिए ओपी की संख्या लिखने की तुलना में बहुत अधिक नहीं है, और स्मृति के लिए कम है। DDR3 मेमोरी बस पूर्ण-द्वैध नहीं है: पढ़ने और लिखने के लिए समान डेटा लाइनों की आवश्यकता होती है। (NT स्टोर बनाम नियमित स्टोर के साथ x86 मेम्स्की / मेमसेट बैंडविड्थ के बारे में अधिक जानकारी के लिए, stackoverflow.com/questions/43343231/… देखें )।
पीटर कॉर्ड्स

6
आप अनुमान लगा रहे हैं कि IvyBridge एक ही घड़ी चक्र में 2 रीड और 1 लिख सकता है। आप सही होने के लिए होते हैं, लेकिन केवल बहुत ही सीमित परिस्थितियों में। IvB में केवल 2 AGU पोर्ट हैं, इसलिए आम तौर पर यह प्रति घड़ी 2 मेमोरी ऑप्स तक सीमित है, जिनमें से एक तक स्टोर हो सकता है । लेकिन 256b एवीएक्स लोड / स्टोर लोड / स्टोर पोर्ट में निष्पादित करने के लिए 2 चक्र लेते हैं, जबकि पहले चक्र में केवल एजीयू की आवश्यकता होती है। तो स्टोर-एड्रेस यूओपी पोर्ट 2/3 पर चल सकता है, उस दौरान 256 बी लोड के 2 चक्र बिना किसी लोड बैंडविड्थ की लागत के। (स्टोर-डेटा यूओपी 4 पोर्ट पर चलता है।) स्रोत: agner.org/optimize माइक्रोआर्च पीडीएफ़
पीटर कॉर्ड्स

2
एक एएमडी बुलडोजर-परिवार या रायज़ेन सीपीयू आपको एक ही रीड = 2x राइटिंग नंबर देगा, लेकिन वे वास्तव में प्रति घंटे 2 मेमोरी ऑप्स तक सीमित हैं (एक तक एक राइट हो सकता है) बिना किसी खामियों के। रीड / राइट / कॉपी अंतर का पता नहीं लगाता है, लेकिन ट्रायड ( a[i] = b[i] + c[i]) कर सकता है । BTW, इंटेल हैसवेल और बाद में पोर्ट 7 पर एक स्टोर-एजीयू है जो सरल (गैर-अनुक्रमित) एड्रेसिंग मोड को संभाल सकता है, इसलिए वे प्रति घड़ी 2 लोड + 1 स्टोर यूप्स निष्पादित कर सकते हैं। (और L1D का डेटा पथ 256b है, इसलिए यह L1D बैंडविड्थ को दोगुना कर देता है।) डेविड कनेटर का राइट-अप देखें: realworldtech.com/haswell-cpu/5
पीटर कॉर्ड्स

1
@AliChen: ओपी ने स्पष्ट रूप से बैंडविड्थ के बाद IvyBridge के 4 चक्र लोड-उपयोग विलंबता का उल्लेख किया है, यह पूछने से पहले कि यह इतना तेज़ कैसे हो सकता है।
पीटर कॉर्ड्स

27

@ 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-विभाजित गैर-विभाजन से काफी खराब है।


स्रोत :


1
यह बहुत स्पष्ट, संपूर्ण और अच्छी तरह से लिखा गया है! +1!
अगली

8

आधुनिक सीपीयू पर, कैश मेमोरी एक ही डाई (चिप) पर सीपीयू के ठीक बगल में बैठती है , इसे SRAM का उपयोग करके बनाया गया है, जो DRAM की तुलना में बहुत तेज है, जो कि PC में RAM मॉड्यूल के लिए उपयोग किया जाता है।

मेमोरी की प्रति यूनिट (थोड़ी या बाइट) SRAM DRAM से बहुत अधिक महंगी है। इसीलिए DRAM का उपयोग एक PC में भी किया जाता है।

लेकिन चूंकि SRAM सीपीयू की तरह ही तकनीक में बना है, इसलिए यह सीपीयू जितना तेज है। इसके अलावा, केवल आंतरिक (सीपीयू पर) बसों से निपटने के लिए है अगर इसे 496 लाइनों वाली चौड़ी बस की जरूरत है तो यह संभवतः है।


आपकी रुचि के लिए धन्यवाद। मैंने कुछ किताबों में देखा है कि रजिस्टर एक्सेस स्पीड 300 जीबी / एस से अधिक है, जिसमें 3 गीगाहर्ट्ज प्रोसेसर के लिए रजिस्टर थ्रूपुट 100 बी / चक्र है, जो संभव नहीं है क्योंकि रजिस्टर आमतौर पर 64/128 बिट वाइड होते हैं, वे इतना उत्पादन नहीं कर सके। यह वही है जो मेरे बारे में है। GB / sa थ्रूपुट को व्यक्त करने का सही तरीका है।
नाइट

3
@ रात ध्यान रखें कि IvB (किसी भी उच्च प्रदर्शन प्रोसेसर के रूप में) प्रति चक्र कई निर्देशों को निष्पादित करता है, जैसे 3 ALU ऑप्स, 2 लोड और 1 स्टोर। इनमें से अधिकांश 2 इनपुट ले सकते हैं (यहां तक ​​कि भार, अनुक्रमित पते के लिए भी) और लोड भी लेता है 3. कि 8 बाइट्स में 13 रजिस्टर हैं, 104 बाइट्स (यह मामला हो सकता है कि इस तरह के महाकाव्य संयोजन की अनुमति नहीं है, लेकिन वहां कोई संकेत नहीं है कि यह IvB के लिए मामला है, हालांकि इसे कायम नहीं रखा जा सकता है)। यदि आप वेक्टर रजिस्टर पर भी विचार करते हैं, तो यह संख्या और भी बढ़ जाती है।
हैरोल्ड

@ हेरोल्ड: संबंधित: हसवेल और स्काईलेक को प्रति घड़ी रजिस्टर रीड्स पर सीमाएं लगती हैं, हालांकि यह फ्रंट-एंड में हो सकता है और कुछ इनपुट तैयार होने के बाद निष्पादन के फटने को प्रभावित नहीं करता है। हो सकता है कि यह कुछ अन्य सूक्ष्म-वैज्ञानिक सीमा हो, लेकिन मुझे कोड में अड़चनें मिलीं, जो प्रति घड़ी अधिक ऑप्स को बनाए रखने में सक्षम होनी चाहिए। agner.org/optimize/blog/read.php?i=415#852 । हसवेल पर, मेरे सबसे अच्छे मामले में प्रति चक्र (निरंतर) प्रति ~ 6.5 पूर्णांक रजिस्टर पढ़ा गया। मैं स्काइलेक (स्टोर स्टोर-एड्रेस + स्टोर-डेटा) पर 7 उफ़ प्रति घड़ी डिस्पैच / निष्पादित करने में भी कामयाब रहा।
पीटर कॉर्ड्स

@PeterCordes सही होने के बावजूद फ्रंट-एंड होना चाहिए? IIRC जो कि ऐतिहासिक रूप से भी मुद्दा था (Ppro to Core2) और मुझे यकीन नहीं है कि भिन्नात्मक संख्याएं अन्यथा कैसे समझती हैं। हालाँकि मेरी संख्या वैसे भी थोड़ी दूर थी
हेरोल्ड

@ हेरोल्ड: हाँ, मुझे पूरा यकीन है कि यह किसी प्रकार का फ्रंट-एंड टोंटी है, शायद नाम बदले में। P6 का रजिस्टर-रीडेड टोंटी "कोल्ड" रजिस्टरों पर था जिसे स्थायी रजिस्टर फाइल से आरओबी में जारी किया जाना था। हाल ही में संशोधित रजिस्टर आरओबी में थे, और उस पर कोई अड़चन नहीं थी। मैंने एचएसडब्ल्यू / एसकेएल पर ठंड बनाम गर्म रेज के साथ बहुत अधिक जांच नहीं की, क्योंकि किसी कारण से मैंने अपने पाश को 4 ऊप्स / आदर्श रूप से 1c प्रति से बड़ा बनाने के बारे में नहीं सोचा था। उफ़। IDK अग्रेषण बनाम PRF के बीच कितना भिन्नता है (जो निष्पादन समय पर घटित होता है, जारी / पुनर्नामित नहीं होता है)।
पीटर कॉर्ड्स

4

L1 कैश काफी विस्तृत मेमोरी स्ट्रक्चर्स हैं। इंटेल प्रोसेसर में एल 1 कैश का आर्किटेक्चर इस मैनुअल में पाया जा सकता है (अगले-हैक द्वारा प्रदान किया गया है)। हालांकि, कुछ मापदंडों की व्याख्या गलत है, "कैश लाइन का आकार" "डेटा चौड़ाई" नहीं है, यह परमाणु डेटा एक्सेस के सीरियल ब्लॉक का आकार है।

तालिका 2-17 (खंड 2.3.5.1) इंगित करता है कि लोड (रीड्स) पर, कैश बैंडविड्थ 2x16 = 32 बाइट्स प्रति कोर प्रति CYCLE है । यह अकेले 3GHz कोर पर 96 Gb / s की सैद्धांतिक बैंडविड्थ देता है। यह स्पष्ट नहीं है कि उद्धृत बेंचमार्क क्या रिपोर्ट करता है, ऐसा लगता है कि यह समानांतर रूप से काम करने वाले दो कोर को मापता है, इसलिए यह दो कोर के लिए 192 जीबीपीएस बनाता है।


2

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

मुझे उम्मीद है कि कैश पढ़ने में सबसे धीमी गतिविधि के लिए डलाटीन को काफी दूर ले जाने की प्रतीक्षा है (संभावना है कि ये अंतर हैं: एक संदर्भ और रीड-बिट से एक वास्तविक शुल्क) कि एक सकारात्मक लागू करने के लिए एक तुलनित्र / कुंडी को देखा जा सकता है एक छोटे वोल्टेज को एक बड़े रेल-टू-रेल लॉजिक-लेवल वोल्टेज स्विंग (लगभग 1 वोल्ट) में बदलने के लिए प्रतिक्रिया क्रिया।


1
ध्यान रखें कि 4 चक्र L1D विलंबता में एड्रेस-जेनरेशन (सरल पते के मोड के लिए [reg + 0-2047]), और एक TLB लुकअप, और एक टैग तुलना (8-तरफा साहचर्य) शामिल है, और परिणामी-अप -16 अनलगनेटेड बाइट्स को डाल रहा है। अन्य निष्पादन इकाइयों को अग्रेषित करने के लिए लोड यूनिट का आउटपुट पोर्ट। यह पॉइंटर-चेज़िंग लूप के लिए 4 सी विलंबता है mov rax, [rax]
पीटर कॉर्ड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.