मैं मान रहा हूं कि आपका प्रश्न इस अवलोकन से आया है कि I / O आपके संपूर्ण विश्लेषण में एक महत्वपूर्ण ओवरहेड का कारण बनता है। उस स्थिति में, आप गणना के साथ I / O को ओवरलैप करने का प्रयास कर सकते हैं।
एक सफल दृष्टिकोण इस बात पर निर्भर करता है कि आप डेटा का उपयोग कैसे करते हैं, और उस डेटा पर आपके द्वारा की जाने वाली गणना। यदि आप एक पैटर्न की पहचान कर सकते हैं, या डेटा के विभिन्न क्षेत्रों तक पहुंच पहले से ज्ञात है, तो आप "वर्तमान चंक्स" को संसाधित करते समय पृष्ठभूमि में डेटा के "अगले विखंडू" को प्रीफ़ैच करने का प्रयास कर सकते हैं।
एक सरल उदाहरण के रूप में, यदि आप केवल एक बार अपनी फाइल को पार करते हैं और प्रत्येक पंक्ति या लाइनों के सेट को संसाधित करते हैं, तो आप स्ट्रीम को लाइनों (या एमबी) में विभाजित कर सकते हैं। फिर, विखंडू पर प्रत्येक पुनरावृत्ति पर, आप chunk i + 1 लोड कर सकते हैं जबकि chunk i।
आपकी स्थिति अधिक जटिल हो सकती है और इसमें अधिक शामिल समाधानों की आवश्यकता होती है। किसी भी स्थिति में, विचार पृष्ठभूमि में I / O निष्पादित करने का है, जबकि प्रोसेसर के पास काम करने के लिए कुछ डेटा है। यदि आप अपनी विशिष्ट समस्या के बारे में अधिक जानकारी देते हैं, तो हम इस पर गहराई से विचार कर सकते हैं;)
---- अधिक विवरण देने के बाद विस्तारित संस्करण ----
मुझे यकीन नहीं है कि मैं संकेतन को समझता हूं, लेकिन ठीक है, जैसा कि आपने कहा, विचार एक सभी के लिए अंतःक्रिया है। आप यह भी उल्लेख करते हैं कि डेटा रैम में फिट हो सकता है। फिर, मैं सभी डेटा लोड करने के लिए समय और माप प्रदर्शन करने के लिए समय को मापने के द्वारा शुरू करूंगा। अभी,
यदि I / O का प्रतिशत कम है (जैसे आप ओवरहेड की परवाह नहीं करते हैं, तो जो कुछ भी है: 0.5%, 2%, 5%, ...), तो बस सरल दृष्टिकोण का उपयोग करें: डेटा लोड करें एक बार, और गणना। आप अपने शोध के अधिक दिलचस्प पहलुओं के लिए समय बचाएंगे।
यदि आप ओवरहेड बर्दाश्त नहीं कर सकते हैं तो आप पेड्रो को सुझाव देना चाहते हैं। ध्यान रखें कि एरन अहमदिया ने क्या उल्लेख किया है, और पूर्ण कार्यान्वयन के लिए जाने से पहले इसका परीक्षण करें।
n2n
लोड chunk1 और chunk2
विखंडू के लिए मैं = 1 से एन
अतुल्यकालिक रूप से chunk i + 1 लोड करें
j = i + 1 से n में विखंडू के लिए
अतुल्यकालिक रूप से chunk j + 1 लोड करें
विखंडू के साथ गणना i, j (* पहली पुनरावृत्ति के लिए, ये प्रीलोडेड विखंडू 1 और 2 * हैं)
नोट: यह त्वरित और गंदे छद्म कोड है, किसी को सूचकांकों को समायोजित करने की आवश्यकता होगी।
इसे लागू करने के लिए, तथाकथित डबल-बफ़रिंग का उपयोग करना आम है । मोटे तौर पर बोलना: स्मृति को दो कार्यक्षेत्रों में विभाजित करना; जबकि डेटा को कार्यक्षेत्र 1 में पृष्ठभूमि में लोड किया जा रहा है, प्रोसेसर कार्यक्षेत्र 2 में डेटा के साथ गणना कर रहा है। प्रत्येक पुनरावृत्ति पर, भूमिका का आदान-प्रदान करें।
मुझे खेद है कि मैं अभी एक अच्छे संदर्भ के साथ नहीं आ सकता।
[1] एक आउट-ऑफ-कोर एल्गोरिथ्म डिस्क पर रहने वाले डेटा के साथ (कुशलतापूर्वक) सौदा करने के लिए कुछ तंत्र को शामिल करता है। इन्हें इन-कोर ("इन-रैम") के विपरीत आउट-ऑफ-कोर कहा जाता है।
mmap
अपने मुख्य कोड में कुछ को लागू करने से पहले मापें और परीक्षण करें। कई आधुनिक ऑपरेटिंग सिस्टमread
कम जटिलता के साथ नियमित रूप से समान प्रदर्शन देते हैं । (इसके अलावा, हाँ, पायथन में मिमीप विंडोज और यूनिक्स मेमोरी मैप्स को एक पोर्टेबल इंटरफ़ेस प्रदान करता है)।