2013-09-02 9 views
5

में लोड होने का निर्णय लेता है, मान लें कि कंप्यूटर में 64k एल 1 कैश और 512k एल 2 कैश है।यह समझना कि सीपीयू कैश मेमोरी

प्रोग्रामर ने मुख्य स्मृति में डेटा के 10 एमबी के एक सरणी को बनाया/पॉप्युलेट किया है (उदाहरण के लिए 3 डी मॉडल का वर्टेक्स/इंडेक्स डेटा)।

सरणी की तरह structs की एक श्रृंखला शामिल हो सकता है:

struct x 
{ 
    vec3 pos; 
    vec3 normal; 
    vec2 texcoord; 
}; 

अगला प्रोग्रामर यह सब डेटा, उदा पर कुछ कार्रवाई करने के लिए है GPU को डेटा पास करने से पहले, एक बार सामान्य गणना।

सीपीयू कैसे तय करता है कि एल 2 कैश में डेटा कैसे लोड हो जाता है?

प्रोग्रामर कैसे किसी भी दिए गए आर्किटेक्चर के लिए कैश लाइन का आकार जांच सकता है?

प्रोग्रामर कैसे सुनिश्चित कर सकता है कि डेटा व्यवस्थित किया गया है ताकि यह कैश लाइनों में फिट हो सके?

क्या बाइट सीमाओं के लिए डेटा संरेखण एकमात्र चीज है जिसे इस प्रक्रिया में सहायता के लिए किया जा सकता है?

प्रोग्रामर कैश मिस को कम करने के लिए क्या कर सकता है?

क्या प्रोफाइलिंग उपकरण उपलब्ध हैं जो विंडोज़ और लिनक्स प्लेटफॉर्म के लिए अनुकूलन प्रक्रिया को देखने में मदद करेंगे?

+0

यह एक बहुत बड़ा सवाल है, इसलिए मुझे उम्मीद है कि यह "पकड़ पर रखेगा" .. वैसे भी, अच्छा कैश उपयोग सुनिश्चित करने के लिए, Arrays लेआउट के एक स्ट्रक्चर पर स्विच करने पर विचार करें। यह सुनिश्चित करेगा कि आप उस डेटा पर कैश स्पेस को बर्बाद नहीं करेंगे जो आप तुरंत उपयोग नहीं कर रहे हैं। वीसीएक्स को विभाजित करना शायद एक अच्छा विचार है, लेकिन एक अलग कारण के लिए: वेक्टरेशन। – harold

+1

कैश मिस को कम करने के लिए, http://stackoverflow.com/questions/460666/decreasing-cache-misses-through-good-design – fizzbuzz

+0

पर एक नज़र डालें, मैं अधिकतर प्रश्न बंद करने के खिलाफ हूं (होल्ड पर, हां! बटन अभी भी "करीबी" कहता है), लेकिन यहां इतने सारे प्रश्न हैं कि यह अप्रिय है। यह विश्वविद्यालय वर्ग में एक बड़ी पाठ्यचर्या इकाई के लिए सामग्री होगी। यदि आप इनमें से कम से कम कुछ के जवाब जानते हैं, तो कृपया उन्हें प्रश्न में प्रदान करें। तथ्य यह है कि आप जानते हैं कि कैश लाइन क्या बताती है कि आप यह भी जानते हैं कि सीपीयू कैसे निर्णय लेता है कि एल 2 में डेटा कैसे लोड किया जाए। – Potatoswatter

उत्तर

12

यहां बहुत सारे प्रश्न हैं इसलिए मैं उत्तर संक्षिप्त रखूंगा।

सीपीयू कैसे तय करता है कि एल 2 कैश में डेटा कैसे लोड हो जाता है?

जो भी आप उपयोग करते हैं, लोड हो जाता है। एल 2 एल 1 के समान व्यवहार करता है, सिवाय इसके कि इसमें अधिक कुछ है, और एलियासिंग (जो समय से पहले बेदखल हो सकती है) बड़ी लाइनों और कम सेट सहयोगीता के कारण अधिक आम है। कुछ सीपीयू केवल एल 2 को डेटा के साथ लोड करते हैं जो एल 1 से बाहर हो रहा है, लेकिन यह प्रोग्रामर के लिए बहुत अंतर नहीं करता है।

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

प्रोग्रामर कैसे किसी भी दिए गए आर्किटेक्चर के लिए कैश लाइन का आकार जांच सकता है?

उपयोगकर्ता पुस्तिका से परामर्श करके। कुछ ऑपरेटिंग सिस्टम sysctl जैसी क्वेरी सुविधा प्रदान करते हैं।

प्रोग्रामर कैसे सुनिश्चित कर सकता है कि डेटा व्यवस्थित किया गया है ताकि यह कैश लाइनों में फिट हो सके?

कुंजी विचार स्थानिक इलाके है। एक ही समय में, एक ही आंतरिक लूप द्वारा उपयोग किया जाने वाला डेटा, उसी डेटा संरचना में जाना चाहिए। इष्टतम संगठन उस संरचना को कैश लाइन पर फिट करना है और इसे कैश लाइन आकार में संरेखित करना है।

जब तक आप अपने प्रोफाइलर को गाइड के रूप में सावधानी से उपयोग नहीं कर लेते हैं तब तक परेशानी न करें।

क्या बाइट सीमाओं के लिए डेटा संरेखण एकमात्र चीज है जिसे इस प्रक्रिया में सहायता के लिए किया जा सकता है?

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

प्रोग्रामर कैश मिस को कम करने के लिए क्या कर सकता है?

वास्तविक दुनिया डेटा का उपयोग कर प्रोफ़ाइल, और एक बग के रूप में अत्यधिक यादों का इलाज।

क्या प्रोफाइलिंग उपकरण उपलब्ध हैं जो विंडोज़ और लिनक्स प्लेटफ़ॉर्म के लिए अनुकूलन प्रक्रिया को देखने में मदद करेंगे?

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

+1

अच्छा सारांश :) –

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