माइक्रो-अनुकूलन - बीएडी बनाम गेम डेवलपमेंट


12

खेल के विकास में व्यापार अनुप्रयोगों C # में C / C ++ बहुत है। मैंने देखा है कि C / C ++ देवता इस बात पर चिंता व्यक्त करते हैं कि किस प्रकार कोड की एक पंक्ति असेंबली में अनुवाद करती है। .NET में, कुछ IL में जाते हैं, शायद ही कभी।

C # में, "माइक्रो-ऑप्टिमाइज़िंग" पर दुर्लभ और आमतौर पर समय की बर्बादी होती है। खेल के विकास में ऐसा नहीं होता है।

क्या विशेष रूप से यह असंगति पैदा करता है? क्या खेल लगातार हार्डवेयर की सीमा को धक्का देते हैं? यदि हाँ, हार्डवेयर सुधार के रूप में हमें गेमिंग उद्योग पर उच्च स्तरीय भाषाओं की अपेक्षा करनी चाहिए?

मैं सी # की व्यवहार्यता पर एक बहस की तलाश में नहीं हूं क्योंकि गेम देव लंग। मुझे पता है कि यह कुछ हद तक किया गया है। माइक्रो-ऑप्टिमाइज़ेशन पर ध्यान दें। विशेष रूप से, गेम देव बनाम एप्लीकेशन देव के बीच का अंतर।


खेल द्वारा अद्यतन मैं आधुनिक, बड़े पैमाने पर विकास का मतलब है। EG MMORPG, Xbox, PS3, Wii ...


3
मैंने एक गेम डेवलपर और एक एप्लिकेशन डेवलपर के रूप में काम किया है और अंतर मूट हैं। प्रोफाइलिंग के बिना माइक्रो ऑप्टिमाइज़ेशन दोनों पर ही आधारित है। कई खेलों में बहुत शक्तिशाली आवश्यकताएं नहीं होती हैं और न ही किसी अनुकूलन की आवश्यकता होती है। कुछ व्यावसायिक अनुप्रयोगों को औसत 60 हर्ट्ज गेम की तुलना में कहीं अधिक कठोर आवश्यकताओं (जैसे अपटाइम और वास्तविक समय की गारंटी) की आवश्यकता होती है।
डेव हिलियर

1
एक अतिरिक्त कारक यह है कि व्यावसायिक अनुप्रयोगों में, आप आमतौर पर हार्डवेयर का चयन कर सकते हैं (कारण के भीतर)। यदि मुझे अधिक प्रसंस्करण शक्ति की आवश्यकता है, तो मैं बस एक और सर्वर खरीद सकता हूं, या AWS पर अधिक समय के लिए भुगतान कर सकता हूं। खेलों में, नवीनतम हार्डवेयर की आवश्यकता $ 60 के खेल को $ 1,060 खेल और वीडियो कार्ड में बदल जाती है। यदि आप कंसोल के लिए विकसित कर रहे हैं, तो हार्डवेयर को अपग्रेड करने का मतलब हो सकता है कि अगली पीढ़ी की प्रतीक्षा में वर्षों तक देरी हो। जब आप बेहतर हार्डवेयर प्राप्त नहीं कर सकते, तो आपको इसका बेहतर उपयोग करना होगा।
एंड्रयू

जवाबों:


17

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

  1. डेटाबेस क्वेरी से परिणाम की प्रतीक्षा कर रहा है
  2. वेब अनुरोध समाप्त होने की प्रतीक्षा कर रहा है
  3. यूआई कार्रवाई करने के लिए उपयोगकर्ता की प्रतीक्षा कर रहा है

यही कारण है कि कोड जो प्रसंस्करण प्रदर्शन का अनुकूलन करता है, बहुत अधिक मूल्य नहीं जोड़ता है।

प्राथमिक विचार है:

  1. बाजार के लिए समय
  2. सरलता, कोई और कोड को समझ सकता है और बनाए रख सकता है

