मैंने एक सप्ताह में सबसे जटिल एल्गोरिदम पर एक चिकनी, गैर-हिचक प्रगति पट्टी बनाने की कोशिश कर एक सप्ताह का सबसे अच्छा हिस्सा बिताया।
एल्गोरिदम में 6 अलग-अलग चरण थे। प्रत्येक चरण में समय की विशेषताओं थी जो ए पर गंभीर रूप से निर्भर थे) अंतर्निहित डेटा संसाधित किया जा रहा था, न केवल डेटा की "राशि" बल्कि डेटा के "प्रकार" और बी) चरण 2 में से 2 सीपीयू की बढ़ती संख्या के साथ बहुत अच्छी तरह से स्केल किए गए थे, 2 चरणों में 2 कदम भाग गए और 2 कदम प्रभावी ढंग से सिंगल-थ्रेडेड थे।
डेटा का मिश्रण प्रभावी रूप से कोर की संख्या से प्रत्येक चरण के निष्पादन समय पर बहुत बड़ा प्रभाव पड़ा।
जिस समाधान ने आखिरकार इसे क्रैक किया वह वास्तव में काफी सरल था। मैंने 6 कार्यों को बनाया जो डेटा सेट का विश्लेषण करते थे और प्रत्येक विश्लेषण चरण के वास्तविक रन-टाइम की भविष्यवाणी करने का प्रयास करते थे। प्रत्येक समारोह में ह्युरिस्टिक ने विश्लेषण के तहत डेटा सेट और सीपीयू की संख्या दोनों का विश्लेषण किया। अपनी 4 कोर मशीन से रन-टाइम डेटा के आधार पर, प्रत्येक फ़ंक्शन मूल रूप से मिलीसेकंड की संख्या लौटाता है, जिसकी अपेक्षा की जाती है, मेरी मशीन पर।
f1 (..) + f2 (..) + f3 (..) + F4 (..) + F5 (..) + F6 (..) = मिलीसेकेंड
में कुल रनटाइम अब दिया यह जानकारी, आप प्रभावी ढंग से जान सकते हैं कि प्रत्येक चरण में कुल निष्पादन समय का प्रतिशत क्या है। अब यदि आप कहते हैं कि चरण 1 को निष्पादन समय का 40% लेना है, तो आपको मूल रूप से यह पता लगाना होगा कि उस एल्गोरिदम से 40%% ईवेंट कैसे निकालें।कहना के लिए लूप 100,000 आइटम संसाधित कर रहा है, तो आप शायद कर सकता है:
for (int i = 0; i < numItems; i++){
if (i % (numItems/percentageOfTotalForThisStep) == 0) emitProgressEvent();
.. do the actual processing ..
}
इस एल्गोरिथ्म हमें एक रेशमी चिकनी प्रगति बार है कि दोषरहित प्रदर्शन दे दी है। आपकी कार्यान्वयन तकनीक में प्रगति पट्टी में उपलब्ध स्केलिंग और सुविधाओं के विभिन्न रूप हो सकते हैं, लेकिन समस्या के बारे में सोचने का मूल तरीका वही है।
और हाँ, यह वास्तव में कोई फर्क नहीं था कि अनुमानी संदर्भ संख्या मेरी मशीन पर काम किया गया था - केवल वास्तविक समस्या है आप जब एक अलग मशीन पर चल संख्या को बदलना चाहते हैं। लेकिन आप अभी भी अनुपात जानते हैं (जो यहां केवल एकमात्र महत्वपूर्ण बात है), ताकि आप देख सकें कि आपका स्थानीय हार्डवेयर मेरे पास से अलग कैसे चलता है।
अब औसत एसओ रीडर आश्चर्य कर सकता है कि क्यों पृथ्वी पर कोई एक सप्ताह में एक चिकनी प्रगति पट्टी बनायेगा। इस सुविधा का मुख्य विक्रेता द्वारा अनुरोध किया गया था, और मेरा मानना है कि उसने अनुबंध प्राप्त करने के लिए बिक्री मीटिंग में इसका इस्तेमाल किया था। मनी वार्ता;)
ठंडाता के लिए ऊपर रखा गया। – erikprice