Articulo de referencia

Berkeley RISC

Berkeley RISC es uno de los dos proyectos de investigación fundamentales sobre el diseño de microprocesadores basados ​​en arquitecturas de conjunto de instrucciones reducido (R...

Berkeley RISC es uno de los dos proyectos de investigación fundamentales sobre el diseño de microprocesadores basados ​​en arquitecturas de conjunto de instrucciones reducido (RISC) que se llevaron a cabo en el marco del Proyecto VLSI de la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA). RISC fue liderado por David Patterson (quien acuñó el término RISC) en la Universidad de California, Berkeley, entre 1980 y 1984. [ 1 ] El otro proyecto se desarrolló a poca distancia, en la Universidad de Stanford, dentro de su iniciativa MIPS, que comenzó en 1981 y se extendió hasta 1984.

El proyecto de Berkeley tuvo tanto éxito que se convirtió en el nombre de todos los diseños similares posteriores; incluso el MIPS llegó a ser conocido como un "procesador RISC". El diseño RISC de Berkeley fue comercializado más tarde por Sun Microsystems como la arquitectura SPARC , e inspiró la arquitectura ARM . [ 2 ]

El concepto RISC

Tanto RISC como MIPS se desarrollaron a partir de la constatación de que la gran mayoría de los programas utilizaban solo una pequeña parte del conjunto de instrucciones disponible de un procesador. En un famoso artículo de 1978, Andrew S. Tanenbaum demostró que un programa complejo de alto nivel de 10 000 líneas podía representarse utilizando una arquitectura de conjunto de instrucciones simplificada con un código de operación de longitud fija de 8 bits. [ 3 ] Esta fue prácticamente la misma conclusión a la que llegó IBM , cuyos estudios de su propio código ejecutándose en mainframes como el IBM 360 utilizaban solo un pequeño subconjunto de todas las instrucciones disponibles. Ambos estudios sugirieron que se podía producir una CPU mucho más simple que aún pudiera ejecutar la mayor parte del código del mundo real. Otro hallazgo, no explorado completamente en ese momento, fue la observación de Tanenbaum de que el 81 % de las constantes eran 0, 1 o 2. [ 3 ]

Estas conclusiones se dieron a medida que el mercado de microprocesadores pasaba de 8 a 16 bits, con la inminente aparición de diseños de 32 bits. Dichos diseños se basaban en el objetivo de replicar algunas de las arquitecturas de conjunto de instrucciones (ISA) más reconocidas del mundo de las computadoras centrales y minicomputadoras. Por ejemplo, el National Semiconductor NS32000 surgió como un intento de producir una implementación en un solo chip del VAX-11 , que contaba con un amplio conjunto de instrucciones y una gran variedad de modos de direccionamiento . El Motorola 68000 tenía una disposición general similar. Para proporcionar este amplio conjunto de instrucciones, las CPU utilizaban microcódigo para decodificar la instrucción visible para el usuario en una serie de operaciones internas. Este microcódigo representaba quizás entre un cuarto y un tercio de los transistores del diseño general.

Si, como sugerían otros estudios, la mayoría de estos códigos de operación nunca se utilizarían en la práctica, entonces se estaría desperdiciando un recurso tan importante. Si simplemente se construyera el mismo procesador eliminando las instrucciones no utilizadas, sería más pequeño y, por lo tanto, menos costoso; mientras que si, en lugar de decodificar instrucciones que no se usarían, se utilizaran esos transistores para mejorar el rendimiento, sería posible obtener un procesador más rápido. El concepto RISC consistía en aprovechar ambas ventajas, creando una CPU con el mismo nivel de complejidad que la 68000, pero mucho más rápida.

Para ello, RISC se centró en añadir muchos más registros , pequeños bloques de memoria que almacenan valores temporales a los que se puede acceder con gran rapidez. Esto contrasta con la memoria principal convencional , cuyo acceso puede tardar varios ciclos. Al proporcionar más registros y garantizar que los compiladores los utilizaran, los programas deberían ejecutarse mucho más rápido. Además, la velocidad del procesador estaría más directamente determinada por su frecuencia de reloj, ya que se dedicaría menos tiempo a esperar los accesos a la memoria. Transistor por transistor, un diseño RISC superaría en rendimiento a una CPU convencional.

