हम मध्यम आकार के C ++ कोड बेस (10Mloc) पर काम कर रहे हैं जो हमारे अनुकूलन प्रयासों के माध्यम से समान रूप से धीमा हो रहा है ।
यह कोड बेस पुस्तकालयों का एक सेट है जिसे हम काम करने के लिए जोड़ते हैं। जब इन पुस्तकालयों का सामान्य ढांचा विकसित किया गया था, तो प्रदर्शन पर कुछ जोर दिया गया था और बाद में, जब अधिक भागों को जोड़ा गया, तो सामान्य ढांचे में बहुत बदलाव नहीं हुआ। जरूरत पड़ने पर अनुकूलन किया गया और जैसे-जैसे हमारा हार्डवेयर विकसित हुआ। इसने महंगे शुरुआती निर्णय को बहुत बाद में स्पष्ट किया। अब हम एक ऐसे बिंदु पर हैं जहां आगे अनुकूलन बहुत अधिक महंगे हैं क्योंकि उन्हें कोड आधार के बड़े हिस्से को फिर से लिखना होगा। हम खुद को एक अवांछनीय स्थानीय न्यूनतम के करीब पहुंचते हैं क्योंकि हम जानते हैं कि सिद्धांत रूप में कोड को बहुत तेजी से चलाने में सक्षम होना चाहिए।
क्या कोई सफल कार्यप्रणाली है जो यह तय करने में मदद करती है कि विश्वव्यापी रूप से बेहतर प्रदर्शन करने वाले समाधान के लिए एक कोड आधार के विकास को लेने के लिए क्या होता है जो आसान अनुकूलन अवसरों से आसानी से भ्रमित नहीं होते हैं?
संपादित करें
इस प्रश्न का उत्तर देने के लिए कि हम वर्तमान में कैसे प्रोफाइल बनाते हैं:
हमारे पास वास्तव में केवल 2 अलग-अलग परिदृश्य हैं इस कोड का उपयोग कैसे किया जा सकता है, दोनों शर्मनाक समानांतर। प्रोफाइलिंग को वॉल क्लॉक टाइम के साथ किया जाता है, जो इनपुट के एक बड़े नमूने और अधिक विस्तृत रन (निर्देश लागत, शाखा गलतफहमी और कैशिंग मुद्दों) पर औसतन होता है। यह अच्छी तरह से काम करता है क्योंकि हम विशेष रूप से हमारे बेहद सजातीय मशीनों (एक जोड़े के हजार समान मशीनों का एक समूह) पर चलते हैं। चूँकि हम आम तौर पर अपनी सारी मशीनों को व्यस्त रखते हैं, इसलिए ज्यादातर समय तेज चलने का मतलब है कि हम अतिरिक्त नए सामान देख सकते हैं। मुद्दा यह है कि जब नए इनपुट विविधताओं को दिखाते हैं, तो उन्हें देर से प्राप्त होने वाला जुर्माना मिल सकता है क्योंकि हमने अन्य उपयोग के मामलों के लिए सबसे स्पष्ट माइक्रो-अक्षमताओं को हटा दिया, इस प्रकार संभवतः "आशावादी रूप से चलने वाले" परिदृश्यों की संख्या कम हो गई।
sloc
। मैंने इसे "मध्यम आकार" कहा, क्योंकि मुझे नहीं पता कि यहां "बड़ा" क्या माना जाता है।