क्या XNA / MonoGame में फ्रैमरेट को अनलॉक करने से मुझे पता चलेगा कि मेरा कोड कितना कुशल है?


12

मैं के माध्यम से MonoGame में framerate अनलॉक कर रहा है:

this.graphics.SynchronizeWithVerticalRetrace = false;
base.IsFixedTimeStep = false;

और इसे एक आधार के रूप में उपयोग कर रहा हूं कि मैं गेम में कितना कुशल हूं और ड्राइंग कर रहा हूं।

240 x 160 के रिज़ॉल्यूशन पर, बिना कुछ खींचे या अपडेट किए एक फ्रेम काउंटर के अलावा मुझे 9,000 से 11,000 एफपीएस का एफपीएस मूल्य मिलता है ।

अगर मैं अपने सभी कोड को वापस जोड़ता हूं तो यह लगभग 1,100 FPS तक गिर जाता है ।

क्या यह एक अच्छा संकेत है कि मेरा कोड GPU (10x) को धीमा कर रहा है, और क्या मुझे चिंतित होना चाहिए? खेल 60 एफपीएस पर चलने वाला है, इसलिए मैं अभी भी उससे बहुत दूर हूं, लेकिन अनलॉक किए गए फ्रेम दर में मुझे किस बिंदु पर चिंतित होना चाहिए?

GPU: AMD FirePro W5000 (FireGL V)


1
एक साइड नोट के रूप में: आपके विकास पथ में, मैं आपको अपने लक्ष्य FPS को डिबग के साथ-साथ रिलीज़ में रखने का सुझाव दूंगा; कुछ विज्ञप्ति में अच्छी तरह से चला सकते हैं लेकिन डिबग में नरक, जो वास्तव में उपयोगी नहीं है :) के रूप में धीमी गति से हो सकता है
Vaillancourt

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

जवाबों:


30

केवल कुरूपता।

सबसे पहले, एफपीएस एक रैखिक उपाय नहीं है । 11k FPS और 9k के बीच का अंतर बेहद छोटा (0.0000201 सेकंड प्रति फ्रेम) है। लेकिन 60 और 2060 FPS (एक 2k FPS डेल्टा, जो 11k और 9k के बीच मौजूद है) के बीच का अंतर 0.0161 सेकंड है ... बहुत बड़ा। यह एक प्रदर्शन मीट्रिक के रूप में खतरनाक हो सकता है क्योंकि बड़े अंतर हो सकते हैं या खराब नहीं हो सकते हैं।

इसके बजाय समय-प्रति-फ्रेम का उपयोग करना थोड़ा आसान है, लेकिन तब भी यह स्थिति का एक बहुत व्यापक दृष्टिकोण है। यह आपको बताता है कि खेल के एक फ्रेम में कितने सेकंड लगते हैं। यह आपको यह नहीं बताता कि जब तक आप किसी विशेष सुविधा को जोड़ने या सक्षम करने के तुरंत बाद फ्रेम समय में बड़ी वृद्धि को नहीं देखते हैं।

यह तय करने के लिए एक बुनियादी बैरोमीटर हो सकता है कि यह अधिक गहराई से प्रोफाइलिंग करने का समय है। यदि आप सीपीयू या जीपीयू-बाउंड हैं, तो यह निर्धारित करने के लिए एफपीएस का उपयोग करना विशेष रूप से खराब है; GPU प्रोफाइलिंग इतना आसान नहीं है जितना कि CPU पर समय को मापना (जो कि आपकी टाइमिंग और FPS- कम्प्यूटेशन कोड शायद है)।

जब तक आपको चिंतित होना चाहिए ... ठीक है, आपने कहा कि खेल 60 एफपीएस को लक्षित कर रहा था। यदि आप उसके पास या नीचे की ओर डुबकी लगाना शुरू करते हैं, तो आपको संभवतः अपने प्रदर्शन के मुद्दों के बारे में अधिक ध्यान से सोचना शुरू करना होगा। तब तक, मैं सब कुछ काम करने पर ध्यान केंद्रित करूंगा और फिर इसे तेजी से बनाने की चिंता करूंगा ।


6
अंतिम वाक्य के लिए +1। समयपूर्व प्रदर्शन अनुकूलन, मेरी राय में, एक बहुत बुरा अभ्यास (अनुभव से बोलना) है।
12

1
c2.com/cgi/wiki?PrematureOptimization - विषय पर पढ़ा अनुशंसित
Machinarius

हमेशा नहीं, यदि आपके पास एक उच्च अंत मशीन है और यह लगभग 80 एफपीएस प्राप्त करता है, तो यह आपकी मशीन पर काफी अच्छा होगा, लेकिन यदि आप निचले छोर के कंप्यूटरों को लक्षित करना चाहते हैं, तो वे केवल 15 एफपीएस प्राप्त कर सकते हैं, आदर्श रूप से, यह सबसे अच्छा होगा जिस मशीन पर आप लक्षित करना चाहते हैं, उसके साथ न्यूनतम परीक्षण करने के लिए अपना परीक्षण करने के लिए, लेकिन इसे विफल करते हुए, इसे अपनी मशीन के लिए अनुकूलित करने से यह उनके लिए भी अनुकूलित हो सकता है। बेशक, अगर यह आपके कम अंत मशीनों पर पर्याप्त तेजी से चलता है, तो आगे अनुकूलन करने के लिए अतिरिक्त प्रयास खर्च करने का कोई कारण नहीं है, खासकर बढ़े हुए बग के जोखिम पर।
प्रोग्राममूड

5

मैं यह नहीं देखता कि आप इसका उपयोग क्यों नहीं कर सकते! ध्यान रखें कि फिक्स्ड / वैरिएबल टाइमस्टेप के बीच के अंतर को ध्यान में रखते हुए आपको कोड को अलग-अलग करना पड़ सकता है, इसलिए यदि आप इसे जारी करते समय तय करने की योजना बना रहे हैं, तो आपको समायोजन करने की आवश्यकता होगी। इस लेख को देखें: http://rbwhitaker.wikidot.com/time-steps

क्या यह एक अच्छा संकेत है कि मेरा कोड जीपीयू को धीमा कर रहा है

CPU भी हो सकता है। मैं आपके कोड में हॉट स्पॉट खोजने के लिए समय-समय पर विजुअल स्टूडियो द्वारा निर्मित प्रोफाइलर (या जब भी आप एक बड़ी फ्रैमरेट ड्रॉप देखते हैं) चलाने की सलाह दूंगा।

क्या मुझे चिंतित होना चाहिए?

यह स्पष्ट रूप से आपके द्वारा लक्षित हार्डवेयर पर निर्भर करता है। आपको न्यूनतम समर्थन मशीनों के खिलाफ अपने कोड का परीक्षण करना होगा जो आप समर्थन करने के इच्छुक हैं। अगर यह वहां कम से कम 60 चलता है, तो मुझे बहुत चिंता नहीं होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.