Como desventaja, las instrucciones que se eliminaban generalmente realizaban varias subinstrucciones. Por ejemplo, una ADDinstrucción de diseño tradicional solía tener varias variantes: una que sumaba los números de dos registros y los colocaba en un tercero, otra que sumaba los números de la memoria principal y guardaba el resultado en un registro, etc. Los diseños RISC, en cambio, incluían una única variante de cada instrucción; ADDpor ejemplo, siempre utilizaban registros para todos los operandos. Esto obligaba al programador a escribir instrucciones adicionales para cargar los valores desde la memoria, si era necesario, lo que hacía que un programa RISC fuera menos denso.

En la época de la memoria costosa, esto era una preocupación real, sobre todo porque la memoria era mucho más lenta que la CPU. Dado que un diseño RISC ADDrequería cuatro instrucciones (dos cargas, una suma y una escritura), la máquina tenía que acceder a mucha más memoria para leer las instrucciones adicionales, lo que podía ralentizarla considerablemente. Esto se compensaba en cierta medida por el hecho de que los nuevos diseños utilizaban una palabra de instrucción de 32 bits , que en aquel entonces era muy grande, lo que permitía insertar pequeñas constantes directamente en la instrucción en lugar de tener que cargarlas por separado. Además, los resultados de una operación suelen utilizarse poco después en otra, por lo que, al omitir la escritura en memoria y almacenar el resultado en un registro, el programa no resultaba mucho más grande y, en teoría, podía ejecutarse mucho más rápido. Por ejemplo, una secuencia de instrucciones que realizaba una serie de operaciones matemáticas podía requerir solo unas pocas cargas de memoria, mientras que la mayoría de los números utilizados serían constantes en las instrucciones o valores intermedios que quedaban en los registros de cálculos anteriores. En cierto modo, en esta técnica se utilizan algunos registros para simular ubicaciones de memoria, de modo que los registros se utilizan como sustitutos de las ubicaciones de memoria hasta que se determinan sus valores finales después de que se haya ejecutado un grupo de instrucciones.

Para el observador casual, no estaba claro que el concepto RISC mejoraría el rendimiento, e incluso podría empeorarlo. La única forma de comprobarlo era simularlo. Los resultados de dichas simulaciones fueron claros: en cada prueba, todas las simulaciones mostraron una enorme mejora general en el rendimiento gracias a este diseño.

La diferencia entre los dos proyectos, RISC y MIPS, radicaba en el manejo de los registros. MIPS simplemente añadía muchos registros y dejaba que los compiladores (o programadores de lenguaje ensamblador ) se encargaran de utilizarlos. RISC, en cambio, añadía circuitos a la CPU para asistir al compilador. RISC empleaba el concepto de ventanas de registro , en el que todo el "archivo de registros" se dividía en bloques, lo que permitía al compilador "ver" un bloque para las variables globales y otro para las variables locales.

La idea era simplificar al máximo la implementación de una instrucción particularmente común: la llamada a procedimiento . Casi todos los lenguajes de programación utilizan un sistema conocido como registro de activación o marco de pila para cada procedimiento, que contiene la dirección desde la que se llamó, los datos (parámetros) que se le pasaron y espacio para los valores de resultado que deben devolverse. En la gran mayoría de los casos, estos marcos son pequeños, generalmente con tres o menos entradas y una o ninguna salida (y a veces una entrada se reutiliza como salida). En el diseño de Berkeley, una ventana de registro era un conjunto de varios registros, suficientes para que el marco de pila del procedimiento completo probablemente cupiera dentro de ella.

En este caso, la llamada a un procedimiento y su retorno son sencillos y extremadamente rápidos. Se llama a una sola instrucción para configurar un nuevo bloque de registros (una nueva ventana de registros) y, a continuación, con los operandos pasados ​​al procedimiento en el extremo inferior de la nueva ventana, el programa salta al procedimiento. Al regresar, los resultados se colocan en la ventana del mismo extremo y el procedimiento finaliza. Las ventanas de registros se configuran para superponerse en los extremos, de modo que los resultados de la llamada simplemente "aparecen" en la ventana del programa que realiza la llamada, sin necesidad de copiar datos . De este modo, la llamada a un procedimiento común no tiene que interactuar con la memoria principal, lo que la acelera considerablemente.

Como desventaja, este enfoque implica que los procedimientos con un gran número de variables locales resultan problemáticos, y aquellos con menos variables conllevan el desperdicio de registros, un recurso costoso. El diseño cuenta con un número finito de ventanas de registro, por ejemplo, ocho, por lo que los procedimientos solo pueden anidarse hasta ese nivel de profundidad antes de que el mecanismo de ventanas de registro alcance su límite; una vez que se alcanza la última ventana, no se puede configurar ninguna nueva para otra llamada anidada. Además, si los procedimientos se anidan solo unos pocos niveles de profundidad, los registros en las ventanas superiores al nivel de anidamiento de llamada más profundo nunca se pueden acceder, por lo que se desperdician por completo. Fue el trabajo de Stanford sobre compiladores lo que los llevó a ignorar el concepto de ventana de registro, creyendo que un compilador eficiente podría aprovechar mejor los registros que un sistema fijo en hardware. (El mismo razonamiento se aplicaría a un programador inteligente de lenguaje ensamblador).

RISC I

Vista del chip RISC I. La mayor parte del chip está ocupada por el banco de registros (zona inferior izquierda). La lógica de control solo ocupa la pequeña esquina superior derecha.

El primer intento de implementar el concepto RISC se denominó originalmente Gold . El trabajo en el diseño comenzó en 1980 como parte de un curso de diseño VLSI, pero el diseño, entonces complejo, colapsó casi todas las herramientas de diseño existentes. El equipo tuvo que dedicar una cantidad considerable de tiempo a mejorar o reescribir las herramientas, e incluso con estas nuevas herramientas, se tardaba poco menos de una hora en extraer el diseño en un VAX-11/780 .

El diseño final, denominado RISC I , se publicó en el Simposio Internacional sobre Arquitectura de Computadoras (ISCA) de la Asociación para la Maquinaria de Computación ( ACM) en 1981. Contaba con 44.500 transistores que implementaban 31 instrucciones y un banco de registros con 78 registros de 32 bits. Esto permitía seis ventanas de registro con 14 registros cada una. De esos 14 registros, 4 se superponían con los de la ventana anterior. El total es, por lo tanto: 10 * 6 registros en ventanas + 18 registros globales = 78 registros en total. La sección de control y decodificación de instrucciones ocupaba solo el 6 % del chip, mientras que el diseño típico de la época utilizaba aproximadamente el 50 % para la misma función. El banco de registros ocupaba la mayor parte de ese espacio. [ 4 ]

RISC I también presentaba una segmentación de instrucciones de dos etapas para mayor velocidad, pero sin la compleja reordenación de instrucciones de los diseños más modernos. Esto genera problemas con las bifurcaciones condicionales, ya que el compilador debe completar la instrucción que sigue a una bifurcación condicional (la llamada ranura de retardo de bifurcación ) con algo seleccionado para ser "seguro" (es decir, que no dependa del resultado de la condición). A veces, la única instrucción adecuada en este caso es NOP. Un número considerable de diseños posteriores de estilo RISC aún requieren la consideración del retardo de bifurcación.

Tras un mes de validación y depuración, el diseño se envió al innovador servicio MOSIS para su producción el 22 de junio de 1981, utilizando un  proceso de 2 μm (2000 nm). Diversos retrasos obligaron a abandonar las máscaras en cuatro ocasiones, y las obleas con prototipos funcionales no llegaron a Berkeley hasta mayo de 1982. El primer "ordenador" RISC I funcional (en realidad, una placa de pruebas) se puso en marcha el 11 de junio. Durante las pruebas, los chips demostraron tener un rendimiento inferior al esperado. En general, una instrucción tardaba 2 μs en completarse, mientras que el diseño original preveía aproximadamente 0,4 μs (cinco veces más rápido). Las razones precisas de este problema nunca se explicaron del todo. Sin embargo, durante las pruebas quedó claro que ciertas instrucciones se ejecutaban a la velocidad prevista, lo que sugería que el problema era físico, no lógico.

