मैं सी ++ में लिखे गए सिस्टम पर काम कर रहा हूं, जो लिनक्स पर ज़ीऑन पर चल रहा है, जिसे जितनी जल्दी हो सके चलाने की जरूरत है। 10 जीबी से अधिक रैम में आयोजित एक बड़ी डेटा संरचना (मूल रूप से structs की एक सरणी) है, और इसके तत्वों को समय-समय पर उपयोग करने की आवश्यकता है। मैं जितना संभव हो सके सिस्टम के कैशिंग तंत्र के साथ काम करने के लिए डेटा संरचना को संशोधित करना चाहता हूं।ज़ीऑन कितने बाइट प्रति मेमोरी एक्सेस कैश में लाता है?
वर्तमान में, संरचनाओं को ज्यादातर संरचनाओं में यादृच्छिक रूप से किया जाता है, और प्रत्येक बार 1-4 32-बिट इन्स पढ़े जाते हैं। एक ही स्थान पर एक और पढ़ने के पहले यह एक लंबा समय है, इसलिए कैश से कोई फायदा नहीं होता है।
अब मुझे पता है कि जब आप रैम में एक यादृच्छिक स्थान से बाइट पढ़ते हैं, तो बस उस बाइट को कैश में लाया जाता है। मेरा सवाल यह है कि कितने बाइट लाए जाते हैं? क्या यह 16, 32, 64, 40 9 6 है? क्या इसे कैश लाइन कहा जाता है?
मैं यादृच्छिक रैम पहुंच को कम करने और इसके बजाय कैश के साथ काम करने के लिए डेटा संरचना को फिर से डिजाइन करना चाहता हूं। यादृच्छिक पहुंच पर कैश में कितने बाइट खींचे जाते हैं यह जानकर कि मेरे द्वारा किए गए डिज़ाइन विकल्पों को सूचित किया जाएगा।
अपडेट (अक्टूबर 2014): परियोजना के ऊपर सवाल उठाने के कुछ ही समय बाद इसे रोक दिया गया था। इसके बाद से यह फिर से शुरू हो गया है और नीचे दिए गए उत्तरों में सुझावों के आधार पर, मैंने रैम एक्सेस के आसपास कुछ प्रयोग किए हैं, क्योंकि ऐसा लगता है कि टीएलबी थ्रैश हो रहा था। मैंने कार्यक्रमों को विशाल पृष्ठों (मानक 4 केबी के बजाय 2 एमबी) के साथ चलाने के लिए संशोधित किया, और लगभग 2.5% की एक छोटी गति को देखा। मुझे विशाल पृष्ठों here और here के लिए सेट अप करने के बारे में अच्छी जानकारी मिली।
हाँ, कैश लाइन। आप तब तक 64 बाइट्स मान सकते हैं जब तक आपको यह पता न लगे कि आपके पास ज़ीऑन प्रोसेसर मॉडल के दर्जनों दर्जनों हैं। एल 2 और एल 3 कैश भी एक भूमिका निभाते हैं। अनुक्रमिक मेमोरी एक्सेस पर फ़ोकस करें और कुछ भी न मानें।का आकलन करें। –
आपके उत्तरों के लिए सभी को धन्यवाद। –