जहां मैंने काम किया है, हम हमेशा प्रोफाइलिंग के कई स्तरों का उपयोग करते हैं; यदि आपको कोई समस्या दिखाई देती है, तो आप सूची को थोड़ा और नीचे ले जाते हैं जब तक आप यह पता नहीं लगा लेते हैं कि क्या हो रहा है:
- "मानव प्रोफाइलर", उर्फ सिर्फ खेल खेलते हैं ; क्या यह कभी-कभी धीमा या "अड़चन" महसूस करता है? ध्यान देने योग्य झटकेदार एनिमेशन? (एक डेवलपर के रूप में, ध्यान दें कि आप कुछ प्रकार के प्रदर्शन के मुद्दों के प्रति अधिक संवेदनशील होंगे और दूसरों के प्रति अनजान होंगे। तदनुसार परीक्षण की योजना बनाएं।)
- एफपीएस डिस्प्ले चालू करें , जो कि स्लाइडिंग-विंडो 5 सेकंड औसत एफपीएस है। गणना करने और प्रदर्शित करने के लिए बहुत कम ओवरहेड।
- प्रोफ़ाइल सलाखों को चालू करें , जो कि सिर्फ quads (ROYGBIV रंग) की एक श्रृंखला है जो फ्रेम के विभिन्न भागों (जैसे vblank, preframe, अद्यतन, टक्कर, रेंडर, पोस्टफ़्रेम) को एक सरल "स्टॉपवॉच" टाइमर का उपयोग करते हुए कोड के प्रत्येक भाग का प्रतिनिधित्व करते हैं। । हम जो चाहते हैं उस पर जोर देने के लिए, हम 60 हर्ट्ज लक्ष्य फ्रेम के प्रतिनिधि होने के लिए बार के लायक एक स्क्रीन की चौड़ाई निर्धारित करते हैं, इसलिए यह देखना आसान है कि क्या आप बजट के तहत 50% (केवल एक अर्ध-बार) या 50% से अधिक हैं ( बार लपेटता है और डेढ़ बार बन जाता है)। यह बताना बहुत आसान है कि आम तौर पर ज्यादातर फ्रेम क्या खा रहे हैं: लाल = प्रस्तुत करना, पीला = अपडेट, आदि ...
- एक विशेष इंस्ट्रूमेंट बिल्ड बनाएँ जो आवेषण को "स्टॉपवॉच" की तरह प्रत्येक और हर फ़ंक्शन के आसपास कोड बनाता है। (ध्यान दें कि ऐसा करते समय आप एक विशाल प्रदर्शन, dcache और icache हिट कर सकते हैं, इसलिए यह निश्चित रूप से घुसपैठ है। लेकिन अगर आपको सीपीयू पर एक उचित नमूना प्रोफाइलर या सभ्य समर्थन की कमी है, तो यह एक स्वीकार्य विकल्प है। आप चतुर भी हो सकते हैं। फ़ंक्शन में न्यूनतम डेटा दर्ज करने के बारे में / बाद में कॉल आउट और पुनर्निर्माण को फिर से दर्ज करें।) जब हमने अपना निर्माण किया था, तो हमने बहुत अधिक लाभकारी उत्पादन प्रारूप की नकल की ।
- सभी के सर्वश्रेष्ठ, एक नमूना प्रोफाइलर चलाएं ; वीटीएन और कोडअनलिस्ट x86 और x64 के लिए उपलब्ध हैं, आपको विभिन्न सिमुलेशन या अनुकरण वातावरण मिले हैं जो आपको यहां डेटा दे सकते हैं।
(एक ग्राफिक्स प्रोग्रामर के पिछले साल के जीडीसी से एक मजेदार कहानी है, जिसने खुद की चार तस्वीरें लीं - खुश, उदासीन, नाराज़ और गुस्से में - और फ्रैमर्ट के आधार पर आंतरिक बिल्ड के कोने में एक उपयुक्त तस्वीर प्रदर्शित की।) सामग्री निर्माता जल्दी से अपनी सभी वस्तुओं और वातावरणों के लिए जटिल शेड्स चालू नहीं करना सीख गए : वे प्रोग्रामर को क्रोधित कर देंगे। प्रतिक्रिया की शक्ति को बनाए रखें।)
ध्यान दें कि आप "प्रोफाइल बार" जैसे ग्राफ़ को लगातार मज़ेदार कर सकते हैं, इसलिए आप स्पाइक पैटर्न देख सकते हैं ("हम हर 7 फ्रेम में एक फ्रेम खो रहे हैं") या जैसे।
आपके प्रश्न का सीधा उत्तर देने के लिए, हालाँकि: मेरे अनुभव में, जबकि यह आकर्षक है (और अक्सर पुरस्कृत - मैं आमतौर पर कुछ सीखता हूं) एकल कार्यों / मॉड्यूल को निर्देश या आइकैश या dcache प्रदर्शन की संख्या का अनुकूलन करने के लिए फिर से लिखना, और हमें वास्तव में करने की आवश्यकता है कभी-कभी जब हमें विशेष रूप से अप्रिय प्रदर्शन की समस्या होती है, तो अधिकांश प्रदर्शन समस्याएँ जो हम नियमित आधार पर करते हैं, डिजाइन के लिए नीचे आते हैं । उदाहरण के लिए:
- क्या हमें RAM में कैश करना चाहिए या डिस्क से "पुनः लोड" प्लेयर के लिए राज्य एनीमेशन फ्रेम करना चाहिए? प्रत्येक दुश्मन के बारे में कैसे? हम उन सभी को करने के लिए RAM नहीं है, लेकिन डिस्क लोड महंगे हैं! आप एक बार में 5 या 6 अलग दुश्मन पॉप अगर अड़चन देख सकते हैं! (ठीक है, कैसे चौंका देने वाला spawning के बारे में?)
- क्या हम सभी कणों में एक ही प्रकार का ऑपरेशन कर रहे हैं, या एक ही कण में सभी ऑपरेशन कर रहे हैं? (यह एक icache / dcache tradeoff है, और उत्तर हमेशा स्पष्ट नहीं होता है।) कैसे सभी कणों को अलग-अलग खींचने और पदों को एक साथ संग्रहीत करने के बारे में (प्रसिद्ध "सरणियों की संरचना") बनाम सभी कण डेटा को एक स्थान पर रखना (" संरचना की सरणी ")।
आप इसे तब तक सुनते हैं जब तक कि यह किसी भी विश्वविद्यालय स्तर के कंप्यूटर विज्ञान पाठ्यक्रमों में अप्रिय नहीं हो जाता है, लेकिन यह वास्तव में डेटा संरचनाओं और एल्गोरिदम के बारे में है। एल्गोरिथ्म और डेटा प्रवाह डिजाइन पर कुछ समय बिताने से आपको सामान्य रूप से हिरन के लिए अधिक धमाका होने वाला है। (सुनिश्चित करें कि आपने सोनी डेवलपर सर्विसेज फेलो से ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग स्लाइड के उत्कृष्ट नुकसानों को यहाँ कुछ अंतर्दृष्टि के लिए पढ़ा है।) यह अनुकूलन की तरह "महसूस" नहीं करता है; यह ज्यादातर समय एक व्हाइटबोर्ड या यूएमएल टूल के साथ बिताया जाता है या वर्तमान कोड को तेजी से चलाने के बजाय कई प्रोटोटाइप बनाता है। लेकिन यह आमतौर पर बहुत अधिक सार्थक है।
और एक और उपयोगी हेयुरिस्टिक: यदि आप अपने इंजन के "कोर" के करीब हैं, तो यह अनुकूलन करने के लिए कुछ अतिरिक्त प्रयास और प्रयोग के लायक हो सकता है (उदाहरण के लिए उन मैट्रिक्स गुणकों को वेक्टर करें!)। कोर से आगे, आपको कम इस बात की चिंता होनी चाहिए कि जब तक आपका कोई प्रोफाइलिंग टूल आपको नहीं बताता है।