2014-05-10 9 views
6

यह सवाल आया था:खेल प्रदर्शन के अनुकूलन साक्षात्कार

आप अपने खेल में बाधाओं के लिए खोज रहे हैं, लेकिन खेल किसी भी तेजी से कुछ भी नहीं है आप बदल रहे हैं बना रही है, यह GPU पाइपलाइन या CPU में कुछ भी हो। कुछ भी नहीं चल रहा है, और धीमाता हर जगह भर में वितरित प्रतीत होता है। इसके बाद क्या करेंगे?

मैं flummoxed था। क्या यह एक चाल सवाल है? पेर्फ मुद्दों को ठीक करते समय, मैं हमेशा मानता हूं कि यह वह बिंदु था जिस पर आपको सब कुछ वापस स्केल करने की आवश्यकता है। मुझे नहीं लगता कि यह मेम आवंटन है, जैसा कि सीपीयू परफ में दिखाया गया है।

+0

मैं पूरी तरह यकीन है कि यह है नहीं हूँ,

मैं आशा है कि आप इस में हास्य देख सकते हैं (यह भी, रोड़ा का उपयोग कर प्रदर्शन को बचाने के लिए और फिर उस मॉडल के लिए पिक्सेल shaders के एक बड़े पैमाने पर जोड़ने अच्छा नहीं माना जाता) एसओ के लिए विषय पर। लेकिन हम देखेंगे कि यह कैसे जाता है ... – Mysticial

+0

मैं शायद विभिन्न हार्डवेयर पर दोहराना चाहता हूं। यकीन नहीं है कि वे क्या देख रहे हैं। –

+1

स्पष्ट रूप से आपको समाधान मिला है - "मैं SO पर प्रश्न पोस्ट करूंगा और परिणामों की प्रतीक्षा करूंगा" ... मुझे लगता है कि ऐसा उत्तर आपके साक्षात्कार में असफल हो जाएगा। –

उत्तर

0

हो सकता है कि यह और अधिक कुशल एल्गोरिदम के बारे में सोच के बारे में है। "सूक्ष्म अनुकूलन" की सीमाएं हैं; उदाहरण के लिए, आप एक बबल प्रकार को पूरी तरह से अनुकूलित कर सकते हैं, लेकिन असली बड़ी गति प्राप्त करने के लिए आप एक और सॉर्टिंग एल्गोरिदम का आविष्कार करेंगे।

इसके अलावा, खेल में आप समायोज्य गुणवत्ता/गति (या परिशुद्धता/गति) तालमेल के विभिन्न प्रकार के परिचय हो सकता है। आम तौर पर सभी गेम में कुछ सेटिंग्स होती हैं जो ग्राफिक विस्तार स्तर को बदलती हैं।

0

आप अपने खेल में बाधाओं के लिए खोज कर रहे हैं, लेकिन कुछ भी आप बदलते किसी भी तेजी से खेल कर रहा है कर रहे हैं, यह GPU पाइपलाइन या CPU में कुछ भी हो। कुछ भी नहीं चल रहा है, और धीमापन हर जगह वितरित किया जाता है।

यह Uniformly Slow Code की परिभाषा की तरह लगता है। मान लेते हैं कि यह वास्तव में क्या यह (और नहीं कुछ मैं/हे एक पाश में टोंटी या अनावश्यक वस्तुओं के निर्माण या datastructures के लिए या एल्गोरिदम के लिए कुछ गरीब विकल्प, आदि) का क्या मतलब है में है।

एक समान रूप से धीमी गति से कोड तेज़ बनाने के लिए, आप आमतौर पर अच्छा प्रथाओं के खिलाफ जाना है, और यही वजह है मैं आमतौर पर मेरी कोड के अनुकूलन जब यह समान रूप से धीमी है बंद करो। (मुझे लगता है कि "ऑप्टिमाइज़ करना बंद करें" एक साक्षात्कार में एक अच्छा जवाब नहीं है ...)

चीजों को तेजी से बनाने का एक तरीका छोटे परिचालनों के उचित अनुक्रम की पहचान करना है, उन्हें एक ही स्थान पर एकत्र करना है, और फिर मैन्युअल रूप से सुधार करना चीज़ें; इन परिचालनों को मैन्युअल रूप से इनलाइन करने के क्रम में उभरने वाले कोड पर उच्च स्तरीय सरलीकरण करना। इसमें अच्छी अंतर्ज्ञान की आवश्यकता है जहां यह शामिल कोड की कर और उत्कृष्ट समझ के लायक हो सकता है। This answer calls it bunching and horizontal optimization.

एक और बात यह है कि अगर आपके वास्तव में समान रूप से धीमी गति से कोड है में देख लायक हो सकता है Andrei Alexandrescu's optimization tips है।

3

मैं अधिक जानकारी के लिए कहा है। "धीमा" खराब प्रदर्शन का एक गरीब संकेतक है और एक लक्षण के बजाय एक लक्षण का वर्गीकरण है। उदाहरण के लिए, आप का वर्णन सकता है किया जा रहा है के रूप में "धीमी":

  • कम फ्रेम दर
  • इनपुट करने के लिए
  • गरीब जवाबदेही
  • उच्च जवाबदेही और चिकनी फ़्रेमरेट, लेकिन धीमी गति से खेल यांत्रिकी (अर्थात: खिलाड़ी और संस्थाओं को सुचारू रूप से लेकिन बहुत धीरे धीरे ले जाते हैं)
  • नेटवर्क खेल के मामले में स्पष्ट नेटवर्क अंतराल में

