RISC y CISC: diseños opuestos

Como ya se ha mencionado con anterioridad, el MIPS es un microprocesador de tipo RISC: Reduced Instruction Set Computer.

Esta aproximación es totalmente diferente de las arquitecturas tipo CISC (del inglés Complex Instruction Set Computer), basadas en repertorios de instrucciones con repertorios de instrucciones mucho más complicados que se traducen en diseños de la ruta de datos mucho más complejos.

Un poco de historia

Los primeros proyectos RISC surgieron de IBM, Stanford, y UC-Berkeley a finales de los 70 y principios de los 80. El IBM 801, el MIPS de Stanford y los RISC 1 y 2 de Berkeley fueron todos diseñados siguiendo una filosofía similar, la cual ha llegado a ser conocida como RISC. Ciertas características generales de estos diseños se encuentan hoy en día en todos las arquitecturas de tipo RISC.


Microprocesador RISC IBM 801

Figura 1: IBM desarrolla el 801 experimental, basado en la arquitectura RISC desarrollada por el investigador de IBM John Cocke.
Fuente: IBM

RISC vs. CISC

La manera más sencilla de ver las ventajas y desventajas de las arquitecturas RISC, es contrastarlas con su predecesoras: las arquitecturas CISC.

» Multiplicando dos números en memoria

Ejemplo RISC vs CISC

A la derecha puede verse un diagrama que representa el esquema de almacenamiento de un computador genérico. La memoria principal está dividida en emplazamientos numerados desde Fila 1, Columna 1 (1:1) hasta Fila 6, Columna 4 (6:4). La unidad de ejecución es responsable de llevar a cabo todos los cálculos. Sin embargo, la unidad de ejecución sólo puede operar con datos que han sido cargados en alguno de los 6 registros de propósito general existentes (A, B, C, D, E, ó F). Digamos que queremos hallar el producto de 2 números: el primero está almacenado en la posición (2:3) y el otro está en la posición (5:2). Después guardaremos el producto hallado en la posición (2:3) de memoria.

» La filosofía CISC

El objetivo principal de la arquitectura CISC es completar una tarea en el menor número de líneas de código ensamblador posibles. Este objetivo es conseguido mediante la construcción de un microprocesador capaz de comprender y ejecutar una serie de operaciones complejas. Para esta tarea en particular, un procesador CISC vendría preparado con una instrucción específica (la llamaremos "MULT"). Cuando se ejecuta, esta instrucción lee los dos valores de memoria, multiplica los operandos en la unidad de ejecución, y después almacena el resultado en la posición de memoria adecuada. De esta manera, la tarea completa de multiplicar dos números puede ser llevada a cabo con una única instrucción:
MULT (2:3), (5:2)
MULT es lo que se conoce como una "instrucción compleja". Opera directamente sobre los bancos de memoria del computador y no requiere al programador para llamar explicitamente a una carga de operandos o funciones de almacenamiento. Se parece mucho a un comando en un lenguaje de programación de alto nivel. Por ejemplo, si permitimos que "a" represente el valor de (2:3) y "b" represente el valor de (5:2), entonces este comando es idéntico a la expresión en C "a = a * b".

Una de las ventajas principales de esta filosofía es que el compilador tiene que hacer muy poco trabajo para traducir un lenguaje de alto nivel a ensamblador. Además, debido a que la longitud del código es relativamente corta, hace falta poca RAM para almacenar las instrucciones. Pero la difucultad está en construir instrucciones complejas directamente en hardware.

» La filosofía RISC

Los procesadores RISC sólo usan instrucciones sencillas que se puedan ejecutar rápidamente. Por este motivo suelen ser arquitecturas basadas en registros de propósito general que operan siempre sobre operandos que se encuetran almacenados en el procesador, cerca de la unidad de eejcución. De esta forma, el comando "MULT" descrito más arriba podría ser dividido en tres comandos por separado: "LOAD", que mueve datos del banco de memoria a un registro; "PROD", que halla el producto de dos operandos situados en los registros; y "STORE", que mueve datos de un registro al banco de memoria. Para realizar la serie de pasos descritos en la filosofía CISC, un programador debería codificar la instrucción en 4 líneas de código ensamblador:
LOAD A, (2:3)
LOAD B, (5:2)
PROD A, B
STORE (2:3), A

A primera vista, puede parecer una manera mucho menos eficiente de completar la operación. Debido a que hay más líneas de código, hace falta más RAM para almacenar las instrucciones en ensamblador. El compilador debe realizar también más trabajo para convertir un lenguaje de alto nivel en código.

Sin embargo, la estrategia RISC también tiene grandes ventajas. Debido a que cada instrucción realiza una operación muy simple, el código se ejecutará en aproximadamente el mismo tiempo que el comando "MULT" de la arquitectura CISC. Estas "instrucciones reducidas" RISC requieren menos hardware y más sencillo que las instrucciones complejas, dejando más espacio para registros de propósito general. Además, las optimizaciones sobre un hardware más sencillo son mucho más fáciles de realizar.

RESUMIENDO

» Arquitecturas CISC

  • Computador con repertorio de instrucciones complejo.
  • Gran número de instrucciones complejas.
  • Gran variedad de tipos de datos y de modos de direccionamiento.
  • Permite implementar instrucciones de alto nivel directamente o con un número pequeño de instrucciones ensamblador.
  • Además se pueden añadir nuevas instrucciones al repertorio manteniendo las antiguas.

» Arquitecturas RISC

  • Computador con repertorio de instrucciones reducido.
  • Pocas instrucciones y muy básicas.
  • Repertorio simple y ortogonal.
  • Formatos de instrucción uniformes.
  • Pocos tipos de datos y de modos de direccionamiento, siempre los más sencillos.

» Para ampliar esta información, puedes visitar...