¿Por qué Intel oculta el núcleo RISC interno en sus procesadores?


Comenzando con Pentium Pro (microarquitectura P6), Intel rediseñó sus microprocesadores y usó el núcleo RISC interno bajo las antiguas instrucciones CISC. Desde Pentium Pro todas las instrucciones CISC se dividen en partes más pequeñas (uops) y luego se ejecutan por el núcleo RISC.

Al principio estaba claro para mí que Intel decidió ocultar una nueva arquitectura interna y forzar a los programadores a usar "CISC shell". Gracias a esta decisión, Intel podría rediseñar completamente la arquitectura de los microprocesadores sin romper la compatibilidad, es razonable.

Sin embargo, no entiendo una cosa, ¿por qué Intel todavía mantiene un conjunto de instrucciones RISC internas ocultas durante tantos años? ¿Por qué no permitirían a los programadores usar instrucciones RISC como el conjunto de instrucciones us old x86 CISC?

Si Intel mantiene la compatibilidad con versiones anteriores durante tanto tiempo (todavía tenemos el modo virtual 8086 junto al modo de 64 bits), ¿por qué no nos permiten compilar programas para que omitan las instrucciones CISC y usen el núcleo RISC directamente? Esto abrirá una forma natural de abandonar lentamente el conjunto de instrucciones x86, que está en desuso hoy en día (esta es la razón principal por la que Intel decidió usar el núcleo RISC dentro, ¿verdad?).

Mirando la nueva serie Intel 'Core i' veo, que solo extiende las instrucciones CISC conjunto añadiendo AVX, SSE4 y otros.

 76
Author: Peter Cordes, 2011-04-27

6 answers

No, el conjunto de instrucciones x86 ciertamente no está obsoleto. Es tan popular como siempre. La razón por la que Intel utiliza internamente un conjunto de microinstrucciones tipo RISC es porque pueden procesarse de manera más eficiente.

Así que una CPU x86 funciona al tener un decodificador bastante resistente en el frontend, que acepta instrucciones x86, y las convierte a un formato interno optimizado, que el backend puede procesar.

En cuanto a exponer este formato a programas "externos", hay dos puntos:

  • no es un formato estable. Intel puede cambiarlo entre modelos de CPU para adaptarse mejor a la arquitectura específica. Esto les permite maximizar la eficiencia, y esta ventaja se perdería si tuvieran que establecerse en un formato de instrucción fijo y estable para uso interno y externo.
  • simplemente no hay nada que ganar al hacerlo. Con la enorme y compleja CPU de hoy en día, el decodificador es una parte relativamente pequeña de la CPU. Tener que decodificar instrucciones x86 hace que más complejo, pero el resto de la CPU no se ve afectado, por lo que en general, hay muy poco que ganar, especialmente porque el frontend x86 todavía tendría que estar allí, para ejecutar código "heredado". Por lo que ni siquiera guardaría los transistores utilizados actualmente en el frontend x86.

Este no es un arreglo perfecto, pero el costo es bastante pequeño, y es una opción mucho mejor que diseñar la CPU para soportar dos conjuntos de instrucciones completamente diferentes. (En ese caso, probablemente terminarían inventando un tercer conjunto de micro-ops para uso interno, solo porque se pueden ajustar libremente para adaptarse mejor a la arquitectura interna de la CPU)

 78
Author: jalf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-27 15:38:13

Si Intel mantiene la compatibilidad con versiones anteriores durante tanto tiempo (todavía tenemos modo 8086 junto al modo de 64 bits), Por qué no nos permiten compilar programas así que evitarán las instrucciones CISC ¿y usar RISC core directamente? Esta voluntad forma natural abierta para abandonar lentamente x86 conjunto de instrucciones, que está en desuso hoy en día (esta es la razón principal por Intel decidió usar el núcleo RISC dentro, ¿verdad?).

Usted necesita mirar el ángulo de negocio de esto. Intel tiene en realidad trató de alejarse de x86, pero es la gallina de los huevos de oro para la empresa. XScale e Itanium nunca estuvieron ni cerca del nivel de éxito que su negocio principal de x86 tiene.

Lo que básicamente estás pidiendo es que Intel se corte las muñecas a cambio de pelusas cálidas de los desarrolladores. Socavar a x86 no es de su interés. Cualquier cosa que haga que más desarrolladores no tengan que elegir el objetivo x86 socava a x86. Eso, a su vez, los socava.

 15
Author: Mike Thomsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-27 15:43:56

La verdadera respuesta es simple.

El principal factor detrás de la implementación de los procesadores RISC fue reducir la complejidad y ganar velocidad. La desventaja de RISC es la densidad reducida de instrucciones, lo que significa que el mismo código expresado en formato RISC like necesita más instrucciones que el código CISC equivalente.

Este efecto secundario no significa mucho si su CPU se ejecuta a la misma velocidad que la memoria, o al menos si ambos se ejecutan a velocidades razonablemente similares.

Actualmente la velocidad de la memoria en comparación con la velocidad de la CPU muestra una gran diferencia en los relojes. Las CPU actuales a veces son cinco veces o más rápidas que la memoria principal.

Este estado de la tecnología favorece un código más denso, algo que proporciona CISC.

Puede argumentar que las cachés podrían acelerar las CPU RISC. Pero lo mismo puede decirse de las cpu CISC.

Se obtiene una mejora de velocidad mayor mediante el uso de CISC y cachés que RISC y cachés, porque el mismo tamaño de caché tiene más efecto en alta código de densidad que proporciona CISC.

Otro efecto secundario es que RISC es más difícil en la implementación del compilador. Es más fácil optimizar compiladores para cpu CISC. sucesivamente.

