x86 ¿RISC o CISC?: aclarando la duda

Últimamente me están preguntando por mensajes privados sobre una duda que está bastante extendida. Y es si x86 es RISC o CISC. Por eso he decidido publicar este artículo en el que intentar aclarar esa duda y que deje de ser un motivo de confusión para muchos.

Ya en el pasado he publicado artículos hablando sobre el término RISC-like, y también sobre lo que es una ISA, sobre CISC y RISC, etc. Quizás te pueden interesar para complementar a éste si aún no sabes bien lo que significan esos términos.

x86

Tras la era pre-x86 llegaría un nuevo repertorio de instrucciones o ISA para los chips Intel y compatibles. El chip que marcó el inicio de esta familia fue el 8086 de 1978, y con una extensión de 16-bit frente a su antecesor 8080.

Esta ISA fue, es, y será siempre de tipo CISC. Usa un gran número de instrucciones y son complejas, características comunes para este tipo de repertorios. ¡Aclarado! Aunque esto solo es la primera parte de la duda…

A lo largo del tiempo se ha ido evolucionando con la inclusión de nuevas instrucciones, ampliaciones para 32-bit como x86-32 o IA-32, así como las de 64-bit x86-64 o AMD64 (Intel también las llama EM64T). Y sobre ellas se han ido agregando extensiones (conjuntos de nuevas instrucciones adicionales) para mejorar el rendimiento en tareas específicas como MMX, SSE, 3D Now!, XOP, AVX, etc.

No confundas IA-64 con las x86 de 64-bit. Intel designó así a una ISA diferente para sus Itanium.

Eso no ha hecho más que complicar aún más el ya complicado hardware, que además arrastra retrocompatibilidad con software de 16 y 32-bit en sus últimas versiones de 64-bit que tampoco ayuda…

¿Y a nivel de hardware?

Ahora bien, cuando te refieres, no a la ISA x86, sino a los chips, a nivel electrónico o de hardware, la cosa es mucho más compleja y difusa. En el pasado era muy evidente que a nivel de hardware también eran de tipo CISC, pero en la actualidad sus microarquitecturas trabajan de una forma similar a los RISC. Por eso la duda.

Estos RISC-like son una especie de hibridación entre CISC y RISC para poder mantener compatibilidad con la extendida ISA x86, pero beneficiarse de algunas de las bondades de RISC a nivel físico.

Desde el Pentium Pro (P6) de Intel, los chips de esta firma traducen internamente las instrucciones x86 CISC en una o varias microoperaciones similares a las instrucciones RISC.

En el caso de AMD también ocurriría lo mismo con el K5. Su primer diseño íntegro que usó internamente el diseño de la arquitectura RISC tan popular de su 29k y un decodificador de instrucciones CISC x86 en su front-end.

En estos diagramas puedes ver que en el Front-End del diagrama de la microarquitectura se dejan atrás las instrucciones CISC x86 tras el ciclo fetch/pre-decode (búsqueda de instrucciones y predecodificación) para ser traducidas en una o varias instrucciones más simples llamadas microops o μops. Esas microoperaciones no son más que operaciones más simples al estilo RISC para poder implementar la macroinstrucción compleja o CISC.

Por tanto, aunque las instrucciones x86 CISC entran en el Front-End, el Back-End opera de forma similar a un RISC. Es decir, todas las unidades de ejecución trabajarán con pequeñas cargas de trabajo más ligeras que las pesadas CISC. Además, también han crecido en número de registros de uso general para asemejarse a los RISC.

Incluso los RISC que se hacen llamar puros usan «artimañas» similares para ganar rendimiento como los chips de AMD e Intel. Por ejemplo, ARM (también IBM POWER) también traduce a unas micro-ops atómicas y usan register renaming e incluso se han adoptado extensiones de instrucciones pesadas como las SIMD para chips ARM destinados a HPC. Por tanto, las diferencias son aún más complejas…

ARM Cortex A76
Similitud con una microarquitectura Cortex-A76 ARM (RISC). Fuente: Wikichip

