2009-05-06 17 views
9

Una cosa que no entiendo es cómo se puede compilar el código para que una CPU Intel funcione en una CPU AMD.¿Por qué las aplicaciones genéricas funcionan en procesadores Intel y AMD?

Mi comprensión básica es que si compila código C, por ejemplo, el compilador convierte el código fuente en lenguaje de máquina que tendrá instrucciones para un procesador en particular. Por lo tanto, debe compilar con un compilador para la plataforma que desee que use su aplicación. ¿Por qué no necesita un compilador para AMD versus Intel y tiene que comprar software para un procesador en particular?

Sé que los procesadores AMD y los procesadores Intel comparten cierta compatibilidad en las antiguas instrucciones x86; lo que me gustaría saber es cómo lo hacen? Quiero decir, no es que AMD o Intel se llamen entre sí y se digan sus secretos comerciales, entonces, ¿cómo pueden crear conjuntos de instrucciones que sean compatibles?

¿Toda la compatibilidad sigue basándose en el conjunto de instrucciones 386, con varias instrucciones como "SI AMD CPU, haz esto MÁS SI INTEL hace eso"?

Respuesta

18

Las CPU AMD e Intel x86 y x86-64 son casi totalmente compatibles. Ambos implementan todos los x86 y x86-64. Cada uno tiene sus propias extensiones (como MMX y 3DNow), pero los compiladores generalmente no los usan a menos que se lo indiquen. Hoy en día, AMD e Intel son compatibles con casi todas las extensiones de los demás. El único momento en que debe preocuparse por la diferencia es cuando está haciendo cosas de kernel de muy bajo nivel.

Por cierto, el conjunto de instrucciones no es realmente un "secreto comercial". La implementación es Ambas compañías producen documentación en el conjunto de instrucciones, para que cada una pueda copiarla. La razón de esto es probablemente que si más compañías producen chips compatibles, se escribirá más software para este conjunto de instrucciones, por lo que más personas comprarán estos chips. x86/x86-64 es básicamente la arquitectura estándar para computadoras de escritorio, lo que garantiza que la gente continúe comprando chips Intel y AMD. Intel y AMD tienen implementaciones muy diferentes, solo ejecutan el mismo código.

+1

Entonces, junto con la respuesta de bdonlan ... los conjuntos de instrucciones son publicados públicamente por Intel o AMD, y luego el otro crea un chip que admite el mismo (o alguna extensión del mismo) de ese conjunto de instrucciones. Las diferencias se encuentran dentro de la implementación de hardware específico de esas instrucciones. ¿Es eso correcto? – romandas

+0

@romandas: Sí, su comprensión es correcta. Los fabricantes de chips documentan el conjunto de instrucciones, permitiendo que otros lo copien. – Zifre

+0

Sugiero que agregue esa información a su respuesta, o que bdonlan agregue la suya a la de ellos, para que pueda aceptar la respuesta combinada como definitiva. – romandas

6

En realidad, tienen un acuerdo de licencia cruzada. La información y la innovación fluyeron de Intel a AMD en la década de los 90, cuando AMD fue una segunda fuente de procesadores 386 y 486, y luego de AMD a Intel cuando Intel adoptó las extensiones x86-64.

6

Recuerde también que los conjuntos de instrucciones para estos procesadores están documentados públicamente; por lo general, un proveedor inventará un nuevo conjunto de instrucciones, y una o dos generaciones después el otro proveedor implementará extensiones compatibles. Como tal, en lugar de IF 386 .... tiene algo más en la línea de SI SE APOYA SSE4 ..., independientemente del proveedor específico.

+0

Correcto, estas son típicamente llamadas consultas avanzadas de CPUID. –

+0

+1 para una buena respuesta de apoyo; Le pedí a Zifre que agregara esta información a su respuesta. – romandas

1

Ambos proveedores implementan el mismo conjunto de instrucciones, de modo que cuando su código compilado se convierta en instrucciones de la máquina, funcionarán en ambos chips. Sin embargo, hay algunos conjuntos de instrucciones especiales, como SSE, que pueden ser específicos para un proveedor u otro. Si desea mejorar el rendimiento de una aplicación, puede hacer comprobaciones en tiempo de ejecución para usar estas características cuando estén disponibles.

Cuestiones relacionadas