क्या गेम के लिए 100% CPU का उपयोग करना सामान्य है?


23

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

मैंने अन्य खेलों के साथ जाँच की है कि क्या वे ऐसा करते हैं। उदाहरण के लिए स्किरिम और डूम 3 केवल 60% सीपीयू के साथ ठीक लगते हैं।

क्या यह गेम के लिए स्वीकार्य है जो 100% CPU का उपयोग करने के लिए बहु-थ्रेडेड इनपुट का उपयोग करता है? यदि नहीं, तो क्या कुछ ऐसे ट्रिक्स हैं जो इनपुट थ्रेड द्वारा सीपीयू के उपयोग को कम करते हैं?


7
तो आप क्या कहते हैं, आपके पास मूल रूप से एक अंतहीन लूप है, जबकि लूप है जो लगातार नई घटनाओं के लिए ओएस को पोल करता है? while true do CheckForEvents;
क्रॉस्टर का कहना है कि

5
यदि कोई एप्लिकेशन उपयोग और सीपीयू की गति की परवाह किए बिना सीपीयू समय का 100% उपयोग करता है, तो इसे सही ढंग से बग माना जा सकता है। मॉनीटर रिफ्रेश साइकिल के फ्रेम को रेंडर करने के लिए आपको जरूरत से ज्यादा सीपीयू समय का उपयोग नहीं करना चाहिए।
कैस्परल्ड

3
@ TheLightSpark क्या मतदान केंद्र भी नहीं सोता है? यदि आप लगातार सो रहे हैं और बिना सोए जाँच कर रहे हैं, तो आप शायद ज़रूरत से ज़्यादा सीपीयू समय खा सकते हैं।
ल्यूक

3
पुन @Luke: यहां तक कि सिर्फ एक सो milisecond चुनाव के बीच काफी CPU उपयोग कम हो जाएगा। कुछ समय पहले, मैंने कमांड लाइन टूल के लिए एक GUI लिखा था जो एक इनपुट फ़ाइल ले गया था और आउटपुट फाइल को लगभग एक ही आकार का बना दिया था। प्रतिशत का अनुमान लगाने के लिए, मैंने आउटपुट फ़ाइल का फ़ाइल आकार पढ़ा और प्रगति पट्टी (उपयोग करके while (true)) को अपडेट किया । ऐसा करने के लिए एक सीपीयू के 90% + का उपयोग किया। Thread.Sleep(5)इसमें एक जोड़ा गया CPU उपयोग को 40% से कम करने के लिए। चुनावों के बीच 25 मिलीसेकंड पर जाकर इसे 10% से नीचे ले आया।
कोल जॉनसन

2
@AlecTeal मुझे लगता है कि आपने मेरे कहे पर पर्याप्त ध्यान नहीं दिया। बेहतर ग्राफिक्स को प्रस्तुत करना समान उपयोग नहीं है, और निश्चित रूप से बेहतर ग्राफिक्स को सक्षम करने से सीपीयू की खपत बढ़ जाएगी। लेकिन अगर तेजी से सीपीयू पर स्विच करने से आपका कोड ठीक उसी परिणाम का उत्पादन करने वाले अधिक चक्र खर्च करने का कारण होगा, तो आपका कोड त्रुटिपूर्ण है। स्वचालित रूप से मापना कि ग्राफिक्स की गुणवत्ता को एक विशिष्ट सीपीयू के साथ क्या प्रदान किया जा सकता है, एक समझदार डिफ़ॉल्ट है। लेकिन आपको उपयोगकर्ताओं को बैटरी पावर पर चल रहे मामले में या पृष्ठभूमि की नौकरियों के लिए सीपीयू की आवश्यकता होती है।
19

जवाबों:


41

हां, यह वास्तविक समय के खेल के लिए 100% सीपीयू का उपयोग करने की कोशिश करने के लिए सामान्य है जितना तेज़ और अच्छा हो सकता है। तो वह खिलाड़ी प्रति सेकंड या ज्यादा फिजिक्स सिमुलेशन या किसी अन्य चीज के रूप में देखता है जितना कि उसका पीसी प्रदान कर सकता है।

