मैं हाल ही में ऐसी स्थिति में मेमोरी उपयोग के अनुकूलन की सामान्य समस्या में रुचि रखता था, जहां एक से अधिक प्रकार की मेमोरी उपलब्ध है, और किसी दिए गए मेमोरी सेगमेंट की क्षमता और इसे एक्सेस करने की गति के बीच एक व्यापार-बंद है।
परिचित उदाहरण एक कार्यक्रम है जो प्रोसेसर कैश, रैम और हार्ड ड्राइव (वर्चुअल मेमोरी के माध्यम से) से पढ़ने / लिखने के लिए तय करता है ।
मैं विशेष रूप से उस विशेष मामले में दिलचस्पी रखता हूं, जहां डेटा की मात्रा (प्रोग्राम सहित) को लोड किए जाने की आवश्यकता है जो उपलब्ध सबसे तेज भंडारण की क्षमता से अधिक है (यानी "बस सब कुछ लोड करने का तुच्छ समाधान" अनुपयुक्त है)।
मैंने पाया कि एक विकिपीडिया पृष्ठ कुछ सामान्य कैश एल्गोरिदम का वर्णन करता है, जो लगभग वही है जो मैं चाहता हूँ। दुर्भाग्य से, ये निम्न स्तर के हैं:
- कई, जैसे कि LRU या MRU केवल तभी समझ में आता है जब आपके पास सबरूटीन होते हैं जो कई बार एक्सेस हो जाते हैं। यदि मेरे पास बड़ी संख्या में सबरूटीन के साथ एक कार्यक्रम है, जिनमें से कुछ दिए गए रन में कभी एक्सेस नहीं किए जाते हैं, और उनमें से कुछ को एक या दो बार एक्सेस किया जाता है, तो यह रणनीति कभी काम नहीं करेगी क्योंकि यह किस पर पर्याप्त डेटा नहीं बना सकता है आमतौर पर इस्तेमाल किया जाता है और क्या नहीं है।
- अन्य, जैसे क्लॉक, वास्तव में समस्या की जड़ पर हमला करने के बजाय कार्यान्वयन की ख़ासियत से निपटने के लिए प्रतीत होता है।
- मुझे पता है कि एक रणनीति है जहां एक परीक्षण चलाने के दौरान एक कार्यक्रम पहले प्रोफाइल करता है, फिर ऑपरेटिंग सिस्टम को तदनुसार अनुकूलन करने के लिए प्रोफ़ाइल प्रदान करता है। हालाँकि, हमें अभी भी प्रोफ़ाइल बनाते समय वास्तव में प्रतिनिधि "उदाहरण उपयोग" प्रदान करने की समस्या को हल करना चाहिए।
मैं वास्तव में इसके बारे में सीखना चाहता हूं: जब हम हार्डवेयर और सॉफ्टवेयर की सभी तकनीकी को अलग करते हैं, और विशुद्ध सैद्धांतिक संदर्भ में बोलते हैं, तो क्या यह संभव है कि किसी एल्गोरिदम की संरचना का विश्लेषण करने के लिए, प्रभावी कैश रणनीति के लिए काम करना चाहिए। यह एल्गोरिथ्म क्या कर रहा है की उच्च-स्तरीय समझ पर आधारित है?