6
मैं उस कोड को इंगित करता हूं जो डेटाबेस प्रश्नों का अनुकूलन करता है, व्यावसायिक अनुप्रयोगों की उपयोगिता में काफी सुधार कर सकता है।
HLGEM

4
+1। डेटाबेस और नेटवर्क अनुकूलन आमतौर पर व्यापार एप्लिकेशन में हिरन के लिए अधिक धमाके देगा। जैसे JSON बनाम XML और ट्यूनिंग DB इंडेक्स
शमिता वर्मा

2
+1 लेकिन आपको समीकरण के दूसरे हिस्से को जोड़ना चाहिए: डायन पर "मेन लूप (एस)" ​​और गेम में रेंडरिंग (एस) गेम की तरलता पर निर्भर करती है, जिससे प्रत्येक माइक्रोसेकंड को मूल्य का नुकसान होता है, क्योंकि गुणवत्ता बोधगम्य है आंख और अन्य इंद्रियों को।
कुलेम

1
ख़ूब कहा है। और वास्तव में, व्यवसाय एप्लिकेशन और गेम डेवलपमेंट करने के बाद, मैंने एक जटिल एसक्यूएल क्वेरी पर समय बिताने के लिए कुछ और प्रदर्शन करने की कोशिश की है, जितना कि मैंने एक गेम में एक आंतरिक लूप पर समय बिताने के लिए खर्च किया है।
कार्सन 63000

यह सभी समय से पहले अनुकूलन के लिए आता है सभी बुराई की जड़ है । प्रोफाइलिंग से स्पष्ट रूप से पता चलता है कि आपके औसत व्यावसायिक अनुप्रयोग में बिताया गया अधिकांश समय नेटवर्क + डेटाबेस IO है।
एलेक्स रिंकिंग

13

व्यावसायिक अनुप्रयोगों में, माइक्रोसेकंड के लिए यह बहुत दुर्लभ है। खेलों में, यह जीवन का एक तथ्य है।

यदि आप 60 फ्रेम प्रति सेकंड की रफ्तार से चलने वाला खेल चाहते हैं, तो आपके पास ~ 16.67 मिलीसेकंड सब कुछ करने के लिए है जो उस फ्रेम के लिए किए जाने की आवश्यकता है - इनपुट, भौतिकी, गेमप्ले तर्क, ऑडियो, नेटवर्किंग, एआई, प्रतिपादन, और इसी तरह; यदि आप भाग्यशाली हैं, तो आप 30 एफपीएस पर चलेंगे और एक शानदार 33.3 मिलीसेकंड होगा। यदि कोई फ़्रेम बहुत लंबा होता है, तो आपकी समीक्षा में नुकसान होगा, आपके खिलाड़ी पित्त के साथ इंटरनेट फ़ोरम भरेंगे और आप उतना नहीं बेचेंगे जितना आप (अपने पेशेवर गौरव को झटका देने का उल्लेख नहीं) और यदि आप वास्तव में अशुभ हैं एक जीने के लिए आपकी टीम कोडिंग व्यावसायिक अनुप्रयोगों को खोजेगी।

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

किसी भी उच्च स्तरीय भाषा की अपेक्षा न करें जब तक कि सी + + दरवाजे को लात न मार दे जब तक कि एक तुलनीय और पूर्वानुमान योग्य, प्रदर्शन प्रदान नहीं करता।


8
उच्च-आवृत्ति ट्रेडिंग अनुप्रयोगों में, माइक्रोसेकंड बहुत मायने रखता है!
मात्रा_देव

2
@ क्वेंट: जैसा कि अधिकांश स्ट्रीम-प्रोसेसिंग एप्लिकेशन - रोबोटिक्स, पावर ग्रिड, रॉकेटरी, मेडिकल टेक्नोलॉजी आदि में बहुत अधिक बैकलॉग का निर्माण होता है और जब तक आप इसे पकड़ते हैं तब तक बहुत देर हो सकती है।
Aaronaught

@quant_dev: उच्च आवृत्ति व्यापार अनुप्रयोगों हैं बहुत ही दुर्लभ।
मोल्बडेनिलो

