RISC contra CISC: la batalla que definió a la informática moderna

La filosofía RISC apareció en el mundo de las estaciones de trabajo en la segunda mitad de los años 80 como la filosofía imperante en el diseño de microprocesadores para estaciones de trabajo y se estandarizó en sistemas domésticos en década de los 90, tanto en ordenadores como en consolas de videojuegos. Si bien, a día de hoy, el discurso CISC versus RISC está más que superado, sí que tiene importancia a la hora de entender la evolución en la arquitectura de las CPU con el paso del tiempo y nos sirve para entender el contexto histórico y la evolución de la tecnología.

RISC no es lo que te han contado

Se suele tomar a lo literal el significado de RISC a partir de sus siglas: Reduced Instruction Set Computing. Ya que al hablar de set reducido de instrucciones, se llega a la conclusión de que la única diferencia entre una CPU con filosofía RISC y una CISC es la cantidad de instrucciones, puesto que es posible crear instrucciones complejas a través de otras más simples. Sin embargo, esto no es del todo así y para entenderlo hemos de ver a la CPU no como una pieza homogénea, sino como algo similar a una cadena de montaje donde lo que se procesan son las instrucciones y donde tenemos diferentes instrucciones al mismo tiempo en la CPU. Cada una en una parte distinta de la fábrica y en estados distintos del ciclo de instrucción (captación, decodificación y ejecución).

RISC-I

La idea es reducir la complejidad de dichas instrucciones de tal manera que cada etapa del ciclo de instrucción dure un solo ciclo de reloj. Esto significa que podemos desplazar las instrucciones hacia la siguiente etapa de forma muy rápida.

  • En un microprocesador CISC una etapa del ciclo de instrucción puede tardar varios ciclos, y hasta que no se completa no pasa a la siguiente, y eso puede durar varios ciclos.
  • En cambio, si hablamos de un microprocesador RISC, cada uno de los ciclos de la etapa se reduce y se hace que duren un solo ciclo. Esto provoca que, cuando la instrucción 1 pasa a la etapa 2, la instrucción 2 puede pasar a la etapa 1 del pipeline.

Es decir, aunque la instrucción en realidad tarde varios ciclos de reloj en ejecutarse realmente, gracias a ello el ratio de instrucciones que salen resueltas, si no hay complicaciones o paralelismo simultáneo de instrucciones, pues pasa a ser cercano a la velocidad de reloj.

RISC versus CISC

A continuación, os dejamos en una tabla las diferencias clave entre un diseño bajo la filosofía CISC y uno bajo la filosofía RISC, para que sepáis mucho mejor las diferencias clave entre ambos planteamientos.

RISCCISC
Tamaño fijo de las instruccionesTamaño variable de las instrucciones
Requiere un mayor número de registros internos.No requiere registros internos.
Solo puede ejecutar instrucciones aritméticas entre registros.Puede ejecutar instrucciones aritméticas entre registros, entre registros y memoria o entre memoria y memoria.
Código fuente de mayor tamañoCodigo fuente más compacto.
Optimizado para el pipeliningNo optimizado para el pipelining.

Las unidades Load/Store y su relación con la filosofía RISC

Ahora bien, una de las características que ayudan a diferenciar si una arquitectura es RISC o no son las unidades Load/Store, las cuales son un tipo de unidad de ejecución, pero cuyo trabajo no es realizar operaciones aritméticas, sino cargar datos desde una dirección concreta de la memoria en los registros internos del microprocesador. En un diseño RISC, el acceso a memoria es realizado a través de instrucciones Load/Store en exclusiva, por lo que las instrucciones operarán directamente con la información que haya en los registros. Esto contrasta con las arquitecturas CISC, como x86, donde las instrucciones pueden operar directamente sobre datos en memoria sin necesidad de cargarlos primero en un registro.

Diagrama Load/Store Zen 3

Dicho de otra manera, en una arquitectura RISC las instrucciones que acceden a memoria están separadas de las instrucciones aritméticas y lógicas. Por lo que en una CPU diseñada con esta filosofía es necesario que se haya cargado antes la información con la que se quiere trabajar desde memoria, de ahí a que las arquitectura RISC se las conozcan también como arquitecturas Load/Store. Esto permite implementar el llamado pipelining, por el hecho de que las instrucciones tienen tiempos de ejecución similares.

Es por ello, que los sets de instrucciones RISC tienen una mayor cantidad de registros de propósito general, ya que una vez la información se encuentra en los mismos, ya no es necesario volver a pedirles a las unidades Load/Store que carguen la información desde memoria. Esto ayuda a reducir el número de ciclos necesarios en la captación de datos, al mínimo posible.

Decodificación de instrucciones

Codigo-binario

