2011-09-14 5 views
10

हालांकि मैंने इसके बारे में movntdqa निर्देशों के बारे में पढ़ा है, लेकिन कैश को प्रदूषित न करने के लिए मेमोरी रेंज को अक्षम करने या डेटा पढ़ने के लिए एक साफ तरीका निकाला है। मैं इसे जीसीसी से करना चाहता हूं। मेरा मुख्य लक्ष्य एक बड़ी सरणी में यादृच्छिक स्थानों पर स्वैप करना है। कैशिंग से बचकर इस ऑपरेशन को तेज करने की उम्मीद है क्योंकि बहुत कम डेटा पुन: उपयोग होता है।x86 प्लेटफ़ॉर्म पर जीसीसी का उपयोग करके स्मृति श्रृंखला को बिना किसी व्यवहार्य घोषित कैसे करें?

+1

निश्चित रूप से विंडोज़ पर इसका एक तरीका है। हालांकि मैं लिनक्स पर जीसीसी के बारे में निश्चित नहीं हूं। हालांकि, मुझे यकीन नहीं है कि आप पढ़ने योग्य स्मृति को बिना किसी अचूक घोषित करना चाहते हैं। यद्यपि आप कैश को प्रदूषित नहीं करेंगे, फिर भी आप (प्रत्येक) प्रत्येक एक्सेस के लिए पूर्ण मेमोरी विलंबता का भुगतान कर रहे हैं। – Mysticial

+0

मैं मानता हूं कि यह प्रदर्शन में सुधार नहीं कर सकता है। लेकिन मुझे यह जानना अच्छा लगेगा कि इस सुविधा का उपयोग कैसे करें। – Sandeep

+1

सीपीयू कैश को अक्षम करने का कोई तरीका नहीं है। न ही आप कभी भी चाहते हैं, यह इसे बहुत धीमा कर देगा। अनचाहे मेमोरी आसानी से सौ से अधिक चक्र लेती है। –

उत्तर

6

मुझे लगता है कि आप जो वर्णन कर रहे हैं वह Memory Type Range Registers है। उदाहरण के लिए here देखें /proc/mttr/ioctl(2) का उपयोग करके आप लिनक्स के तहत इन्हें नियंत्रित कर सकते हैं (यदि उपलब्ध हो और आप उपयोगकर्ता 0 हैं)। चूंकि यह भौतिक पता सीमा पर काम करता है, मुझे लगता है कि आपको इसे उचित तरीके से उपयोग करने में कठिन समय होगा।

कंपाइलर इंट्रिनिक्स जीसीसी provides को देखने का एक बेहतर तरीका है और एक या अधिक खोजें, जो आपके इरादे को व्यक्त करता है। part 5 में कैश को छोड़कर सौदों के साथ "हर प्रोग्रामर को स्मृति के बारे में क्या पता होना चाहिए" पर Ulrich Drepper की श्रृंखला पर एक नज़र डालें। ऐसा लगता है कि _mm_prefetch(ptr, _MM_HINT_NTA) आपकी आवश्यकताओं के लिए उपयुक्त हो सकता है।

हमेशा प्रदर्शन की बात आती है - माप, माप, माप। ड्रेपर की श्रृंखला में उत्कृष्ट भागों हैं जो यह बताते हैं कि यह कैसे किया जा सकता है (part 7) साथ ही कोड उदाहरण और अन्य रणनीतियां जो आपके कोड के मेमोरी प्रदर्शन को तेज करते समय प्रयास करें।

2

उपयोगकर्ता 786653 से सभी अच्छी सलाह; विशेष रूप से Ulrich Drepper लेख। मैं जोड़ देंगे:

  • Uncached या नहीं, वीएम HW TLB है, जो एक सीमित क्षमता है में पेज की जानकारी को देखने के लिए है करने के लिए जा रहा है। यादृच्छिक अभिगम प्रदर्शन पर टीएलबी थ्रैशिंग के प्रभाव को कम मत समझें। यदि आप पहले से नहीं हैं, तो the results here देखें कि आप वास्तव में अपने सरणी डेटा के लिए huge pages का उपयोग क्यों करना चाहते हैं, न कि किशोर 4K डिफ़ॉल्ट (जो "640K के दिनों में वापस जाता है" किसी के लिए पर्याप्त होना चाहिए)। बेशक अगर आप वास्तव में 2 एमबी पृष्ठों से भरे टीएलबी के मुकाबले बड़े पैमाने पर बड़े सरणी बोल रहे हैं, तो इससे भी मदद मिलेगी।

  • आपको 'एनटी' निर्देशों के विरुद्ध क्या मिला है (उदाहरण के लिए _mm_stream_ps आंतरिक)? मैं अनजान घोषित पृष्ठों को अनचाहे घोषित करता हूं कि आप उन लोगों के उचित उपयोग से बेहतर प्रदर्शन करेंगे, और विकल्पों के मुकाबले उनका उपयोग करना बहुत आसान है। हालांकि इसके विपरीत सबूत देखने में बहुत दिलचस्पी होगी।

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

  • कोई संबंधित समस्या नहीं^_^