/ / सी / सी ++ में सीपीयू कैश में स्थैतिक मेमोरी आवंटित करें: क्या यह संभव है? - सी ++, सी, मेमोरी-प्रबंधन, सीपीयू-कैश

सी / सी ++ में सीपीयू कैश में स्थैतिक मेमोरी आवंटित करें: क्या यह संभव है? - सी ++, सी, मेमोरी-प्रबंधन, सीपीयू-कैश

स्पष्ट रूप से स्थिर बनाना संभव हैसीपीयू कैश में ऑब्जेक्ट्स, यह सुनिश्चित करने के लिए कि वे ऑब्जेक्ट हमेशा कैश में रहते हैं, इसलिए किसी भी प्रदर्शन हिट को राम या भगवान forbid - hdd वर्चुअल मेमोरी में सभी तरह से पहुंचने से कभी नहीं लिया जाता है?

मैं बड़े एल 3 साझा कैश को लक्षित करने में विशेष रुचि रखता हूं, एल 1, एल 2, निर्देश या किसी अन्य कैश को लक्षित करने का इरादा नहीं, केवल स्मृति का सबसे बड़ा ऑन-डाई चब है।

और बस इसे पोस्ट करने से पहले मैंने खोजे गए अन्य धागे से अलग होने के लिए स्पष्टीकरण देने के लिए, मुझे पूरे कैश का निजीकरण करने में कोई दिलचस्पी नहीं है, केवल कुछ छोटे, कुछ वर्ग के क्षेत्र के लायक हैं।

उत्तर:

उत्तर № 1 के लिए 12

नहीं। कैश एड्रेसेबल नहीं है, इसलिए आप इसमें ऑब्जेक्ट आवंटित नहीं कर सकते हैं।

ऐसा लगता है कि आपसे पूछना है कि: वर्चुअल मेमोरी में आवंटित स्थान होने के बाद, क्या मैं यह सुनिश्चित कर सकता हूं कि मुझे हमेशा कैश हिट मिल जाए?

यह एक और जटिल सवाल है, और जवाब है: आंशिक रूप से।

आप अपने ओएस के मेमोरी मैनेजमेंट एपीआई का उपयोग कर डिस्क पर स्वैप किए जाने से बच सकते हैं (उदा। mlock()) क्षेत्र को गैर-पेजेबल के रूप में चिह्नित करने के लिए। या शुरू करने के लिए "गैर-पजे हुए पूल" से आवंटित करें।

मैं वहां पर विश्वास नहीं करता "पिन करने के लिए एक समान एपीआई हैसीपीयू कैश में स्मृति। यहां तक ​​कि यदि आप उस ब्लॉक के लिए सीपीयू कैश आरक्षित कर सकते हैं, तो आप कैश मिस से बच नहीं सकते हैं। अगर कोई अन्य कोर मेमोरी को लिखता है, तो स्वामित्व को स्थानांतरित कर दिया जाएगा, और आपको कैश मिस और संबंधित बस हस्तांतरण भुगतना होगा (संभवतया मुख्य स्मृति, संभवतः अन्य कोर के कैश के लिए)।

जैसा कि मैथ्यू ने अपनी टिप्पणी में उल्लेख किया है, आप पाइपलाइन में अन्य उपयोगी काम के साथ समानांतर में कैश मिस को भी मजबूर कर सकते हैं, ताकि डेटा की आवश्यकता होने पर डेटा कैश में हो।


उत्तर № 2 के लिए 1

आप एक और थ्रेड चला सकते हैं जो डेटा पर लूप करता है और इसे एल 3 कैश में लाता है।