No confundas microoperaciones con microinstrucciones, que son las instrucciones almacenadas en la memoria de la unidad de control y que componen el microprograma (véase microcode).

Curiosidades (bonus)

Por cierto, en todo momento estoy hablando de Intel y AMD, pero hay otros diseños como:

  • IBM z/Architecture, otra CISC usada en mainframes también hace uso de esas traducciones en micro-ops.
  • eSi-RISC, una arquitectura RISC-like (load/store).
  • AT&T Hobbit que era parcialmente un RISC-like usando lo que llamaron CRISP (C-language Reduced Instruction Set Processor).
  • La microarquitectura Clipper de Fairchild Semiconductor.
  • Los MDSP de Cradle Technologies.
  • E incluso algunos diseños VLIW que se aprovecharon de traducciones de instrucciones similares con varias unidades de ejecución independientes actuando como RISC-likes.

Por cierto, en otras ocasiones he hablado del caso raro de Transmeta, donde trabajó Linus Torvalds recién llegado a Silicon Valley. Esta compañía estuvo años sin desvelar a lo que se decaban hasta que lanzaron su Crusoe (y su posterior Efficeon). Un microprocesador que era compatible con software x86, pero internamente funcionaba como VLIW. Para ello, Linus se encargó de escribir Code Morphing, un software que se ejecutaba siempre en para hacer la traducción de las CISC x86 y encajarlas en los slots VLIW de 128 y 256-bit de sus diseños.  Por tanto, siempre se han intentado hacer hibridaciones para extraer lo mejor de dos mundos…

Es curioso ver cómo han estado jugando muchos diseñadores con todo esto para obtener algún tipo de ventaja, ya sea de compatibilidad, eficiencia, rendimiento, etc. Por ejemplo, se me viene a la cabeza también casos como:

  • Elbrus E2K, un procesador ruso que funcionaba con una ISA propia VLIW y que usaba un software de traducción dinámica para que fuesen compatibles con software (binarios) compilados para x86. Es decir, algo similar a lo de Transmeta.
  • El PowerPC 615 fue un diseño raro de IBM que se lanzó en 1994, y que incorporaba un core x86 on-die. Eso hacía que el procesador pudiera ejecutar de forma nativa tanto software para PPC como para x86. El sistema operativo es en este caso el que podía elegir entre usar instrucciones PPC de 32/64-bit o las x86 de 32-bit o un mix de las tres. Esto no estuvo exento de problemas, con algunas sobrecagas, además, los únicos SSSOO compatibles fueron Minix y una versión especial de OS/2.
  • Qualcomm también es otra de las interesadas en la traducción dinámica en tiempo de ejecución para llevar sus chips ARM al escritorio y que sean compatibles con binarios para x86… algo que a Intel no le ha hecho demasiada gracia.

Y para terminar este apartado, conocerás seguramente la microarquitectura Intel Lakefield. En este caso, es curioso ver que está usando también algo similar a big.LITTLE de ARM. Es decir, mezclar núcleos Atom-based y Core-based en un mismo chip para usar unos u otros para hacer al chip más eficiente… Es un sin fin de coger ideas unos de otros para avanzar.

Con esa hibridación, se cuenta con núcleos de alto rendimiento (consumo elevado) que se encargarán de la carga de trabajo cuando sea más pesada. Y por otro lado con núcleos más eficientes energéticamente y con menor rendimiento para que sean usados en esos momentos en los que no se necesita tanto rendimiento. Eso hará que el consumo de energía caiga y se eleve la autonomía. Así que… cogiendo un eslogan de AMD: ¡The Future is Fusion! Y eso sin hablar de la computación heterogénea que ya la dejamos para otro capítulo ¿no?

Conclusión

En la actualidad, muchas implementaciones no son puras CISC, ni tampoco puras RISC. Pero ten claro una cosa:

  • La ISA x86 y sus extensiones fue, es, y será CISC. De la misma manera que la ISA ARM fue, es y será siempre RISC, aunque algunos diseños estén usando extensiones SIMD tipo CISC…
  • Los microprocesadores a nivel interno sí que funcionan de forma similar a los RISC.

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar