আমি সন্দেহ করি যে এক্সবক্স 360 এবং PS3 সম্পর্কিত তথ্য সর্বাধিক নিম্ন-স্তরের বিশদগুলির মতো, লাইসেন্সযুক্ত-বিকাশকারী-কেবল প্রাচীরের পিছনে থাকবে। তবে, আমরা একটি সমতুল্য x86 প্রোগ্রামটি তৈরি করতে পারি এবং একটি সাধারণ ধারণা পেতে এটি বিচ্ছিন্ন করতে পারি।
প্রথমে আসুন স্বাক্ষর না করা প্রশস্তকরণ কী খরচ হয় তা দেখুন:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
সম্পর্কিত অংশটি ডিসিসেমেবল করে (জিসিসি ৪.৪.৫ ব্যবহার করে):
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 মিনিটের সময় লেগেছিল, আমি সহজেই একটি বাস্তব পারফরম্যান্স বাগ খুঁজে পেতে পারি এবং যতই আমি কম্পাইলার অপ্টিমাইজেশনের যে কোনও স্তরের চালু করি, কোডটি এই জাতীয় সোজা কাজের জন্য অজানা হয়ে যায়।
এটি স্ট্যাক ওভারফ্লো নয়, তাই আমি আশা করি যে এখানে কেউ মাইক্রোপটিমাইজেশনের দাবি করবে না। গেমগুলি প্রায়শই এমন ডেটাতে কাজ করে যা খুব বড় এবং খুব সংখ্যাসূচক, তাই ব্রাঞ্চিং, ক্যাসট, সময়সূচী, কাঠামোর সারিবদ্ধকরণ ইত্যাদির প্রতি খুব যত্নশীল মনোযোগ দেওয়া এবং খুব গুরুত্বপূর্ণ সংশোধনী দিতে পারে। যে কেউ পিপিসি কোডটি অনুকূল করে তুলতে অনেক সময় ব্যয় করেছে তার সম্ভবত লোড-হিট-স্টোরগুলি সম্পর্কে কমপক্ষে একটি হরর স্টোরি রয়েছে। তবে এই ক্ষেত্রে, এটি সত্যিই কিছু যায় আসে না। আপনার পূর্ণসংখ্যার ধরণের স্টোরেজ আকার কর্মক্ষমতা প্রভাবিত করে না, যতক্ষণ না এটি সারিবদ্ধ থাকে এবং কোনও রেজিস্টারে ফিট হয়।