इन समस्याओं के सभी विभिन्न संभावित कारणों और समाधानों है:

  • कम लेकिन सुसंगत फ्रेम दर आपके गेम लूप में अक्षमता के कारण हो सकती है। बस अपना पसंदीदा प्रोफाइलर चलाना संकेत दे सकता है कि कोड के एक विशेष टुकड़े में बड़ी मात्रा में खर्च किया जाता है। उदाहरण के लिए, मैंने लिखा एक गेम में, मैंने पाया कि कम एफपीएस खराब लूप का परिणाम था जिसने कैशिंग के बिना कई बार इकाइयों के बीच दूरी की गणना की थी। एक और खेल में, मुझे पता चला कि डेटा संरचना मैं इलाके के खिलाफ लुकअप प्रदर्शन करने के लिए उपयोग कर रहा था O(N) बजाय O(1) (अजगर stdlib ... ick) था। आप किसी समस्या का निदान नहीं कर सकते जिसे आप नहीं देख सकते हैं, और प्रोफाइलिंग रक्षा की पहली पंक्ति है।
  • गरीब जवाबदेही चीजों की एक संख्या के कारण हो सकता है। यदि एफपीएस उच्च है लेकिन नियंत्रण जवाब देने के लिए सुस्त हैं, तो एपीआई जिसे आप नियंत्रणों तक पहुंचने के लिए उपयोग कर रहे हैं, वह बस खराब हो सकता है। कुछ नियंत्रकों में क्रैपी ड्राइवर हो सकते हैं जो प्रतिक्रिया को मार सकते हैं। यह आपका गेम लूप भी हो सकता है: आप आसानी से नियंत्रक से अक्सर इनपुट की जांच नहीं कर रहे हैं (शायद आप हर टिक पर जांच नहीं कर रहे हैं)। उपर्युक्त खेलों में से एक में, मुझे एक मुद्दा था जहां कुछ कार्यों में देरी हुई प्रभाव थी: आप एक वस्तु का उपयोग करेंगे और गेम आधा सेकंड या बाद में जवाब देगा। यह पता चला कि क्लाइंट द्वारा कार्रवाई करने के लिए सर्वर के लिए पूर्ण राउंड-ट्रिप बनाने की समस्या उत्पन्न हुई थी, यह सत्यापित किया गया कि यह हुआ है, और सर्वर को वापस प्रसारित करने के लिए प्रतीक्षा करें कि आइटम का उपयोग किया गया था। इस मुद्दे पर तुरंत व्यवहार करने के बाद ग्राहक ने व्यवहार किया।
  • धीरे खेल यांत्रिकी का संकेत हो सकता है कि खेल स्थिरांक बस पर्याप्त उच्च सेट नहीं हैं। अगर सब कुछ चिकनी और सुंदर है लेकिन सब कुछ बहुत धीरे-धीरे चलता है, तो यह काफी संभव है कि डिफ़ॉल्ट वेग या त्वरण पर्याप्त नहीं हो जाते हैं।
  • नेटवर्क अंतराल चीजों के किसी भी संख्या के कारण हो सकते हैं: रूटर कनेक्ट होने पर करने में नाकाम रहने की जा सकती है, वीपीएस आप के खिलाफ एक मेजबान है कि DDoSed किया जा रहा है पर हो सकता है विकसित कर रहे हैं, तो आप एक प्रोटोकॉल बहुत ज्यादा है कि का उपयोग किया जा सकता है (लेकिन समान रूप से) chatty, या आप बस तार पर बहुत अधिक डेटा भेज रहे हैं। सिमुलेशन सॉफ़्टवेयर के एक टुकड़े में मैंने कॉलेज में लिखा था, कम्प्यूटेशंस एक प्रयोगशाला में कुछ बीफ़ी कंप्यूटरों पर किया गया था, जबकि मेरे डोर्म में मेरे एमबीपी पर विज़ुअलाइजेशन चलाए जा रहे थे। यह पता चला कि मैं प्रयोगशाला कंप्यूटर से अपने छात्रावास में कितनी मात्रा में भेज रहा था, इमारत में सस्ते नेटवर्क स्विच को अधिभारित करने और पैकेट ड्रॉप करने के लिए पर्याप्त था, जिसके परिणामस्वरूप भयानक अंतराल लेकिन पूरी तरह से उचित लॉग आउटपुट था।

तो मुझे लगता है कि साक्षात्कारकर्ता लक्षणों को और अधिक पूरी तरह से वर्णन करना है। @ अली का जवाब बहुत अच्छा है, लेकिन यह हो सकता है कि हाथ में एक और अधिक समस्या है जिसके लिए निदान करने के लिए कुछ कोक्सिंग की आवश्यकता है।

0

वास्तविक:

मैं आपको बता सकता है कि समस्या क्या वास्तव में सवाल का जवाब जानने के बिना है, पी

लापरवाही DirectX कॉल। बहुत सारी वस्तुओं। कुछ पुराने dx9 खेलों पर विशेष रूप से खराब, क्योंकि dx9 को प्रत्येक ऑब्जेक्ट के लिए एक नया डायरेक्टड्रा कॉल करने की आवश्यकता होती है। या ऐसा कुछ, कहानी जाती है। मूल रूप से सभी संदेशों को संसाधित करने के लिए जीपीयू के लिए cpu प्रतीक्षा निष्क्रिय होने का परिणाम हुआ।

हालांकि डीईएफ़ नहीं हर मुद्दे का हल, मैं हालांकि यह जानकारी का एक interesing टुकड़े के रूप में उल्लेख के लायक था, पी यह अन्य टिप्पणी में नहीं देखा।

यह लगभग बहुत सारे पिक्सेल शेडर्स की तरह है, कम से कम जीपीयू उन लोगों के द्रव्यमान के साथ 100% पर काम करता है: डी फ्राइंग ओमेलेट्स के लिए अच्छा है। पी

संबंधित मुद्दे