Si el diseño hubiera funcionado a máxima velocidad, el rendimiento habría sido excelente. Las simulaciones realizadas con diversos programas pequeños, que compararon el  RISC I de 4 MHz con el VAX 11/780 de 32 bits  y 5 MHz y el Zilog Z8000 de 16 bits y 5 MHz , lo demostraron claramente. El tamaño del programa era aproximadamente un 30 % mayor que el del VAX, pero muy similar al del Z8000, lo que valida el argumento de que la mayor densidad de código de los diseños CISC no era tan impresionante en la práctica. En términos de rendimiento general, las simulaciones indicaron que un RISC I a máxima velocidad habría sido el doble de rápido que el VAX y aproximadamente cuatro veces más rápido que el Z8000. Los programas terminaron realizando prácticamente el mismo número total de accesos a memoria porque el gran archivo de registros mejoró drásticamente las probabilidades de que el operando necesario ya estuviera en el chip. 

Es importante contextualizar este rendimiento. Si bien el hardware RISC I era más lento que el VAX, esto no afectaba la importancia del diseño. RISC permitió la producción de un procesador de 32 bits real en un chip real, utilizando una fábrica ya antigua. Los diseños tradicionales simplemente no podían lograrlo; con gran parte de la superficie del chip dedicada a la lógica del decodificador, un diseño de 32 bits real como el Motorola 68020 requería fábricas más modernas para ser viable. Utilizando las mismas fábricas, RISC I podría haber superado ampliamente a la competencia.

El 12 de febrero de 2015, el IEEE instaló una placa en UC Berkeley para conmemorar la contribución de RISC-I. [ 5 ] La placa dice:

  • En 1981, estudiantes de la Universidad de California en Berkeley diseñaron y construyeron la primera computadora con conjunto de instrucciones reducido VLSI. Las instrucciones simplificadas de RISC-I redujeron el hardware necesario para la decodificación y el control de instrucciones, lo que permitió un espacio de direcciones plano de 32 bits, un amplio conjunto de registros y una ejecución segmentada. RISC-I, compatible con programas en C y el sistema operativo Unix, influyó en los conjuntos de instrucciones que se utilizan hoy en día, como los de consolas de videojuegos, teléfonos inteligentes y tabletas.

RISC II

Disparo de matriz RISC II

Si bien el diseño RISC I sufrió retrasos, en Berkeley ya se había comenzado con el nuevo diseño Blue . El desarrollo de Blue avanzó más lentamente que el de Gold, debido tanto a la falta de una necesidad urgente ahora que Gold estaba en producción, como a los cambios en las clases y el personal docente involucrado. Este ritmo también les permitió incorporar varias características nuevas que, a la larga, mejorarían considerablemente el diseño.

La principal diferencia radicó en un circuito de caché más sencillo que eliminó una línea por bit (de tres a dos), reduciendo drásticamente el tamaño del archivo de registros. Este cambio también requirió una sincronización del bus mucho más precisa, pero fue un pequeño precio a pagar y, para satisfacer las necesidades, también se aceleró el rendimiento de otras partes del diseño.

El ahorro derivado del nuevo diseño fue enorme. Mientras que Gold contenía un total de 78 registros en 6 ventanas, Blue contenía 138 registros divididos en 8 ventanas de 16 registros cada una, con otros 10 registros globales. Esta expansión del archivo de registros aumenta la probabilidad de que un procedimiento determinado pueda almacenar todo su almacenamiento local en registros y aumenta la profundidad de anidamiento. No obstante, el archivo de registros más grande requería menos transistores, y el diseño final de Blue, fabricado como RISC II , implementó todo el conjunto de instrucciones RISC con solo 40 760 transistores. [ 6 ]

