2012-02-10 25 views
10

Bộ chỉ lệnh x86-64 thêm nhiều thanh ghi và các cải tiến khác để giúp hợp lý hóa mã thực thi. Tuy nhiên, trong nhiều ứng dụng, kích thước con trỏ tăng lên là một gánh nặng. Các byte thừa, không sử dụng trong mỗi con trỏ làm tắc nghẽn bộ nhớ cache và thậm chí có thể tràn bộ nhớ RAM. GCC, ví dụ, xây dựng với cờ -m32, và tôi cho rằng đây là lý do.Con trỏ 32 bit với ISA x86-64: tại sao không?

Có thể tải giá trị 32 bit và coi nó là con trỏ. Điều này không đòi hỏi thêm hướng dẫn, chỉ cần tải/tính toán 32 bit và tải từ địa chỉ kết quả. Tuy nhiên, mẹo này không thể di chuyển được vì các nền tảng có các bản đồ bộ nhớ khác nhau. Trên Mac OS X, toàn bộ không gian địa chỉ 4 Gib thấp được đặt trước. Tuy nhiên, đối với một chương trình tôi đã viết, hãy thêm 0x100000000L vào địa chỉ 32 bit "trước khi sử dụng hiệu suất được cải thiện rất nhiều so với địa chỉ 64 bit thực sự hoặc biên dịch với -m32.

Có trở ngại cơ bản nào để có nền tảng 32 bit, x86-64 không? Tôi cho rằng việc hỗ trợ một con chimera sẽ thêm sự phức tạp vào bất kỳ hệ điều hành nào, và bất cứ ai muốn 20% cuối cùng đó chỉ nên Make it Work ™, nhưng có vẻ như đây là sự phù hợp nhất cho một loạt các chương trình tính toán chuyên sâu.

+0

Dữ liệu lược tả trong phần lớn các ứng dụng cho thấy không có tổn thất đáng kể do kích thước con trỏ tăng lên. – Puppy

+0

Trình biên dịch Intel có tùy chọn ['Qauto-ilp32'] (http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/copts/ccpp_options/option_qauto_ilp32 .htm) "cố" sử dụng 32 bit cho con trỏ - ngay cả ở chế độ x64. – Mysticial

+0

@Mysticial nhưng đó giống như con trỏ 'gần' và' far' lỗi thời, đúng không? Đó là giải pháp là OK, tôi cho rằng, nhưng nó không phải là khá sạch như là tôi đang đề cập đến. – Potatoswatter

Trả lời

10

Có một ABI được gọi là "x32" để phát triển Linux. Đó là sự kết hợp giữa x86_64 và ia32 tương tự như những gì bạn mô tả - không gian địa chỉ 32 bit trong khi sử dụng bộ đăng ký 64 bit đầy đủ. Nó cần một kernel, binutils và gcc tùy chỉnh.

Một số lần chạy SPEC cho thấy cải thiện hiệu suất khoảng 30% trong một số điểm chuẩn. Xem thêm thông tin tại https://sites.google.com/site/x32abi/

+0

Đây thực sự là thông tin tốt. Tôi cảm thấy một chút không chắc chắn về việc đặt câu hỏi, bởi vì lời nói của nó có thể ngăn cản bất kỳ câu trả lời hay nào. Nhưng thậm chí chỉ có một nền tảng để hỗ trợ chimera, chỉ trong trường hợp sự khác biệt là đủ quan trọng, không thay đổi sân chơi. – Potatoswatter

-4

Nó được gọi là "mô phỏng x86-32" hoặc WOW64 trên Windows (có lẽ là một cái gì đó khác trên các hệ điều hành khác) và đó là cờ phần cứng trong bộ xử lý. Không cần bất kỳ thủ thuật chế độ người dùng nào ở đây.

+0

Đó có phải là cờ người dùng có thể truy cập không? Vì vậy, hệ điều hành được yêu cầu để lưu/khôi phục và hỗ trợ nó? – Potatoswatter

+0

Ah, tra cứu nó - http://en.wikipedia.org/wiki/WOW64. Không, đó chỉ là chạy mã x86 tiêu chuẩn, ISA cũ chỉ với 8 thanh ghi, trên hệ điều hành 64 bit. Cũng giống như '-m32'. Tôi không nghĩ rằng hệ điều hành khác bận tâm cho rằng "tính năng" một tên. – Potatoswatter

+0

@Potatoswatter: Và điều đó có ý nghĩa khác với những gì bạn mô tả như thế nào, chính xác? Thay vì làm hacks chế độ người dùng để đạt được mục tiêu, bộ vi xử lý đạt được nó trong phần cứng. Điều đó sẽ luôn nhanh hơn. Không có cờ trình biên dịch nào đạt được điều này, nó là một tính năng xử lý phần cứng. – Puppy

0

Tôi không ngờ sẽ rất khó để hỗ trợ mô hình như vậy trong hệ điều hành. Về điều duy nhất cần thay đổi cho các quy trình trong mô hình này là quản lý trang, các trang phải được phân bổ dưới mức 4 GB. Hạt nhân cũng nên cấp phát bộ đệm của nó từ 4 GB đầu tiên của không gian địa chỉ ảo nếu nó chuyển chúng đến ứng dụng. Điều tương tự cũng áp dụng cho bộ nạp tải và khởi động ứng dụng. Khác hơn là một hạt nhân 64-bit sẽ có thể xử lý các ứng dụng như vậy w/o sửa đổi lớn.

Hỗ trợ trình biên dịch cũng không phải là vấn đề lớn. Nó chủ yếu là vấn đề tạo mã có thể sử dụng thanh ghi CPU phụ và 64 bit đầy đủ của chúng và thêm tiền tố REX thích hợp bất cứ khi nào cần thiết.

Các vấn đề liên quan