अब नहीं है। वे लेखांकन अनुप्रयोगों की तुलना में दुर्लभ हैं, लेकिन हवाई जहाज डिजाइन सॉफ्टवेयर की तुलना में अधिक सामान्य हैं।
मात्रा_देव

व्यावसायिक ऐप्स में भी माइक्रोसेकंड की बात है, अड़चन आमतौर पर कहीं और पाई जाती है (पूरे नेटवर्क में, डेटाबेस या फ़ाइल में)।
रबरडुक

9

ठीक है, इसलिए आपने C और C ++ डेवलपर्स को अलग-अलग लाइनों के बारे में देखते हुए देखा है। मुझे यकीन है कि वे प्रत्येक और हर पंक्ति पर जुनूनी नहीं है।

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

ऐसा इसलिए नहीं है क्योंकि भाषाएं लोगों को उस में मजबूर करती हैं, यह है कि लोग उन भाषाओं के आधार पर चुनते हैं जो वे करना चाहते हैं। यदि आप किसी प्रोग्राम के अंतिम बिट प्रदर्शन को राइट करना चाहते हैं, तो आप C # नहीं लिखेंगे और CLR को संकलित कर सकते हैं और आशा करते हैं कि JIT कंपाइलर (या जो भी) अच्छा काम करता है, आप इसे कुछ ऐसे में लिखेंगे जहाँ आप बड़े पैमाने पर नियंत्रण कर सकते हैं उत्पादन। आप C या C ++ (और शायद C ++ का प्रतिबंधित सब्मिट) का उपयोग करेंगे और असेंबली-भाषा के आउटपुट और प्रोफाइलर परिणामों का अध्ययन करेंगे।

ऐसे बहुत सारे लोग हैं जो C और C ++ का उपयोग करते हैं और अनुवाद के विवरणों के बारे में बहुत अधिक चिंता नहीं करते हैं, जब तक कि यह काफी तेज लगता है।


7

क्या खेल लगातार हार्डवेयर की सीमा को धक्का देते हैं?

हाँ, वो करते हैं।

यदि हाँ, हार्डवेयर सुधार के रूप में हमें गेमिंग उद्योग पर उच्च स्तरीय भाषाओं की अपेक्षा करनी चाहिए?

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

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


1
इन दिनों खेल देवों का एक अच्छा हिस्सा किसी और द्वारा लिखी गई हाइपर-अनुकूलित इंजन परत का उपयोग करता है, फिर कुछ चीज़ों को एक साथ लपेटने के लिए पायथन, या कम सावधानीपूर्वक सी ++ का उपयोग करें।
मॉर्गन हेरलॉकर

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

7

C # में, "माइक्रो-ऑप्टिमाइज़िंग" पर दुर्लभ और आमतौर पर समय की बर्बादी होती है। खेल के विकास में ऐसा नहीं होता है।

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


0

"गेम" काफी एक शब्द है। यदि आप कहते हैं, एक MMORPG, छोटे अनुकूलन कई खिलाड़ियों को प्रभावित करेगा।

गेमर, और शायद हमेशा से रहे हैं, वास्तविक समय में, एक बार में होने वाली चीजों की तुलनात्मक रूप से बड़ी मात्रा में उपयोग किया जाता है। ज़रूर; एक समय में, एक उत्तरदायी Pacman या Tetris होने का लक्ष्य था। लेकिन उन्हें अभी भी उत्तरदायी होना था। अब, पैकेट-छोड़ने वाले नेटवर्क-कनेक्शन पर 3DMMORPGs।

मुझे यकीन है कि अनुकूलन करना चाहते हैं।


0

खेल लगातार बड़े पैमाने पर पृष्ठभूमि प्रसंस्करण करते हैं। व्यावसायिक ऐप्स नहीं हैं।


4
क्या आप बहुत सारे व्यावसायिक ऐप नहीं करते हैं?
बस मेरा सही विकल्प