Otro de los puntos donde las arquitecturas RISC se separan de las CISC es por el tamaño fijo de las instrucciones en las primeras, lo que permite simplificar enormemente la complejidad de la unidad de ejecución. Con ello nos referimos al tamaño total de la instrucción, que incluye el opcode y los operandos correspondientes. Esto trae consigo una serie de ventajas:

  • Como todas las instrucciones tienen el mismo tamaño y estructura, el procesador puede decodificarlas rápidamente sin necesidad de calcular su longitud.
  • A la hora de implementar el pipeline en un microprocesador, es mejor hacerlo con instrucciones de tamaño uniforme, ya que cada etapa o subetapa a la hora de calcular una instrucción recibirá la misma cantidad de bits.
  • Al no tener que manejar múltiples formatos de instrucciones de diferentes longitudes, el hardware del procesador es más simple, lo que ayuda a crear diseños no solo más rápidos, sino también más eficientes hablando.

Sin embargo, la falta de instrucciones compactas termina haciendo que los sistemas con un microprocesador RISC requieran una mayor cantidad de memoria. Este era el motivo por el cual los primeros ordenadores seguían la filosofía CISC, más que nada por el alto precio que tenía la memoria RAM, lo que llevaba al uso de programas mucho más compactos. A medida que se abarató el coste de dicho componente y la capacidad creció, esto dejó de ser un problema.

Un increíble salto en rendimiento

Ya os comentamos que la CPU estándar para las estaciones de trabajo en la primera mitad de los años 80 fue el Motorola 68000 y sus versiones mejoradas, pensad que un 68030 y un Intel 386, ambos lanzados en 1987, podían alcanzar un rendimiento de 6 MIPS a una velocidad de 25 MHz y eran diseños plenamente CISC. En cambio, los microprocesadores RISC de primera generación podían alcanzar un ratio de 1 MIPS por MHz, es decir, un salto cualitativo de cuatro veces, algo que nunca se ha visto en la historia de la informática y llevó a muchas marcas no solo a adoptarlos, sino a crear sus propios microprocesadores de este tipo para sus estaciones de trabajo.

CPU Nintendo64 MIPS RISC

De esta manera nacieron una serie de sets de registros e instrucciones que seguramente a muchos os sonarán. La gran mayoría de ellos han desaparecido bajo las arenas del tiempo, otros, en cambio, se mantienen al mismo tiempo que han nacido otros nuevos. Hablamos de nombres como PowerPC de IBM, Alpha de Digital Equipment Corporation, MIPS, ARM, SPARC de Sun Microsystems y muchos otros que nos dejamos por el camino, como por ejemplo la SuperH de Hitachi. Todo ello sin olvidarnos de RISC-V, que, como su nombre indica, sigue la misma filosofía, pero sin depender de una empresa en concreto.

Donde se vio este salto en rendimiento a nivel doméstico fue con la generación de consolas de 32/64 bits, donde se pasó de tener microprocesador con un rendimiento de 1 o 2 MIPS a decenas, siendo el más impresionante el que se dio de SNES/Super Famicom a Nintendo64, ya que supuso un salto de 100 veces la potencia de cálculo. Aunque en general el salto fue de varias decenas de veces.

¿Por qué no consiguieron conquistar el estrellato en PC?

En realidad, sí que lo hicieron. Muchas arquitecturas RISC quisieron competir contra el PC sin apenas software en el que correr y cayeron el mismo error que el 68000 en su día. Esto le dio tiempo a Intel y AMD a añadir elementos de la filosofía RISC al diseño de sus CPU basadas en el set de instrucciones x86. El primer diseño x86 con una filosofía RISC fue el Pentium Pro de Intel, el cual sirvió como base para los Pentium II y III. . Este fue el primer procesador en traducir las instrucciones CISC en micro-ops más simples, similares a las instrucciones de un procesador RISC.

Intel Pentium Pro en placa base

Esto se traduce en que, si bien, a día de hoy el set de instrucciones de los microprocesadores de PC que es visible al programador es CISC, x86, la mayoría de los mismos decodifican esas instrucciones complejas en microoperaciones de estilo RISC para optimizar la ejecución y el pipeline. Es decir, aunque el ISA (conjunto de instrucciones) es CISC, internamente funciona como un RISC. La prueba de ello es que, en la actualidad, las arquitecturas contemporáneas de Intel y AMD tienen unidades Load/Store.

En dispositivos de bajo consumo, la cosa fue diferente. Ya desde la aparición de los primeros ordenadores de bolsillo, la carrera se disputó entre ARM, SuperH y MIPS sin la participación de ninguna arquitectura CISC al ser menos eficientes, ganando con el tiempo la batalla ARM, que con el paso del tiempo se ha convertido en el set de instrucciones más utilizado del mundo. Por lo que se puede decir, que, claramente, los RISC ganaron la guerra y a día de hoy todos los microprocesadores usan dicha filosofía de diseño.

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x