2009-05-06 16 views
9

Một điều tôi thiếu hiểu biết là làm thế nào để mã được biên dịch cho một CPU Intel hoạt động trên một CPU AMD.Tại sao các ứng dụng Off-the-shelf hoạt động trên cả bộ vi xử lý Intel và AMD?

Sự hiểu biết cơ sở của tôi là nếu bạn biên dịch mã C, ví dụ, trình biên dịch sẽ chuyển mã nguồn thành ngôn ngữ máy sẽ có hướng dẫn cho một bộ xử lý cụ thể. Vì vậy, bạn cần biên dịch với trình biên dịch cho bất kỳ nền tảng nào bạn muốn ứng dụng của mình sử dụng. Tại sao bạn không yêu cầu một trình biên dịch cho AMD so với Intel, và phải mua phần mềm cho một bộ xử lý cụ thể?

Tôi biết rằng bộ vi xử lý AMD và bộ vi xử lý Intel chia sẻ một số khả năng tương thích trong các hướng dẫn x86 cũ hơn; những gì tôi muốn biết là làm thế nào để họ làm điều đó? Ý tôi là, không giống như AMD hay Intel đang gọi nhau và nói với nhau về bí mật thương mại của họ, vậy làm thế nào họ có thể tạo ra những bộ chỉ dẫn tương thích?

Mọi khả năng tương thích vẫn dựa trên tập lệnh 386, với một loạt các câu lệnh như "NẾU CPU AMD, làm điều này ELSE IF INTEL làm điều đó"?

Trả lời

18

CPU AMD và Intel x86 và x86-64 gần như tương thích hoàn toàn. Cả hai đều thực hiện tất cả x86 và x86-64. Họ từng có phần mở rộng riêng của họ (như MMX và 3DNow), nhưng trình biên dịch thường không sử dụng chúng trừ khi bạn nói với họ. Ngày nay, AMD và Intel đều hỗ trợ hầu như tất cả các phần mở rộng của nhau. Thời gian duy nhất bạn có thể phải lo lắng về sự khác biệt là khi bạn đang làm công cụ hạt nhân thực sự cấp thấp.

Nhân tiện, tập lệnh không thực sự là "bí mật giao dịch". Việc thực hiện là. Cả hai công ty sản xuất tài liệu hướng dẫn trên bộ hướng dẫn, vì vậy mỗi người có thể sao chép nó. Lý do cho điều này có thể là nếu nhiều công ty sản xuất chip tương thích, nhiều phần mềm hơn sẽ được viết cho bộ hướng dẫn này, vì vậy nhiều người sẽ mua những con chip này. x86/x86-64 về cơ bản là kiến ​​trúc tiêu chuẩn cho máy tính để bàn, đảm bảo rằng mọi người sẽ tiếp tục mua chip Intel và AMD. Intel và AMD có triển khai rất khác nhau, họ chỉ thực hiện cùng một mã.

+1

Vì vậy, cùng với câu trả lời của bdonlan .. bộ hướng dẫn được công bố bởi Intel hoặc AMD, thì bộ kia tạo ra một con chip hỗ trợ cùng (hoặc một số phần mở rộng của chúng) của tập lệnh đó? Sự khác biệt sau đó nằm trong phần thực hiện phần cứng cụ thể của các hướng dẫn đó. Điều đó có đúng không? – romandas

+0

@romandas: Vâng, sự hiểu biết của bạn là chính xác. Các nhà sản xuất chip ghi lại bộ hướng dẫn, cho phép người khác sao chép nó. – Zifre

+0

Tôi đề nghị thêm thông tin đó vào câu trả lời của bạn, hoặc có bdonlan thêm thông tin của bạn vào của họ, vì vậy tôi có thể chấp nhận câu trả lời đã hợp nhất là câu trả lời cuối cùng. – romandas

6

Thực ra họ có thỏa thuận cấp phép chéo. Thông tin và sự đổi mới được chuyển từ Intel sang AMD vào thập niên 90 khi AMD là nguồn thứ hai của 386 và 486 bộ xử lý, và sau đó từ AMD sang Intel khi Intel áp dụng các phần mở rộng x86-64.

6

Cũng nhớ rằng các bộ hướng dẫn cho các bộ xử lý này được ghi chép công khai; thông thường, một nhà cung cấp sẽ phát minh ra một bộ hướng dẫn mới và một hoặc hai thế hệ sau, nhà cung cấp khác sẽ triển khai các phần mở rộng tương thích. Như vậy, thay vì NẾU 386 .... bạn có một cái gì đó nhiều hơn dọc theo dòng IF SSE4 được hỗ trợ ..., không liên quan đến các nhà cung cấp cụ thể.

+0

Đúng, chúng thường được gọi là truy vấn CPUID nâng cao. –

+0

+1 cho câu trả lời hỗ trợ tốt; Tôi đã Zifre thêm thông tin này vào câu trả lời của họ. – romandas

1

Cả hai nhà cung cấp đều thực hiện cùng một bộ lệnh, vì vậy khi mã được biên dịch của bạn được chuyển thành hướng dẫn máy, chúng sẽ hoạt động trên cả hai chip. Tuy nhiên, có một số tập lệnh đặc biệt như SSE có thể được cụ thể cho một nhà cung cấp hoặc một nhà cung cấp khác. Nếu bạn muốn cải thiện hiệu suất cho một ứng dụng, bạn có thể thực hiện kiểm tra thời gian chạy để sử dụng các tính năng này khi có sẵn.