2
यह जानने के लिए कि व्यावसायिक ऐप्स को प्रति सेकंड 60 बार अपनी स्थिति अपडेट करने की आवश्यकता नहीं है। इसके अलावा, मैंने विशेष रूप से कहा "लगातार।"
user16764

2
कभी रियल-टाइम ट्रेडिंग के बारे में सुना है?
JUST MY correct OPINION

0

मुझे हमेशा "सूक्ष्म-अनुकूलन" शब्द मिला, बल्कि अस्पष्ट। यदि मेमोरी-लेआउट और एक्सेस पैटर्न में कुछ अनुदेश-स्तर के परिवर्तन अनुशासनात्मक पेशेवर से एल्गोरिदमिक जटिलता में कोई कमी नहीं करते हुए अपने हॉटस्पॉट को मापने से 80 गुना अधिक तेज बनाते हैं, तो क्या यह "माइक्रो-ऑप्टिमाइज़ेशन" है? मेरे लिए वह "मेगा-ऑप्टिमाइज़ेशन" है जो वास्तविक दुनिया के उपयोग के मामले में 80 गुना अधिक तेज है। लोग इन चीजों के बारे में बात करते हैं जैसे कि इस तरह के अनुकूलन के सूक्ष्म प्रभाव होते हैं।

मैं अब gamedev में काम नहीं कर रहा हूँ, लेकिन मैं पथ अनुरेखण जैसे क्षेत्रों में VFX में काम करता हूं, और मैंने बीवीएचएस और केडी पेड़ों के कई कार्यान्वयन देखे हैं जो एक जटिल दृश्य पर प्रति सेकंड ~ 0.5 मिलियन किरणों की प्रक्रिया करते हैं (और यह इसके साथ है बहुआयामी मूल्यांकन)। मोटे तौर पर मैं 1 मिलियन से अधिक किरणों / सेकंड में बीवीएच के सीधे कार्यान्वयन को देखने के लिए प्रेरित करता हूं, यहां तक ​​कि मल्टीथ्रेडेड मूल्यांकन के साथ भी। सिवाय एम्ब्री में एक बीवीएच है जो एक ही दृश्य पर एक ही हार्डवेयर के साथ 100 मिलियन से अधिक किरणों को संसाधित कर सकता है।

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

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

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

यदि हाँ, हार्डवेयर सुधार के रूप में हमें गेमिंग उद्योग पर उच्च स्तरीय भाषाओं की अपेक्षा करनी चाहिए?

मुझे संदेह है कि हार्डवेयर प्रगति अकेले ऐसा कर सकती है, क्योंकि हार्डवेयर अग्रिमों के रूप में, इसलिए बहुत सारे निर्देश और प्रौद्योगिकी (उदाहरण: जीपीयू पर भौतिकी), और तकनीक, और ग्राहक अपेक्षाएं जो वे देखना चाहते हैं, और प्रतिस्पर्धा, वे तरीके जो अक्सर डेवलपर्स के निम्न-स्तर पर जा रहे हैं, जैसा कि वेब डेवलपर्स के मामले में भी अब WebGL में निम्न-स्तरीय GLSL शेड्स लिखते हैं (इस विशेष प्रकार का वेब विकास यकीनन निचले स्तर का है, जो एक या दो दशक पहले था, जैसा कि जीएलएसएल एक बेहद निम्न स्तर की सी-लाइक भाषा है, और मैंने कभी भी एक या दो दशक पहले यह अनुमान नहीं लगाया होगा कि कुछ वेब डेवलपर्स ऐसे निम्न-स्तरीय जीपीयू शेड्स लिखना पसंद करेंगे)।

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

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

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

उच्च स्तर! = कम कुशल

इस सवाल पर वापस आ रहे हैं:

यदि हाँ, हार्डवेयर सुधार के रूप में हमें गेमिंग उद्योग पर उच्च स्तरीय भाषाओं की अपेक्षा करनी चाहिए?

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

