2013-06-13 9 views
6

क्या ऐसे कोई प्रोसेसर हैं जिनके पास विशिष्ट डेटा के लिए कैश को बाईपास करने के निर्देश हैं? This question में एक उत्तर भी है जो बताता है कि SSE4.2 निर्देश कैश को बाईपास करते हैं। क्या कोई मुझे उस पर प्रबुद्ध कर सकता है?क्या ऐसे कोई प्रोसेसर हैं जिनके पास कैश को बाईपास करने के निर्देश हैं?

+1

मैं उत्सुक हूँ: क्या व्यावहारिक अनुप्रयोग के लिए है कैश को छोड़कर? जो कुछ भी दिमाग में आता है वह निर्देश समय की भविष्यवाणी में सुधार कर रहा है। क्या वहां कुछ हैं? – wallyk

+1

2 मामले मैं आम तौर पर मुठभेड़ अलग-अलग कोरों पर चलने वाले धागे के बीच समय-संवेदनशील डेटा साझा कर रहा हूं, और अन्य हार्डवेयर (जैसे यूएआरटी आईसी) –

+3

@wallyk के साथ इंटरफेस करने के लिए मेमोरी-मैप किए गए रजिस्टरों को लिख रहा हूं: सामान्य उद्देश्य कैश प्रदूषण को रोकने के लिए है (उदाहरण के लिए यदि आप बहुत सारे डेटा लिख ​​रहे हैं और इसे "जल्द ही" पढ़ने की उम्मीद नहीं करते हैं, और वह डेटा नहीं चाहते हैं जिसे आपको कैश से बाहर निकालने की आवश्यकता होगी)। – Brendan

उत्तर

1

विशिष्ट डेटा की आपकी परिभाषा के आधार पर, हां। प्रोसेसर में आम तौर पर कैश कंट्रोल रजिस्टर्स/टेबल होते हैं जिन्हें परिभाषित करने के लिए उपयोग किया जाता है कि स्मृति के किन क्षेत्रों को कैश किया जा सकता है, जिसे कैश नहीं किया जाना चाहिए। आम तौर पर, उपयोगकर्ता स्थान में चल रहा कोड उन तालिकाओं तक पहुंचने में सक्षम नहीं है।

1

क्या ऐसे कोई प्रोसेसर हैं जिनके पास विशिष्ट डेटा के लिए कैश को बाईपास करने के निर्देश हैं?

सुपरएच परिवार (या कम से कम सुपरएच -2) में इसकी कैश मेमोरी दोनों को स्पष्ट और स्पष्ट रूप से छोड़ दिया गया है। यह विशेष निर्देशों के बजाय स्मृति पता स्थान के विभिन्न क्षेत्रों का उपयोग करके किया जाता है।
001 पर किसी पते के शीर्ष 3 बिट्स सेट करके आप कैश-थ्रू उसी पते के दर्पण को अधिकतम 3 बिट्स के साथ साफ़ कर देंगे। और कुछ क्षेत्रों (जैसे मेमोरी मैप किए गए I/O रजिस्ट्रार) कभी कैश नहीं होते हैं।

6

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

+2

थोड़ा स्पष्टीकरण; x86 पर, 'clflush' निर्देश (_single_ cacheline को अमान्य करने के लिए) _not_ विशेषाधिकार प्राप्त है। और, जैसा कि मूल पोस्टर का उल्लेख है, 'movnt' एसएसई निर्देश कैश-बाईपासिंग _stores_ को अनुमति देते हैं - http://stackoverflow.com/questions/37070/what-is-the-meaning-of-non-temporal-memory-accesses देखें विवरण के लिए -in-x86। –

1

अल्टेरा निओस II आर्किटेक्चर में कैश को बाईपास करने वाले लोड/स्टोर के लिए 2 विशिष्ट निर्देश ldio और stio हैं। इसका उपयोग स्मृति-मैप किए गए आईओ के लिए किया जाता है।

http://www.csun.edu/~glaw/ee525/Lecture03Nios.pdf

एनआईओएस द्वितीय एक नरम प्रोसेसर आम तौर पर Altera के FPGA बोर्डों के लिए और प्रयोग किया जाता है, हालांकि यह भी कठिन एएसआईसी उपकरणों के लिए लाइसेंस प्राप्त किया जा सकता है, लेकिन मैं इस वास्तुकला

1

के आधार पर किसी भी व्यावसायिक सीपीयू पता नहीं है एसएसई कैश-बाईपास स्टोर निर्देश एक ऐसे क्षेत्र में लिखते समय कैश को प्रदूषित करने से बचने के लिए हैं जो जल्द ही फिर से नहीं छुआ जाएगा। जैसे आप डेटा को बेदखल नहीं करना चाहते हैं जिसका उपयोग फिर से किया जाएगा।

इसके अलावा, कैश लाइन के किसी भी हिस्से में लिखने पर x86 कार्यान्वयन सामान्य रूप से पूरे कैश लाइन में पढ़ते हैं। यदि कैश लाइन की पिछली सामग्री अनियंत्रित है, तो यह मेमोरी बैंडविड्थ का अपशिष्ट है। (उदाहरण के लिए destmemcpy या memset का तर्क।) मुझे memcpy लागू करने के लिए इस लेखन-बैक (डिफ़ॉल्ट) बनाम लिखने के संयोजन (movntq/movntdq) के some old discussion मिला। इसका उपयोग करने से सावधान रहें यदि कुछ और memcpy के आउटपुट को तुरंत पढ़ेगा।

स्ट्रीमिंग लोड केवल reading from USWC regions के लिए काम करते हैं, सामान्य memcpy उस मामले में बहुत ही काम करता है। सामान्य से स्ट्रीमिंग लोड (डब्ल्यूबी (फीडबैक)) वर्तमान में विशेष नहीं हैं, और नियमित movdqa लोड की तरह काम करते हैं। (यानी एनटी संकेत को अनदेखा किया जाता है)। इंटेल के ऑप्टिमाइज़ेशन मैनुअल का कहना है कि आप प्रदूषण-घटाने वाले भारों के लिए prefetchnta का उपयोग कर सकते हैं।


IDK अगर यह एक पढ़ने ट्रिगर किए बिना (बल्कि movnt साथ दरकिनार से) कैश में लिखने के लिए संभव है। संभवतः AVX512 memcpy के लिए इस समस्या को हल करेगा, क्योंकि 512b जेएमएम रजिस्टर 64bytes है, यानी एक पूर्ण कैश लाइन है। एक जेडएमएम रजिस्टर से एक 64-बाइट गठबंधन स्टोर मेमोरी में पंजीकृत है जो पहले से ही कैश नहीं किया गया था को इस तरह से कार्यान्वित किया जा सकता है जिसने पहले रैम नहीं पढ़ा था, और अभी भी स्टोर को सिस्टम में अन्य CPU कोरों को तुरंत दिखाई देता है ।

(। AVX-512Knight's Landing में Skylake Xeon (नहीं अन्य Skylake सीपीयू में होने की) जा रहा है इसके अलावा, बड़े पैमाने पर समानांतर उच्च throughput जिऑन फी त्वरक बात की गणना।)

संबंधित मुद्दे

 संबंधित मुद्दे