Tôi nghi ngờ rằng thông tin về Xbox 360 và PS3 đặc biệt sẽ đứng sau các bức tường chỉ dành cho nhà phát triển được cấp phép, giống như hầu hết các chi tiết cấp thấp. Tuy nhiên, chúng ta có thể xây dựng một chương trình x86 tương đương và tháo rời nó để có được một ý tưởng chung.
Trước tiên, hãy xem những gì chi phí mở rộng không dấu:
unsigned char x = 1;
unsigned int y = 1;
unsigned int z;
z = x;
z = y;
Phần có liên quan tháo rời thành (sử dụng 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)
Về cơ bản là giống nhau - trong một trường hợp chúng ta di chuyển một byte, trong trường hợp khác chúng ta di chuyển một từ. Kế tiếp:
signed char x = 1;
signed int y = 1;
signed int z;
z = x;
z = y;
Trở thành:
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)
Vì vậy, chi phí của phần mở rộng dấu hiệu là bất cứ giá nào movsbl
thay vì movzbl
- mức hướng dẫn phụ. Về cơ bản, điều đó không thể định lượng được trên các bộ xử lý hiện đại do cách thức hoạt động của các bộ xử lý hiện đại. Mọi thứ khác, từ tốc độ bộ nhớ đến bộ nhớ đệm cho đến những gì trong đường ống trước đó, sẽ thống trị thời gian chạy.
Trong khoảng 10 phút để tôi viết các bài kiểm tra này, tôi có thể dễ dàng tìm thấy một lỗi hiệu suất thực sự và ngay khi tôi bật bất kỳ mức tối ưu hóa trình biên dịch nào, mã sẽ không thể nhận ra đối với các tác vụ đơn giản như vậy.
Đây không phải là Stack Overflow, vì vậy tôi hy vọng không ai ở đây sẽ tuyên bố vi mô hóa không thành vấn đề. Các trò chơi thường hoạt động trên dữ liệu rất lớn và rất số, do đó, việc chú ý cẩn thận đến việc phân nhánh, diễn xuất, lập lịch, căn chỉnh cấu trúc, v.v có thể mang lại những cải tiến rất quan trọng. Bất cứ ai đã dành nhiều thời gian để tối ưu hóa mã PPC có thể có ít nhất một câu chuyện kinh dị về các cửa hàng tải trọng. Nhưng trong trường hợp này, nó thực sự không thành vấn đề. Kích thước lưu trữ của loại số nguyên của bạn không ảnh hưởng đến hiệu suất, miễn là nó được căn chỉnh và vừa với một thanh ghi.