मुझे हमेशा "सूक्ष्म-अनुकूलन" शब्द मिला, बल्कि अस्पष्ट। यदि मेमोरी-लेआउट और एक्सेस पैटर्न में कुछ अनुदेश-स्तर के परिवर्तन अनुशासनात्मक पेशेवर से एल्गोरिदमिक जटिलता में कोई कमी नहीं करते हुए अपने हॉटस्पॉट को मापने से 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 को हम लोगों के रूप में आगे अनुकूलित करते रहें। प्रोफाइलर हॉटस्पॉट्स का जवाब देना, और यह इस तरह से किया गया कि दुनिया के बेहतरीन विशेषज्ञों की धड़कन बन जाए, फिर इसे अपनाने के लिए सबसे अधिक प्रदर्शन करने वाले महत्वपूर्ण क्षेत्रों में काम करने वाले लोगों के लिए भी यह दिमाग नहीं होगा ... और यह एक उन्नति है। हास्यास्पद स्मार्ट ऑप्टिमाइज़र से आ रहे हैं, तेजी से हार्डवेयर नहीं।