मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जो समांतरता के लिए 8 गुना तक खुद को फोर्क करता है। प्रत्येक कांटा में कांटा के समय मूल प्रक्रिया से मेमोरी स्पेस की पूरी प्रति होती है। कांटे जल्दी होते हैं क्योंकि लिनक्स प्रक्रियाओं के बीच पृष्ठों को साझा करता है और जब वे संशोधित होते हैं तो केवल नए होते हैं। अभ्यास में स्मृति खपत में वृद्धि, मेरे आवेदन के लिए लगभग 3x प्रतीत होता है। परिवर्तनों की पहचान करने के लिए उपयोग करने के लिए उपकरण या तकनीकों के लिए कोई सुझाव जो उस विकास को कम करेगा?कॉपी-ऑन-राइट का उपयोग कर सी ++ प्रोग्राम की मेमोरी खपत को कम करने के लिए कैसे?
एक विचार संशोधित पृष्ठों की पेज विखंडन को देखने के लिए है। फोर्क प्रक्रियाओं में आवंटित किए गए कार्यों की केवल ब्रूट फोर्स परीक्षा भी है। किसी भी मामले में, आप उस विश्लेषण करने के लिए कौन सी तकनीकों या औजारों की सिफारिश कर सकते हैं?
ध्यान रखें कि कार्यक्रम भी समानांतरवाद साथ कई घंटे लग जाते पूरा करने के लिए और 1TB तक की स्मृति पदचिह्न है तो उपकरण विकल्प सीमित हैं रखें।
क्या आपको कांटा की जरूरत है? आप समानांतरता के लिए अलग-अलग धागे भी बना सकते हैं, और सभी एक ही मेमोरी (सभी प्रभावों के साथ) –
साझा करेंगे, एक बहुत ही सामान्य सुझाव है, लेकिन आप लिखने वाली मेमोरी को अलग करने के लिए पूल आवंटकों (या इसी तरह) का उपयोग करने का प्रयास कर सकते हैं कई प्रक्रियाओं में, स्मृति से जो कांटे के बाद स्थिर रहता है। चूंकि गाय एक समय में एक मेमोरी पेज किया जाता है, इसलिए आपके द्वारा संशोधित स्मृति के साथ मिश्रित कोई भी पढ़ने-योग्य स्मृति अनावश्यक डुप्लिकेशन में परिणाम देती है। चूंकि अनुमानित-केवल-पढ़ने वाले आवंटक से स्मृति को संशोधित करने से बचना महत्वपूर्ण नहीं है, इसलिए यदि आप पहले से सुनिश्चित नहीं हैं कि स्मृति कौन सा है, तो एक ह्युरिस्टिक अभी भी मदद कर सकता है। –