आपके मामले में - नहीं, यह एक अकुशल डिजाइन की तरह दिखता है, एक धागा लेने के लिए और इसे एक लूप ( while true do CheckForEvents;) में घटनाओं के लिए सर्वेक्षण करने के लिए । अगर मैं गलत हूं तो मुझे ठीक करें, लेकिन ओएस पहले से ही घटनाओं का सर्वेक्षण करता है। आपको हर टिक के बाद बस उन्हें अपने मुख्य धागे से जांचना चाहिए।

मुख्य गेम लूप को 30+ टिक प्रति सेकंड पर चलाने के लिए पर्याप्त तेज़ होना चाहिए, जो कि कई गेम के लिए पोलिंग कमांड के लिए काफी पर्याप्त है। अगर उसकी आज्ञाओं को 0-33ms बाद में संसाधित किया जाता है तो खिलाड़ी को कोई अंतर नहीं दिखाई देगा। दूसरी ओर आप अधिक लाभकारी कार्यों के लिए अतिरिक्त CPU कोर का उपयोग कर सकते थे, जैसे कि MUCH बेहतर AI या भौतिकी या जो भी हो।

PS जैसा कि टिप्पणियों में स्पष्ट करने के लिए अनुरोध किया गया है, सभी प्रकार के खेलों के लिए नेत्रहीन रूप से उपरोक्त संख्या न लें। जबकि TBS गेम को प्रति टिक्क की सिर्फ 1 टिक की आवश्यकता हो सकती है और RTS गेम 10 टिक्स के साथ ठीक हो सकता है, अन्य शैलियों, जैसे रेससिम को बहुत अधिक की आवश्यकता होती है। और निश्चित रूप से फ्रैमर्ट के साथ लॉजिक टिक को टाई न करें, ये दो अलग चीजें हैं।


5
मैं इस प्रश्न को बढ़ाऊंगा, लेकिन फिर मैं आपको प्रति सेकंड 30 टिक्स सुझाता हूं। IMHO (और कई अन्य गेमर्स), आपको प्रति सेकंड 60 टिक्स (और इस प्रकार 60 फ़्रेम) के लिए लक्ष्य करना चाहिए। कई लोगों के लिए 60 एफपीएस अधिक तरल पदार्थ दिखता है, अधिक प्रतिक्रियाशील होता है और उपयोगकर्ताओं की गति बीमारी का एक निश्चित सबसेट देने की संभावना कम होती है।
नजल्ल

4
इनपुट के लिए 33ms देरी बहुत ध्यान देने योग्य है ...
सिन्क्सिस

1
@NateKerkhofs: मैं आरटीएस पृष्ठभूमि से आया हूं, जहां 10 टिक सामान्य हैं। यह एक व्यापक दुनिया है, मैं इसके बारे में विवरण जोड़ूंगा। इशारा करने के लिए धन्यवाद।
क्रॉस्टर कहते हैं कि

1
@KromStern: मैं नैट के लिए पूरी तरह से नहीं बोल सकता, लेकिन तीसरे पैराग्राफ की व्याख्या "30hz आपके लक्ष्य के रूप में की जानी चाहिए", हालांकि इसकी व्याख्या भी की जा सकती है क्योंकि "30 हर्ट्ज न्यूनतम है जिसे आप बर्दाश्त कर सकते हैं" (जिसका मतलब है कि आप क्या कर सकते हैं) )।
शॉन मिडिलडाइच

1
100% CPU का उपयोग करना भयानक अभ्यास है। आप ऐसे सामान के लिए लैपटॉप उपयोगकर्ताओं से पंगा ले रहे हैं जो किसी भी तरह से, आकार या रूप में 100% CPU का उपयोग करने की आवश्यकता नहीं है। एक उचित गेम लूप को कोड करें जो मॉनिटर को फ़्रेम को कुशलतापूर्वक फीड कर सकता है।
क्रिस डेनेट

9

एक निरंतर सक्रिय विंडो रिफ्रेश वाला गेम ज्यादातर फुल-स्क्रीन मोड में चलाया जाएगा और ओएस द्वारा प्रबंधित मशीन का एकमात्र (बड़ा) प्रोग्राम होगा। इसलिए यह 100% CPU का उपयोग करने के लिए पूरी तरह से स्वीकार्य है, क्योंकि और कुछ भी इसकी आवश्यकता नहीं होनी चाहिए।

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

