मेरे कार्यक्रम में मैं बड़ी संख्या में पुनरावृत्तियों के लिए एन-बॉडी सिस्टम अनुकरण कर रहा हूं। प्रत्येक पुनरावृत्ति के लिए मैं 6 एन निर्देशांक का एक सेट तैयार करता हूं जिसे मुझे फ़ाइल में जोड़ने की आवश्यकता होती है और फिर अगले पुनरावृत्ति को निष्पादित करने के लिए उपयोग किया जाता है। कोड सी ++ में लिखा गया है और वर्तमान में प्रत्येक पुनरावृत्ति पर बाइनरी प्रारूप में डेटा लिखने के लिए ofstream
की विधि write()
का उपयोग करता है।इसे उत्पादित करते समय डेटा लिखने का सबसे तेज़ तरीका
मैं इस क्षेत्र में एक विशेषज्ञ नहीं हूं, लेकिन मैं इस कार्यक्रम के इस हिस्से में सुधार करना चाहता हूं, क्योंकि मैं पूरे कोड को अनुकूलित करने की प्रक्रिया में हूं। मुझे लगता है कि प्रत्येक चक्र में गणना के परिणाम लिखने से जुड़ी विलंबता सॉफ्टवेयर के प्रदर्शन को धीमा कर देती है।
मैं उलझन में हूं क्योंकि मुझे वास्तविक समांतर प्रोग्रामिंग और निम्न स्तर की फ़ाइल I/O में कोई अनुभव नहीं है। मैं कुछ सार तकनीक है कि मैं मैं लागू कर सकता है की कल्पना के बारे में सोचा, के बाद से मैं यूनिक्स OSes के साथ आधुनिक (संभवतः मल्टी कोर) के लिए प्रोग्रामिंग मशीनों हूँ:
- n पुनरावृत्तियों की मात्रा में फ़ाइल में डेटा लेखन (वहाँ लगते हैं कैसे वास्तव में एक बफर लागू करने के लिए इतना है कि धागे उचित रूप से सिंक्रनाइज़ किए जाते हैं, और ओवरलैप नहीं आगे बढ़ने के लिए बेहतर तरीके ...)
- OpenMP (साथ कोड parallelizing होने के लिए?)
mmap
(फ़ाइल आकार का उपयोग करते हुए किया जा सकता है विशाल, जीबी के क्रम में, क्या यह दृष्टिकोण पर्याप्त मजबूत है?)
हालांकि, मुझे नहीं पता कि उन्हें सर्वोत्तम रूप से कैसे कार्यान्वित किया जाए और उन्हें उचित तरीके से संयोजित किया जाए।
आपका प्रश्न क्या है? –
"मुझे लगता है कि प्रत्येक चक्र में गणना के परिणाम लिखने से जुड़ी विलंबता सॉफ्टवेयर के प्रदर्शन को धीमा कर देती है।" क्या आपको लगता है या आपने अपना कोड प्रोफाइल किया है? –
क्या आपने यह सुनिश्चित करने के लिए कोड को प्रोफाइल किया है कि विलंबता के बारे में आपकी भावनाएं सही हैं? – Grizzly