ฉันสงสัยว่าข้อมูลเกี่ยวกับ 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 นาทีฉันใช้เวลาในการเขียนการทดสอบเหล่านี้ฉันสามารถพบข้อบกพร่องด้านประสิทธิภาพที่แท้จริงได้อย่างง่ายดายและทันทีที่ฉันเปิดการเพิ่มประสิทธิภาพคอมไพเลอร์ในระดับใดก็ตาม
นี่ไม่ใช่ Stack Overflow ดังนั้นฉันหวังว่าจะไม่มีใครในที่นี้ที่จะอ้างว่า เกมมักจะทำงานกับข้อมูลที่มีขนาดใหญ่มากและเป็นตัวเลขมากดังนั้นการใส่ใจในการแยกแขนง, ปลดเปลื้อง, กำหนดเวลา, จัดโครงสร้างและอื่น ๆ สามารถให้การปรับปรุงที่สำคัญมาก ใครก็ตามที่ใช้เวลาในการปรับรหัส PPC ให้เหมาะสมอาจมีเรื่องราวสยองขวัญอย่างน้อยหนึ่งเรื่องเกี่ยวกับร้านค้าโหลด แต่ในกรณีนี้มันไม่สำคัญ ขนาดพื้นที่เก็บข้อมูลของประเภทจำนวนเต็มของคุณไม่มีผลต่อประสิทธิภาพตราบใดที่จัดเรียงไว้และพอดีกับการลงทะเบียน