El otro cambio importante fue la inclusión de un expansor de formato de instrucciones , que convertía invisiblemente las instrucciones de 16 bits a un formato de 32 bits. Esto permitía almacenar en memoria instrucciones más pequeñas, normalmente con uno o ningún operando, como , en un formato de 16 bits, y que dos de estas instrucciones se empaquetaran en una sola palabra de máquina. Las instrucciones se expandían invisiblemente a versiones de 32 bits antes de llegar a la unidad aritmético-lógica (ALU), lo que significaba que no se necesitaban cambios en la lógica central. Esta sencilla técnica produjo una sorprendente mejora del 30 % en la densidad del código, haciendo que un programa idéntico en la arquitectura Blue se ejecutara más rápido que en la Gold debido a la menor cantidad de accesos a memoria.NOP

RISC II demostró ser mucho más exitoso en silicio y, en las pruebas, superó a casi todas las minicomputadoras en prácticamente todas las tareas. Por ejemplo, su rendimiento osciló entre el 85 % y el 256 % de la velocidad de VAX en diversas cargas. RISC II también se comparó con el famoso Motorola 68000 , considerado entonces la mejor implementación de chip comercial, y lo superó entre un 140 % y un 420 %.

Seguidores

El trabajo en los diseños RISC originales terminó con RISC II, pero el concepto perduró en Berkeley. El núcleo básico se reutilizó en SOAR en 1984, básicamente un RISC convertido para ejecutar Smalltalk (de la misma manera que se podría decir que RISC ejecutaba C ), y más tarde en el similar VLSI-BAM que ejecutaba Prolog en lugar de Smalltalk. Otro esfuerzo fue SPUR , que era un conjunto completo de chips necesarios para construir una estación de trabajo completa de 32 bits .

El concepto RISC, tal como se desarrolló en los proyectos Berkeley RISC, Stanford MIPS e IBM 801 , influyó en varias ISA comerciales a mediados de la década de 1980. Acorn Computers, en colaboración con su socio de silicio VLSI Technology , [ 7 ] desarrolló la arquitectura ARM , enviando ARM Evaluation Systems con sus conjuntos de chips ARM de segunda generación desde julio de 1986, [ 8 ] y una gama de computadoras de escritorio, de la marca Acorn Archimedes , anunciadas como capaces de 4 MIPS, desde el 6 de junio de 1987. [ 9 ] Hewlett Packard introdujo su propia ISA PA-RISC , también en 1986, en nuevos modelos de sus series HP 3000 y HP 9000. Sun Microsystems , en colaboración con su socio de silicio Fujitsu , envió su propia ISA SPARC , desde el 8 de julio de 1987, en su Sun 4/260 , una máquina anunciada como que ofrecía 10 MIPS. MIPS Computer Systems , fundada en 1984 para comercializar el trabajo del proyecto MIPS de Stanford, desarrolló la arquitectura MIPS y los procesadores MIPS, comenzando con el R2000 . Silicon Graphics (SGI) reemplazó los procesadores Motorola de la serie 68000 en sus estaciones de trabajo con procesadores MIPS, llegando incluso a adquirir MIPS. Digital Equipment Corporation utilizó procesadores MIPS en sus estaciones de trabajo DECstation . IBM desarrolló el procesador RISC ROMP , utilizado en el IBM RT PC , y la arquitectura POWER , utilizada en la serie RS/6000 . A finales de la década de 1980, la mayoría de los grandes fabricantes de chips siguieron el ejemplo, trabajando en proyectos como el Motorola 88000 , el Fairchild Clipper y el AMD 29000. El rendimiento y la eficiencia de estos sistemas superaron a la generación anterior de CPU CISC.

A principios de la década de 1990, Apple , IBM y Motorola formaron la alianza AIM , que desarrolló la arquitectura PowerPC , basada en la arquitectura POWER de IBM, con procesadores PowerPC vendidos tanto por IBM como por Motorola, y utilizados por Apple para reemplazar los procesadores de la serie Motorola 68000 en sus computadoras Macintosh . Digital Equipment Corporation (DEC) tenía varios proyectos RISC en desarrollo desde principios de la década de 1980, decantándose finalmente por el DEC PRISM , pero ese proyecto fue cancelado; a principios de la década de 1990, un proyecto posterior produjo el DEC Alpha .