जैसा कि सी कंपाइलरों के अनुकूलन से उनके अनुकूलन में और अधिक होशियार हो गए, फिर उन्होंने एक ऐसे बिंदु पर पहुंचना शुरू कर दिया, जहां सी में लिखा गया उच्च-स्तरीय कोड प्रतिद्वंद्वी था और कभी-कभी कई क्षेत्रों में बेहतरीन असेंबली विशेषज्ञों द्वारा लिखे गए कोड से बेहतर प्रदर्शन करता था (हालांकि हमेशा नहीं) इसने इसे तब बनाया जब एक गेम के लिए कम से कम कोडिंग के लिए सी को अपनाने के लिए यह एक दिमाग नहीं था। और सी ++ के साथ कुछ बिंदु पर एक समान बदलाव धीरे-धीरे हुआ। जब से मुझे लगता है कि C ++ अडॉप्शन धीमा था, क्योंकि मुझे लगता है कि असेंबली से C तक जाने के विरोध के रूप में असेंबली में पूरी तरह से गैर-तुच्छ खेल लिखने वाले gamedevs से सर्वसम्मति से समझौता हो सकता है।

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

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


0

C # में, "माइक्रो-ऑप्टिमाइज़िंग" पर दुर्लभ और आमतौर पर समय की बर्बादी होती है। खेल के विकास में ऐसा नहीं होता है।

आपको यहां शब्दावली की समस्या है। आप शब्दों का सही उपयोग कर रहे हैं, लेकिन गेम डेवलपर और व्यवसायी लोग एक ही शब्द का दो अलग-अलग तरीकों से उपयोग कर रहे हैं।

व्यवसाय के लिए, "माइक्रो ऑप्टिमाइज़ेशन" का अर्थ है सॉफ्टवेयर द्वारा कार्यान्वित समग्र व्यावसायिक प्रक्रिया में एक बहुत छोटा कदम। इसका कारण यह है कि आमतौर पर इनमें से एक है:

  1. एक ही व्यापार मूल्य देने में खर्च किए गए अतिरिक्त पैसे, कुछ सेकंड तेज गति से। गति सुधार में बचाए गए पैसे पैसे के एक अलग पूल (उपयोगकर्ता के समय) से आते हैं, इसलिए व्यवसाय आम तौर पर उस प्रयास से लाभ नहीं उठाता है जो ग्राहक खर्च करता है, ग्राहक व्यवसाय की कीमत पर करता है।
  2. आमतौर पर व्यावसायिक प्रोग्रामर की समग्र व्यावसायिक प्रक्रिया में खराब दृश्यता होती है, इसलिए एक कदम के अनुकूलन से समग्र प्रक्रिया को अच्छा लाभ नहीं मिल सकता है। उदाहरण के लिए, यदि आप 10% प्रक्रिया का 3% तेजी से बनाते हैं, तो आपने पूरी प्रक्रिया को 2.7% बढ़ा दिया है।
  3. आमतौर पर व्यवसाय में शेष कार्य की एक बड़ी सूची होती है जिसमें कुछ व्यावसायिक मूल्य होते हैं, और छोटे समय में (शायद) एक ही मूल्य देने के बजाय उस मूल्य को जोड़ने को प्राथमिकता देंगे।

खेल विकास एक अलग जानवर है। "माइक्रो ऑप्टिमाइज़ेशन" फ़ंक्शन या दिनचर्या में बहुत कम समय बचा रहा है।

  1. गेमिंग सिस्टम को रेंडरिंग चक्र तक आयोजित किया जाता है। वर्तमान में स्वर्ण मानक 60 फ्रेम प्रति सेकंड है, इसलिए जो कुछ गणना करने जा रहा है, उसे एक सेकंड के 1/60 वें हिस्से में स्क्रीन पर करने और प्रदान करने की आवश्यकता है।
  2. इसका मतलब यह है कि अक्सर एक ही दिनचर्या को एक खेल के दौरान हजारों से हजारों बार कहा जाता है। इस प्रकार एकल फ़ंक्शन में 10 गुना सुधार मूल्य में बढ़ जाता है, जब तक कि सुधार के लाभों को महसूस किया जाएगा।
  3. रेंडरिंग रेट हासिल करने में विफलता का खेल की प्रस्तुति पर प्रभाव पड़ता है। वीडियो तड़का हुआ हो जाएगा, पात्रों को तरल पदार्थ के आंदोलन के बजाय स्किप और कूद के साथ चेतन किया जाएगा। यह तुरंत खिलाड़ी को खेल के विसर्जन से बाहर लाता है और खेल के मूल्य पर सवाल उठाता है।

