औसतन, आधुनिक गेम कोड में विधानसभा का उपयोग कितनी बार किया जाता है?
विशेष रूप से उन प्लेटफार्मों पर जो पहले से ही अच्छे C ++ कंपाइलर हैं, जैसे x86, PPC, या ARM - क्योंकि मैं मानता हूं कि एम्बेडेड सिस्टम पर गेम असेंबली का व्यापक उपयोग करते हैं।
औसतन, आधुनिक गेम कोड में विधानसभा का उपयोग कितनी बार किया जाता है?
विशेष रूप से उन प्लेटफार्मों पर जो पहले से ही अच्छे C ++ कंपाइलर हैं, जैसे x86, PPC, या ARM - क्योंकि मैं मानता हूं कि एम्बेडेड सिस्टम पर गेम असेंबली का व्यापक उपयोग करते हैं।
जवाबों:
उत्तर "खेल", और "प्रयुक्त" के अर्थ पर थोड़ा निर्भर करता है। मुझे लगता है कि "प्रयुक्त" का अर्थ है "विशिष्ट गेम प्रोजेक्ट के दौरान लिखा गया"।
जिन लोगों से मैंने बात की है, उनमें से मेरे अनुभव और वास्तविक आंकड़ों में:
गेम इंडस्ट्री में काम के लिए असेंबली लैंग्वेज का ज्ञान अपेक्षित नहीं है, लेकिन आपके द्वारा किए जाने वाले गेम के प्रकार के आधार पर यह लाभप्रद हो सकता है।
एक तर्क हुआ करता था कि कंपाइलर सी-कोड को मानव से बेहतर बनाने के लिए हाथ से लिखे गए असेंबली में बेहतर काम करता है। आमतौर पर यह सच है, कभी-कभी यह गलत है। लेकिन इन दिनों लगातार बढ़ती सीपीयू जटिलता और 'आउट' (यानी अलग-अलग प्रोसेसरों को) स्केल करने की जरूरत का मतलब है कि अनुकूलन के प्रयास आमतौर पर कहीं और खर्च किए जाते हैं।
हाल के वर्षों में मैंने केवल गेम कोड में असेंबली देखी है __asm int 3
ब्रेकपॉइंट्स को बाध्य करने के लिए बयान दिए गए थे, और असेंबली का मेरा एकमात्र व्यक्तिगत उपयोग असामान्य क्रैश बग का निदान करने के लिए एक फ़ंक्शन के असंगति को देखने में था।
आधुनिक कंसोल गेम्स में उच्च प्रदर्शन कोड के थोक को विधानसभा और C ++ के बीच के मध्य मैदान के प्रकार का उपयोग करके लिखा गया है: संकलक आंतरिक । ये C ++ फ़ंक्शंस की तरह दिखते हैं और पार्स करते हैं, लेकिन वास्तव में एकल मशीन निर्देशों में अनुवादित होते हैं । इसलिए, उदाहरण के लिए, मेरे "वेक्टर V के प्रत्येक मान को दबाना = = a और <= b" फ़ंक्शन दिखता है
// for each v.x, ensure v.x >= a.x && v.x <= b.x
inline __m128 ClampSIMD( const __m128 &v, const __m128 & a, const __m128 & b )
{
return _mm_max_ps( a, _mm_min_ps( v, b ) );
}
इस तरह के कार्यों में मैं अभी भी विशिष्ट मशीन निर्देशों के संदर्भ में सोच रहा हूं , लेकिन मुझे उन्हें सी में लिखने की सुविधा है ताकि मुझे रजिस्टर रंग और शेड्यूलिंग और ऑप्स और अन्य उबाऊ विवरणों के बारे में चिंता करने की आवश्यकता न हो।
आपको अभी भी इस बात से अवगत होना चाहिए कि सीपीयू किन निर्देशों का समर्थन करता है, विशेष रूप से क्योंकि आधुनिक संकलक वेक्टर कोड में भयानक हैं, एक स्मार्ट मानव कितना अच्छा काम कर सकता है, इसकी तुलना में। इसके अलावा कभी-कभी आप अपने कोड को कैसे व्यवस्थित करते हैं इसका सूक्ष्म विवरण प्रदर्शन के लिए बहुत बड़ा प्रभाव हो सकता है जो कि मशीन क्या कर रही है यह समझे बिना स्पष्ट नहीं है।
हालाँकि हम असेंबली में कोड नहीं कर सकते हैं, फिर भी हम असेंबली में बहुत डिबग करते हैं । कंपाइलरों का अनुकूलन उन तरीकों से कोड को आक्रामक रूप से पुनर्गठित करता है, जो डिबगर्स के साथ नहीं रह सकते, इसलिए अक्सर जब एक "रिलीज़ मोड" डिबगिंग करते हैं तो सबसे अच्छी बात यह है कि डिस्सेम्बलर खोलें और उस तरह कोड के माध्यम से ट्रेस करें। क्रैश के "फॉरेंसिक डिबगिंग" पर जीडीसी की यह बात उस स्तर पर कई लोगों के विवादों और विवादों को दर्शाती है।
जिन समस्याओं के लिए हाथ रोल विधानसभा की आवश्यकता होती थी, वे संख्या में कम हो रही हैं। आप जिस गति से "पठनीयता" में खो जाते हैं और डीबग करने की क्षमता में "लाभ" प्राप्त कर सकते हैं। यह भी कोड के वर्गों पर बहुत ही अंतिम अनुकूलन चरणों में से एक के रूप में किया जाना चाहिए क्योंकि ज्यादातर मामलों में गति की समस्याएं ऐसी चीज नहीं हैं जिन्हें विधानसभा के लिए बेहतर नहीं बनाया जा सकता है। इन दिनों सीपीयू की गति बहुत तेज हो गई है, जबकि मेमोरी स्पीड नहीं है, अक्सर यह नियंत्रित करना अधिक महत्वपूर्ण है कि सीपीयू के माध्यम से डेटा कैसे बहता है।
आधुनिक कंपाइलरों के साथ, उन्हें असेंबली कोड के चारों ओर अनुकूलन करना भी कठिन लगता है क्योंकि उन्हें आपके द्वारा छपे हुए रजिस्टरों से निपटना होता है और वे आमतौर पर आपके हाथ से तैयार किए गए कोड में निर्देशों को फिर से ऑर्डर नहीं कर सकते हैं। असेंबली की आवश्यकता को कम करने के लिए, अब इंट्रिंसिक्स भी हैं जो निम्न स्तर की अवधारणाओं तक पहुंच बनाने में मदद करते हैं, लेकिन एक तरह से जो संकलक के अनुकूल हैं और उन्हें आपके खिलाफ काम करने की अनुमति देता है।
उस के साथ कहा, PS3 पर SPU एक क्षेत्र है जहां लोगों को अभी भी विधानसभा का उपयोग करने के लिए प्रोसेसर का सबसे अधिक उपयोग करने के लिए है, उदाहरण के लिए मैनुअल निर्देश पाइपलाइनिंग के साथ यहां बताया गया है ।
तथ्य यह है कि हम एक बहु मंच की दुनिया में रहते हैं, और हमारे गेम कोड के कुछ हिस्सों को स्थानीय प्लेटफ़ॉर्म के अनुरूप होना चाहिए - अच्छी तरह से नहीं, लेकिन अगर हम स्थानीय हार्डवेयर सामान का लाभ उठाते हैं तो लाभ हैं!
यह गेम या गेम लॉजिक के बारे में नहीं है, यह कोड के इष्टतम प्रदर्शन के लिए हार्डवेयर इलाके के बारे में है, जिस पर गेम लॉजिक टिका है, हम वास्तव में कोड सेक्शन को लपेट सकते हैं, उदाहरण के लिए मैक्रोज़ का उपयोग करना, जैसे कि एक स्रोत कोड है, जो अच्छी तरह से निष्पादित करता है मंच इसके खिलाफ बनाया गया था।