El 13 de febrero de 2015, IEEE instaló una placa en Oracle Corporation en Santa Clara. [ 10 ] Dice:

  • Sun Microsystems presentó la arquitectura de procesador escalable (SPARC) RISC en julio de 1987. Basada en los desarrollos de la arquitectura RISC de la Universidad de California en Berkeley y en los compiladores y sistemas operativos de Sun, la arquitectura SPARC era altamente adaptable a la evolución de la tecnología de semiconductores, software y sistemas, así como a las necesidades de los usuarios. Esta arquitectura ofrecía estaciones de trabajo y servidores escalables de máximo rendimiento para aplicaciones de ingeniería, negocios, internet y computación en la nube.

Las técnicas desarrolladas para y junto con la idea del conjunto de instrucciones reducido también se han adoptado en implementaciones y extensiones cada vez más potentes de la arquitectura x86 tradicional y "compleja" . Gran parte del número de transistores de un microprocesador moderno se dedica a grandes cachés, múltiples etapas de segmentación , despacho de instrucciones superescalar , predicción de bifurcaciones y otras técnicas modernas que son aplicables independientemente de la arquitectura de instrucciones. La cantidad de silicio dedicada a la decodificación de instrucciones en una implementación x86 moderna es proporcionalmente bastante pequeña, por lo que la distinción entre implementaciones de procesadores "complejos" y RISC se ha desdibujado.

Véase también

Referencias

Citas

  1. Reilly, Edwin D. (2003). Hitos en Ciencias de la Computación y Tecnologías de la Información . Bloomsbury Academic. pág . 50. ISBN  1-57356-521-0.
  2. Chisnal, David (23 de agosto de 2010). "Comprendiendo las arquitecturas ARM" . Informit . Consultado el 13 de octubre de 2015 .
  3. 1 2 Tanenbaum, Andrew (marzo de 1978). "Implicaciones de la programación estructurada para la arquitectura de máquinas" . Communications of the ACM . 21 (3): 237– 246. doi : 10.1145/359361.359454 . S2CID 3261560 . 
  4. Peek, James B. (1983-06-02). El circuito VLSI de RISC I (PDF) (Informe técnico). Berkeley, CA, EE. UU.: Universidad de California en Berkeley. pp. 13, 59. CSD-83-135. 
  5. "recuerdos [ Reunión RISC-I ] " . risc.berkeley.edu . Consultado el 19 de marzo de 2020 .
  6. "Prototipos de hardware de Berkeley" . people.eecs.berkeley.edu . Consultado el 6 de noviembre de 2021 .
  7. Furber, Steve (marzo de 2017). "Microprocesadores: los motores de la era digital" . Actas de la Royal Society A: Ciencias Matemáticas, Físicas y de Ingeniería . 473 ( 2199) 20160893. Bibcode : 2017RSPSA.47360893F . doi : 10.1098/rspa.2016.0893 . ISSN 1364-5021 . PMC 5378251. PMID 28413353 .   
  8. "Chris's Acorns: Productos OEM de Acorn" . chrisacorns.computinghistory.org.uk . Consultado el 24 de abril de 2025 .
  9. "Anuncio de Acorn: Arquímedes: Microcomputadora del año 1987" . nosher.net . Consultado el 24 de abril de 2025 .
  10. Gee, Kelvin. "Oracle recibirá el premio IEEE Milestone por su arquitectura SPARC RISC" . blogs.oracle.com . Consultado el 19 de marzo de 2020 .

Bibliografía

  • Patterson, David ; Ditzel, David (1980). "El caso de la computadora con conjunto reducido de instrucciones" (PDF) . ACM SIGARCH Computer Architecture News . 8 (6): 25–33 . CiteSeerX 10.1.1.68.9623 . doi : 10.1145/641914.641917 . S2CID 12034303. Archivado del original (PDF) el 10 de agosto de 2017.  
  • Sequin, CH ; Patterson, DA (octubre de 1982). Diseño e implementación de RISC I (Informe técnico). UCB-CSD-82-106.
  • Berkeley RISC II
  • Tabak, Daniel (1987). Arquitectura de la computadora con conjunto de instrucciones reducido (RISC) . Research Studies Press. pp. 19–48 . ISBN  978-0-86380-047-4OCLC 801855772