Intel sabe lo que están haciendo.

Esto es tan cierto que ARM tiene un modo de mayor densidad de código llamado Thumb.

 13
Author: Jorge Aldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-23 23:07:23

La respuesta es simple. Intel no está desarrollando CPU para desarrolladores ! Los están desarrollando para las personas que toman las decisiones de compra , que POR cierto, es lo que hace cada empresa en el mundo!

Intel hace mucho tiempo se comprometió a que, (dentro de lo razonable, por supuesto), sus CPU seguirían siendo compatibles con versiones anteriores. La gente quiere saber que, cuando compran una nueva computadora basada en Intel, que todos de su software actual se ejecutará exactamente igual que lo hizo en su vieja computadora. (Aunque, con suerte, más rápido!)

Además, Intel sabe exactamente lo importante que es ese compromiso, porque una vez trataron de ir por un camino diferente. ¿Exactamente cuántas personas conoces con una CPU Itanium?!?

Puede que no te guste, pero esa única decisión, permanecer con el x86, es lo que hizo de Intel uno de los nombres comerciales más reconocibles del mundo!

 4
Author: geo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-25 07:21:50

La respuesta de Jalf cubre la mayoría de las razones, pero hay un detalle interesante que no menciona: El núcleo interno tipo RISC no está diseñado para ejecutar un conjunto de instrucciones como ARM/PPC/MIPS. El x86-tax no solo se paga en los decodificadores hambrientos de energía, sino hasta cierto punto en todo el núcleo. es decir, no es solo la codificación de instrucción x86; es cada instrucción con semántica extraña.

Imaginemos que Intel creó un modo de operación donde el flujo de instrucciones estaba algo que no sea x86, con instrucciones que se asignan más directamente a uops. También vamos a pretender que cada modelo de CPU tiene su propia ISA para este modo, por lo que todavía son libres de cambiar los internos cuando quieran, y exponerlos con una cantidad mínima de transistores para la instrucción-decodificación de este formato alternativo.

Presumiblemente solo tendría el mismo número de registros, asignados al estado arquitectónico x86, por lo que los sistemas operativos x86 pueden guardarlo / restaurarlo en los interruptores de contexto sin usar el Conjunto de instrucciones específicas de la CPU. Esto probablemente no sea demasiado difícil, ya que el hardware de cambio de nombre de registro ya existe. (los uops internos en realidad hacen referencia al archivo de registro físico, pero nuestro hipotético RISC ISA no tendría que hacerlo).


Si solo tenemos decodificadores alternativos sin cambios en etapas posteriores de la canalización (unidades de ejecución), esta ISA todavía tendría muchas excentricidades x86. No sería una arquitectura RISC muy agradable. Ninguna instrucción sería muy compleja, pero algunos de la otra locura de x86 todavía estaría allí.

Por ejemplo: los cambios izquierda/derecha dejan el indicador de desbordamiento indefinido, a menos que el recuento de cambios sea uno, en cuyo caso= la detección habitual de desbordamiento con signo. Locura similar para rotaciones. Sin embargo, las instrucciones RISC expuestas podrían proporcionar cambios sin bandera y así sucesivamente (permitiendo el uso de solo uno o dos de los múltiples uops que generalmente entran en algunas instrucciones x86 complejas). Así que esto realmente no se sostiene como el principal contra-argumento.

Si va a hacer un decodificador completamente nuevo para una ISA RISC, puede hacer que elija partes de las instrucciones x86 para que se expongan como instrucciones RISC. Esto mitiga un poco la especialización x86 del núcleo.


La codificación de la instrucción probablemente no sería de tamaño fijo, ya que un solo uops puede contener muchos datos. Mucho más datos de lo que tiene sentido si todos los insns son del mismo tamaño. Un solo uop micro-fusionado puede agregar un inmediato de 32 bits y una memoria operando que utiliza un modo de direccionamiento con 2 registros y un desplazamiento de 32 bits. (En SnB y posteriores, solo los modos de direccionamiento de registro único pueden micro fusible con ALU ops).

Las Uops son muy grandes y no muy similares a las instrucciones de BRAZO de ancho fijo. Un conjunto de instrucciones de 32 bits de ancho fijo solo puede cargar inmediates de 16 bits a la vez, por lo que cargar una dirección de 32 bits requiere un par carga-media baja inmediata / carga alta inmediata. x86 no tiene que hacer eso, lo que ayuda a que no sea terrible con solo 15 GP registros que limitan la capacidad de mantener constantes en los registros. (15 es una gran ayuda sobre 7 registros, pero doblar de nuevo a 31 ayuda mucho menos, creo que se encontró alguna simulación. RSP generalmente no es de propósito general, por lo que es más como 15 registros GP y una pila.)


TL; DR resumen:

De todos modos, esta respuesta se reduce a "el conjunto de instrucciones x86 es probablemente la mejor manera de programar una CPU que tiene que ser capaz de ejecutar instrucciones x86 rápidamente", pero con suerte arroja algunos luz en las razones.

 2
Author: Peter Cordes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-25 01:16:12

¿Por qué no nos permiten compilar programas para evitar las instrucciones CISC y usar RISC core directamente?

Además de las respuestas anteriores, la otra razón es la segmentación del mercado. Se cree que algunas instrucciones se implementan en microcódigo en lugar de en hardware, por lo que permitir que cualquiera ejecute microoperaciones arbitrarias puede socavar las ventas de nuevas CPU con "nuevas" instrucciones CISC más eficientes.

 -3
Author: KOLANICH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-21 23:40:00