मैं करता है कि निम्नलिखित एक आवेदन बनाया है:कई छोटी फाइलें या एक बड़ी फाइल? (या, खोलने की ओवरहेड और समापन फ़ाइल हैंडल) (C++)
- एक फाइल करने के लिए कुछ गणना, लिखने गणना किए गए डेटा बनाओ - 500,000 बार के लिए दोहराएँ (कुल मिलाकर, 500,000 फाइलें एक के बाद एक लिखें) - दो बार दोहराएं (कुल मिलाकर, 1.5 मिलियन फाइलें लिखी गईं)। एक फ़ाइल से
- पढ़ें डेटा, फ़ाइल से डेटा के साथ कुछ तीव्र गणना करने - 1500000 पुनरावृत्तियों के लिए दोहराएँ 200 पुनरावृत्तियों के लिए
- दोहराएँ चरण 2 (भर में चरण 1 में लिखा फ़ाइलों पुनरावृति)।
प्रत्येक फ़ाइल ~ 212k है, इसलिए मेरे पास ~ 300Gb डेटा है। ऐसा लगता है कि पूरी प्रक्रिया कोर 2 डुओ सीपीयू पर 2.8 गीगा के साथ ~ 40 दिन लगती है।
मेरी समस्या है (जैसा कि आप शायद अनुमान लगा सकते हैं) वह समय है जो पूरी प्रक्रिया को पूरा करने में लगती है। सभी गणना धारावाहिक हैं (प्रत्येक गणना पहले एक पर निर्भर है), इसलिए मैं इस प्रक्रिया को अलग-अलग CPUs या पीसी पर समानांतर नहीं कर सकता। मैं यह सोचने की कोशिश कर रहा हूं कि प्रक्रिया को और अधिक कुशल बनाने के लिए और मुझे पूरा यकीन है कि अधिकतर ओवरहेड फाइल सिस्टम एक्सेस (डुह ...) में जाता है। हर बार जब मैं एक फ़ाइल तक पहुंचता हूं तो मैं इसे एक हैंडल खोलता हूं और फिर डेटा पढ़ने के बाद इसे बंद कर देता हूं।
रन टाइम में सुधार करने के लिए मेरे विचारों में से एक 300 जीबी (या 50 जीबी की कई बड़ी फाइलों) का एक बड़ा फ़ाइल उपयोग करना था, और फिर मैं केवल एक खुली फ़ाइल हैंडल का उपयोग करता हूं और बस प्रत्येक प्रासंगिक डेटा की तलाश करता हूं और पढ़ता हूं यह, लेकिन मैं फ़ाइल हैंडल खोलने और बंद करने का ओवरहेड नहीं हूं। क्या कोई इस पर कुछ प्रकाश डाला सकता है?
एक और विचार था कि फ़ाइलों को बड़ी ~ 100 एमबी फाइलों में बदलने और समूह करने के लिए था और फिर मैं 212k पढ़ने के बजाए हर बार 100 एमबी पढ़ता था, लेकिन उपरोक्त विचार से लागू करने के लिए यह बहुत जटिल है।
वैसे भी, अगर कोई मुझे इस पर कुछ सलाह दे सकता है या कोई विचार है कि रन टाइम में सुधार कैसे किया जाए तो मैं इसकी सराहना करता हूं!
धन्यवाद।
प्रोफाइलर अद्यतन:
मैं प्रक्रिया पर एक प्रोफाइलर भाग गया, ऐसा लगता है कि गणना क्रम का 62% लेने के लिए और फ़ाइल पढ़ने 34% लेता है। मतलब यह है कि अगर मैं चमत्कारी रूप से 34 के कारक द्वारा फ़ाइल I/o लागत को काटता हूं, तो भी मुझे 24 दिनों के साथ छोड़ दिया जाता है, जो काफी सुधार है, लेकिन अभी भी एक लंबा समय है :)
क्या आपने इसे डेटाबेस में संग्रहीत करने पर विचार किया है? –
मैंने इसे माना है, लेकिन क्या डेटा निष्कर्षण तेजी से कर देगा? – dudico
आपने कहा कि आप निश्चित रूप से सुनिश्चित हैं कि फ़ाइलों का खुला/बंद होना एक बाधा है। क्या यह कार्यक्रम को प्रोफाइल करने के आधार पर एक झुकाव है या यह एक सामान्य झुकाव से अधिक है? यदि यह उत्तरार्द्ध है तो मैं गंभीरता से आपके कोड को प्रोफाइल करने का सुझाव दूंगा। –