जैसा कि @KromSterm ने कहा, OS आमतौर पर पहले से ही आपके लिए ईवेंट को पोल कर देता है, इसलिए ओएस वन की तुलना में तेजी से लूप बनाने की आवश्यकता नहीं है। यदि आपके पास केवल दो कोर हैं, तो केवल 100% का उपयोग केवल घटनाओं का पता लगाने के लिए एक अच्छा विचार नहीं है, क्योंकि यदि आप केवल घटनाओं को मुख्य अपडेट लूप में स्थानांतरित करते हैं, तो यह निष्पादित करना बहुत तेज़ है। आपको इसके बजाय मुख्य थ्रेड जॉब के एक भाग के लिए इस कोर का उपयोग करने का प्रयास करना चाहिए।


"एक नींद विधि का उपयोग करें" - क्या मैं यह सोचने में सही हूं कि यह फ्रैमरेट लिमिटर के रूप में जाना जाता है?
गुस्सोर

3
नींद फ्रेम सीमित करने की सटीक विधि नहीं है, यदि लक्ष्य ताज़ा दर की निगरानी के लिए फ़्रेम को सीमित करना है, तो बेहतर है कि हार्डवेयर-समर्थित vsync (या nvidia का जी-सिंक, यदि उपलब्ध हो) का उपयोग करें
सर्ज बोर्स्च

8

पीसी या मोबाइल गेम में सभी उपलब्ध सीपीयू समय का उपयोग करने का लक्ष्य रखने की कुछ कमियां हैं।

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

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

भौतिकी परिवर्तनशीलता: यदि भौतिकी जो गेमप्ले को प्रभावित करती है, मजबूत मशीनों पर अधिक विस्तृत होती है, तो एक ही खिलाड़ी की कार्रवाई के विभिन्न मशीनों पर अलग-अलग परिणाम होंगे। इसका मतलब यह है कि खिलाड़ी एक मजबूत या कमजोर मशीन का उपयोग करके धोखा देने में सक्षम हो सकता है। Id का Quake III Arena फ्रेम रेट प्रभावित करने के लिए कुख्यात है, जो ऊंचाई को प्रभावित करता है । इससे बचने के लिए, बहुत सारे खेल भौतिकी के लिए एक निश्चित समय कदम का उपयोग करते हैं। लेकिन यह भौतिकी को प्रभावित नहीं करता है जो कि गेमप्ले से डिस्कनेक्ट हो जाते हैं, जैसे कि कण प्रभाव या कपड़ा प्रभाव या भौतिक विज्ञान की तुलना में उच्च फ्रेम दर पर वीडियो को प्रस्तुत करने के लिए भौतिकी फ्रेम के बीच समन्वय का प्रक्षेप। इसलिए मॉडल-व्यू-कंट्रोलर के कुछ प्रकार का उपयोग करके अपनी भौतिकी को डिज़ाइन करें आर्किटेक्चर, जहां आवश्यक चीजें (त्वरण, हिट डिटेक्शन, और इसी तरह) मॉडल में जाती हैं और समायोज्य आंख कैंडी देखने में जाती हैं।

एआई परिवर्तनशीलता: यदि एआई मजबूत मशीनों पर अधिक विस्तृत है, तो दुश्मन अलग-अलग मशीनों पर अलग-अलग व्यवहार करेंगे। उदाहरण के लिए, गो या शतरंज के कार्यान्वयन में, प्रतिद्वंद्वी कमजोर पीसी पर कमजोर होगा, और खिलाड़ी कमजोर पीसी पर गेम खेलकर या पृष्ठभूमि प्रक्रियाओं जैसे एंटीवायरस या वीडियो ट्रांसकोडिंग या ऑपरेटिंग सिस्टम अपडेट चलाकर धोखा दे सकते हैं।


4
पावर उपयोग के लिए +1। खासकर जब आपको मोबाइल और टैबलेट उद्योग पर विचार करना चाहिए, जहां यह अत्यंत महत्वपूर्ण है।
अकलतरा

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

1
बिजली का उपयोग प्राथमिक विचार, अन्य सभी विचार माध्यमिक, IMHO होना चाहिए। केवल एक चीज मैं 100% सीपीयू के लिए उपयोग करूंगा (यदि यह वास्तव में मदद करता है!) वीआर सामान है।
क्रिस डेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.