मुझे संदेह है कि Xbox 360 और PS3 के बारे में जानकारी विशेष रूप से लाइसेंस-डेवलपर-केवल दीवारों के पीछे होने वाली है, जैसे अधिकांश निम्न-स्तरीय विवरण। हालांकि, हम एक समान x86 प्रोग्राम का निर्माण कर सकते हैं और इसे एक सामान्य विचार प्राप्त करने के लिए अलग कर सकते हैं।
सबसे पहले, आइए देखते हैं कि क्या बिना लागत वाली चौड़ीकरण लागत है:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
संबंधित भाग (GCC 4.4.5 का उपयोग करते हुए)
z = x;
27: 0f b6 45 ff movzbl -0x1(%ebp),%eax
2b: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
2e: 8b 45 f8 mov -0x8(%ebp),%eax
31: 89 45 f4 mov %eax,-0xc(%ebp)
तो मूल रूप से एक ही - एक मामले में हम एक बाइट को स्थानांतरित करते हैं, दूसरे में हम एक शब्द को स्थानांतरित करते हैं। आगे:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
में बदल जाता है:
z = x;
11: 0f be 45 ff movsbl -0x1(%ebp),%eax
15: 89 45 f4 mov %eax,-0xc(%ebp)
z = y;
18: 8b 45 f8 mov -0x8(%ebp),%eax
1b: 89 45 f4 mov %eax,-0xc(%ebp)
इसलिए साइन एक्सटेंशन की लागत जो भी है, उसके movsbl
बजाय लागत movzbl
- उप-अनुदेश स्तर है। जिस तरह से आधुनिक प्रोसेसर काम करते हैं, उसके कारण आधुनिक प्रोसेसर पर मात्रा निर्धारित करना असंभव है। बाकी सब कुछ, मेमोरी स्पीड से लेकर कैशिंग तक जो पहले से पाइपलाइन में थी, रनटाइम पर हावी होने वाली है।
~ 10 मिनट में मुझे इन परीक्षणों को लिखने में लग गया, मुझे आसानी से एक वास्तविक प्रदर्शन बग मिल सकता था, और जैसे ही मैं कंपाइलर ऑप्टिमाइज़ेशन के किसी भी स्तर को चालू करता हूं, कोड ऐसे सरल कार्यों के लिए अपरिचित हो जाता है।
यह स्टैक ओवरफ्लो नहीं है, इसलिए मुझे उम्मीद है कि यहां कोई भी दावा नहीं करेगा कि माइक्रोप्टीमाइजेशन कोई फर्क नहीं पड़ता। गेम्स अक्सर ऐसे डेटा पर काम करते हैं जो बहुत बड़े और बहुत संख्यात्मक होते हैं, इसलिए ब्रांचिंग, कास्ट्स, शेड्यूलिंग, स्ट्रक्चर एलाइनमेंट पर ध्यान दें और इसी तरह बहुत महत्वपूर्ण सुधार दे सकते हैं। पीपीसी कोड का अनुकूलन करने वाले किसी भी व्यक्ति ने शायद लोड-हिट-स्टोर के बारे में कम से कम एक डरावनी कहानी की है। लेकिन इस मामले में, यह वास्तव में कोई फर्क नहीं पड़ता। आपके पूर्णांक प्रकार का संग्रहण आकार प्रदर्शन को प्रभावित नहीं करता है, जब तक कि यह संरेखित नहीं होता है और एक रजिस्टर में फिट बैठता है।