व्यवसाय में, कोई भी परवाह नहीं करता है यदि 4 कदम की व्यावसायिक प्रक्रिया का स्वरूप 0.6 सेकंड या 0.5 सेकंड में प्रस्तुत होता है। गेमिंग में रहते हुए, कोई परवाह करता है कि 200ms लेने वाली दिनचर्या को 100ms में निष्पादित करने के लिए कम किया जा सकता है।

यह सब ग्राहक को दिए गए मूल्य, ग्राहक की जरूरतों और परिवर्तन के लागत-लाभ अनुपात के बारे में है।


-1

यह इस बात के साथ करना है कि किसी विशेष कार्य के लिए उस टूल का चयन क्यों किया गया था।

जब वे ड्राइवर का उपयोग कर रहे होते हैं, तो गोल्फर एक पॉटर के साथ दिशा और बल को लागू करते हैं, इतना नहीं।

क्यों? क्योंकि वे अलग तरह के शॉट हैं। ड्राइव के लिए, आप इसे अधिकतम दूरी के साथ फ़ेयरवे में प्राप्त करना चाहते हैं। एक पुट के लिए, आप इसे छेद में बिल्कुल प्राप्त करना चाहते हैं।

वही यहाँ लागू होता है। गेम डेवलपर्स C ++ का चयन करते हैं क्योंकि यह उन्हें विभिन्न ऑपरेशनों के प्रदर्शन पर नियंत्रण देता है। यदि आपने उसे चुना है, तो आप इसका लाभ उठाना चाहते हैं।


-3

अधिकांश व्यावसायिक अनुप्रयोग इन-हाउस टूल के रूप में लिखे जाते हैं। इस उपकरण की उपयोगिता के बारे में उम्मीदें बड़े पैमाने पर ग्राहकों को बेचे जाने वाले सॉफ्टवेयर के मामले में बहुत कम हैं। यह काफी सामान्य है कि एक इन-हाउस व्यवसाय ऐप में मेनू और संवाद होते हैं, जो माउस क्लिक, खिड़कियों पर धीरे-धीरे प्रतिक्रिया करते हैं, जो देरी के साथ फिर से शुरू होता है, या यहां तक ​​कि एक जीयूआई जो स्विंग (डरावनी!) में लिखा गया है। यह कई कारणों के कारण है (यह अधिक महत्वपूर्ण है कि सॉफ़्टवेयर अनुकूलन योग्य है कि यह बहुत "तेज़" है, सॉफ़्टवेयर के उपयोगकर्ताओं के पास कोई विकल्प नहीं है कि वे प्रश्न में सॉफ़्टवेयर का उपयोग करें या न करें, जो लोग बनाते हैं सॉफ़्टवेयर स्थापित करने का निर्णय स्वयं इसका उपयोग नहीं करते ...)। इस सबका परिणाम यह है कि इस टूल के डेवलपर आवेदन की जवाबदेही का अनुकूलन करने में ज्यादा समय नहीं देते हैं: लेकिन व्यापकता और सुविधाओं की संख्या के बारे में बहुत परवाह है। विभिन्न ग्राहक आधार => विभिन्न डिजाइन लक्ष्य => विभिन्न कार्यप्रणाली।

ध्यान दें कि एक्सेल, आईएस जैसे बड़े पैमाने पर दर्शकों को लक्षित करने वाला एक व्यावसायिक अनुप्रयोग, भारी अनुकूलित है।

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