En electrónica y ciencias de la computación , una computadora con conjunto de instrucciones reducido ( RISC ) es una arquitectura de computadora diseñada para simplificar las instrucciones individuales que se le dan a la computadora para realizar tareas. En comparación con las instrucciones que se le dan a una computadora con conjunto de instrucciones complejo (CISC), una computadora RISC podría requerir más instrucciones (más código) para realizar una tarea porque las instrucciones individuales están escritas en un código más simple. El objetivo es compensar la necesidad de procesar más instrucciones aumentando la velocidad de cada instrucción, en particular implementando una secuencia de instrucciones , que puede ser más simple de lograr dadas instrucciones más simples. [1]
El concepto operativo clave de la computadora RISC es que cada instrucción realiza sólo una función (por ejemplo, copiar un valor de la memoria a un registro). La computadora RISC normalmente tiene muchos registros (16 o 32) de alta velocidad y propósito general con una arquitectura de carga-almacenamiento en la que el código para las instrucciones registro-registro (para realizar operaciones aritméticas y pruebas) está separado de las instrucciones que acceden a la memoria principal de la computadora. El diseño de la CPU permite a las computadoras RISC pocos modos de direccionamiento simples [2] y tiempos de instrucción predecibles que simplifican el diseño del sistema en su conjunto.
Los desarrollos conceptuales de la arquitectura informática RISC comenzaron con el proyecto IBM 801 a finales de los años 1970, pero no se pusieron en práctica inmediatamente. Los diseñadores de California retomaron los conceptos del 801 en dos proyectos fundamentales, Stanford MIPS y Berkeley RISC . Estos se comercializaron en los años 1980 como los sistemas MIPS y SPARC . IBM finalmente produjo diseños RISC basados en trabajos posteriores sobre el concepto 801, la arquitectura IBM POWER , PowerPC y Power ISA . A medida que los proyectos maduraron, muchos diseños similares, producidos a mediados y finales de los años 1980 y principios de los años 1990, como ARM , PA-RISC y Alpha , crearon unidades centrales de procesamiento que aumentaron la utilidad comercial de la estación de trabajo Unix y de los procesadores integrados en la impresora láser , el enrutador y productos similares.
En el mercado de minicomputadoras , compañías que incluían Celerity Computing , Pyramid Technology y Ridge Computers comenzaron a ofrecer sistemas diseñados según principios RISC o similares a RISC a principios de la década de 1980. [3] [4] [5] [6] [7] Pocos de estos diseños comenzaron utilizando microprocesadores RISC.
Las variedades de diseño de procesadores RISC incluyen el procesador ARC , el DEC Alpha, el AMD Am29000 , la arquitectura ARM, el Atmel AVR , Blackfin , Intel i860 , Intel i960 , LoongArch , Motorola 88000 , la arquitectura MIPS, PA-RISC, Power ISA, RISC-V , SuperH y SPARC. Los procesadores RISC se utilizan en supercomputadoras , como Fugaku . [8]
A varios sistemas, que se remontan a la década de 1960, se les ha atribuido el mérito de ser la primera arquitectura RISC, en parte debido a su uso del enfoque de carga y almacenamiento . [9] El término RISC fue acuñado por David Patterson del proyecto RISC de Berkeley , aunque ya habían aparecido conceptos algo similares antes. [10]
El CDC 6600 diseñado por Seymour Cray en 1964 utilizaba una arquitectura de carga y almacenamiento con sólo dos modos de direccionamiento (registro+registro y registro+constante inmediata) y 74 códigos de operación, siendo el ciclo de reloj básico 10 veces más rápido que el tiempo de acceso a la memoria. [11] Jack Dongarra dice que , en parte debido a la arquitectura de carga y almacenamiento optimizada del CDC 6600, puede considerarse un precursor de los sistemas RISC modernos, aunque se debieron superar una serie de otras barreras técnicas para el desarrollo de un sistema RISC moderno. [12]
Michael J. Flynn considera que el primer sistema RISC fue el diseño IBM 801 , [2] iniciado en 1975 por John Cocke y completado en 1980. El 801 se desarrolló a partir de un esfuerzo por construir un procesador de alta velocidad de 24 bits para utilizar como base para un conmutador telefónico digital . Para alcanzar su objetivo de conmutar 1 millón de llamadas por hora (300 por segundo), calcularon que la CPU requería un rendimiento del orden de 12 millones de instrucciones por segundo (MIPS), [13] en comparación con su máquina mainframe más rápida de la época, la 370/168 , que funcionaba a 3,5 MIPS. [14]
El diseño se basó en un estudio de la extensa colección de estadísticas de IBM recopiladas de sus clientes. Esto demostró que el código en entornos de alto rendimiento hacía un uso extensivo de los registros del procesador y que a menudo se quedaban sin ellos. Esto sugería que los registros adicionales mejorarían el rendimiento. Además, notaron que los compiladores generalmente ignoraban la gran mayoría de las instrucciones disponibles, especialmente los modos de direccionamiento ortogonal. En cambio, seleccionaban la versión más rápida de cualquier instrucción dada y luego construían pequeñas rutinas usándola. Esto sugería que la mayoría de las instrucciones podrían eliminarse sin afectar el código resultante. Estas dos conclusiones funcionaron en conjunto; eliminar instrucciones permitiría que los códigos de operación de instrucción fueran más cortos, liberando bits en la palabra de instrucción que luego podrían usarse para seleccionar entre un conjunto más grande de registros. [13]
El programa de conmutación telefónica se canceló en 1975, pero para entonces el equipo había demostrado que el mismo diseño ofrecería importantes mejoras de rendimiento ejecutando prácticamente cualquier código. En simulaciones, demostraron que un compilador ajustado para utilizar registros siempre que fuera posible ejecutaría el código aproximadamente tres veces más rápido que los diseños tradicionales. Algo sorprendente fue que el mismo código se ejecutaría aproximadamente un 50% más rápido incluso en las máquinas existentes debido al uso mejorado de los registros. En la práctica, su compilador PL/8 experimental, una versión ligeramente reducida de PL/I , produjo de manera consistente código que se ejecutaba mucho más rápido en sus mainframes existentes. [13]
En 1981 se produjo una versión de 32 bits del 801 en un solo chip, el IBM ROMP , que significaba "Microprocesador de Investigación OPD [División de Productos de Oficina]". [15] Esta CPU fue diseñada para tareas "mini" y se utilizó en interfaces periféricas y controladores de canal en computadoras IBM posteriores. También se utilizó como CPU en el IBM RT PC en 1986, que resultó ser un fracaso comercial. [16] Aunque el 801 no tuvo un uso generalizado en su forma original, inspiró muchos proyectos de investigación, incluidos los de IBM que eventualmente conducirían a la arquitectura IBM POWER . [17] [18]
A finales de los años 70, el 801 ya era muy conocido en la industria. Esto coincidió con las nuevas técnicas de fabricación que permitían la llegada al mercado de chips más complejos. El Zilog Z80 de 1976 tenía 8.000 transistores, mientras que el Motorola 68000 (68k) de 1979 tenía 68.000. Estos diseños más nuevos generalmente utilizaban su nueva complejidad para ampliar el conjunto de instrucciones y hacerlo más ortogonal. La mayoría, como el 68k, utilizaban microcódigo para ello, leyendo instrucciones y volviéndolas a implementar como una secuencia de instrucciones internas más sencillas. En el 68k, se utilizaba un tercio completo de los transistores para esta microcodificación. [19]
En 1979, David Patterson fue enviado a un año sabático de la Universidad de California, Berkeley, para ayudar al equipo de la costa oeste de DEC a mejorar el microcódigo VAX. Patterson quedó impresionado por la complejidad del proceso de codificación y concluyó que era insostenible. [20] Primero escribió un artículo sobre las formas de mejorar la microcodificación, pero luego cambió de opinión y decidió que el microcódigo en sí era el problema. Con la financiación del Programa VLSI de DARPA , Patterson inició el proyecto RISC de Berkeley . El programa, prácticamente desconocido hoy en día, condujo a una gran cantidad de avances en el diseño de chips, la fabricación e incluso los gráficos de computadora. Al considerar una variedad de programas de su variante BSD Unix , el equipo de Berkeley descubrió, al igual que IBM, que la mayoría de los programas no hacían uso de la gran variedad de instrucciones en el 68k. [21]
Los primeros trabajos de Patterson señalaron un problema importante con el enfoque tradicional de "cuanto más, mejor": incluso las instrucciones que eran fundamentales para el rendimiento general se retrasaban en su paso por el microcódigo. Si se eliminaba el microcódigo, los programas se ejecutaban más rápido. Y como el microcódigo, en última instancia, tomaba una instrucción compleja y la dividía en pasos, no había ninguna razón por la que el compilador no pudiera hacer lo mismo. Estos estudios sugirieron que, incluso sin otros cambios, se podía hacer un chip con 1 ⁄ 3 menos transistores que funcionara más rápido. [21] En el artículo original de RISC-I, señalaron: [22]
Saltarse este nivel adicional de interpretación parece mejorar el rendimiento y reducir el tamaño del chip. [22]
También se descubrió que, en las implementaciones microcodificadas de ciertas arquitecturas, las operaciones complejas tendían a ser más lentas que una secuencia de operaciones más simples que hicieran lo mismo. Esto se debía en parte al hecho de que muchos diseños se hacían a toda prisa, con poco tiempo para optimizar o ajustar cada instrucción; sólo se optimizaban las que se usaban con más frecuencia, y una secuencia de esas instrucciones podía ser más rápida que una instrucción menos ajustada que realizara una operación equivalente a esa secuencia. Un ejemplo infame fue la instrucción VAXINDEX
. [23]
El trabajo de Berkeley también reveló una serie de puntos adicionales. Entre ellos estaba el hecho de que los programas dedicaban una cantidad significativa de tiempo a realizar llamadas y retornos de subrutinas , y parecía que existía el potencial de mejorar el rendimiento general al acelerar estas llamadas. Esto llevó al diseño de Berkeley a seleccionar un método conocido como ventanas de registro que puede mejorar significativamente el rendimiento de las subrutinas, aunque a costa de cierta complejidad. [22] También observaron que la mayoría de las instrucciones matemáticas eran asignaciones simples; solo 1 ⁄ 3 de ellas realmente realizaban una operación como suma o resta. Pero cuando esas operaciones ocurrían, tendían a ser lentas. Esto llevó a poner mucho más énfasis en la unidad de datos aritméticos subyacente, a diferencia de los diseños anteriores en los que la mayor parte del chip estaba dedicada al control y al microcódigo. [21]
El Berkeley RISC resultante se basó en ganar rendimiento mediante el uso de canalización y un uso agresivo de ventanas de registro. [23] [22] En una CPU tradicional, uno tiene una pequeña cantidad de registros y un programa puede usar cualquier registro en cualquier momento. En una CPU con ventanas de registro, hay una gran cantidad de registros, por ejemplo, 128, pero los programas solo pueden usar una pequeña cantidad de ellos, por ejemplo, ocho, en un momento dado. Un programa que se limita a ocho registros por procedimiento puede realizar llamadas de procedimiento muy rápidas : la llamada simplemente mueve la ventana "hacia abajo" ocho, al conjunto de ocho registros utilizados por ese procedimiento, y el retorno mueve la ventana hacia atrás. [24] El proyecto RISC de Berkeley presentó el procesador RISC-I en 1982. Con tan solo 44.420 transistores (en comparación con los promedios de unos 100.000 en los diseños CISC más nuevos de la época), el RISC-I tenía solo 32 instrucciones y, sin embargo, superaba por completo a cualquier otro diseño de un solo chip, con un rendimiento estimado superior al del VAX. [22] A esto le siguió el RISC-II de 40.760 transistores y 39 instrucciones en 1983, que funcionaba tres veces más rápido que el RISC-I. [22]
A medida que el proyecto RISC comenzó a hacerse conocido en Silicon Valley , un proyecto similar comenzó en la Universidad de Stanford en 1981. Este proyecto MIPS surgió de un curso de posgrado de John L. Hennessy , produjo un sistema funcional en 1983 y podía ejecutar programas simples en 1984. [25] El enfoque MIPS enfatizó un ciclo de reloj agresivo y el uso de la tubería, asegurándose de que pudiera ejecutarse lo más "completo" posible. [25] El sistema MIPS fue seguido por el MIPS-X y en 1984 Hennessy y sus colegas formaron MIPS Computer Systems para producir el diseño comercialmente. [25] [26] La empresa resultó en una nueva arquitectura que también se llamó MIPS y el microprocesador R2000 en 1985. [26]
La filosofía general del concepto RISC fue ampliamente comprendida en la segunda mitad de la década de 1980, y llevó a los diseñadores del MIPS-X a expresarlo de esta manera en 1987:
El objetivo de cualquier formato de instrucción debe ser: 1. decodificación simple, 2. decodificación simple y 3. decodificación simple. Cualquier intento de mejorar la densidad del código a expensas del rendimiento de la CPU debe ser ridiculizado en cada oportunidad. [27]
La competencia entre los enfoques RISC y CISC convencionales también fue tema de análisis teórico a principios de la década de 1980, lo que condujo, por ejemplo, a la ley de hierro del rendimiento del procesador .
Desde 2010, una nueva arquitectura de conjunto de instrucciones (ISA) estándar abierta , Berkeley RISC-V , se ha estado desarrollando en la Universidad de California, Berkeley, con fines de investigación y como una alternativa libre a las ISA propietarias. A partir de 2014, la versión 2 de la ISA de espacio de usuario está fija. [28] La ISA está diseñada para ser extensible desde un núcleo básico suficiente para un pequeño procesador integrado hasta el uso en supercomputadoras y computación en la nube con extensiones y coprocesadores definidos por el diseñador de chips y estándares. Se ha probado en diseño de silicio con el ROCKET SoC , que también está disponible como un generador de procesador de código abierto en el lenguaje CHISEL.
A principios de los años 1980, el concepto RISC estaba rodeado de importantes incertidumbres. Una de ellas tenía que ver con el uso de la memoria: una única instrucción de un procesador tradicional como el Motorola 68k podía escribirse como media docena de instrucciones RISC más sencillas. En teoría, esto podía ralentizar el sistema, ya que dedicaba más tiempo a buscar instrucciones en la memoria. Pero a mediados de los años 1980, los conceptos habían madurado lo suficiente como para ser considerados comercialmente viables. [16] [25]
Los diseños comerciales RISC comenzaron a surgir a mediados de la década de 1980. El Acorn ARM1 apareció en abril de 1985, [29] el MIPS R2000 apareció en enero de 1986, seguido poco después por el PA-RISC de Hewlett-Packard en algunas de sus computadoras. [16] Mientras tanto, el esfuerzo de Berkeley se había vuelto tan conocido que eventualmente se convirtió en el nombre de todo el concepto. En 1987 Sun Microsystems comenzó a enviar sistemas con el procesador SPARC , basado directamente en el sistema Berkeley RISC-II. [16] [30] El Comité de Innovaciones en Computación y Comunicaciones del gobierno de los EE. UU. atribuye la aceptación de la viabilidad del concepto RISC al éxito del sistema SPARC. [16] Para 1989, muchas CPU RISC estaban disponibles; la competencia redujo su precio a $ 10 por MIPS en grandes cantidades, mucho menos costoso que el único Intel 80386 de origen . El rendimiento de la CPU RISC de IBM (disponible sólo en la PC RT ) era menos competitivo que el de otras, [31] pero el éxito de SPARC renovó el interés en IBM, que lanzó nuevos sistemas RISC en 1990 y en 1995 los procesadores RISC eran la base de una industria de servidores de 15 mil millones de dólares. [16]
A finales de los años 1980, los nuevos diseños RISC superaban con creces a todos los diseños tradicionales por un amplio margen. En ese momento, todos los demás proveedores comenzaron a desarrollar sus propios sistemas RISC. Entre ellos se encontraban el DEC Alpha , el AMD Am29000 , el Intel i860 e i960 , el Motorola 88000 , el IBM POWER y, un poco más tarde, el IBM/Apple/Motorola PowerPC . Muchos de ellos han desaparecido desde entonces debido a que a menudo no ofrecen ninguna ventaja competitiva sobre otros de la misma época. Los que quedan se utilizan a menudo solo en mercados especializados o como partes de otros sistemas; de los diseños de estos proveedores tradicionales, solo SPARC y POWER tienen un mercado restante significativo. [ cita requerida ]
La arquitectura ARM ha sido la ISA RISC más ampliamente adoptada, inicialmente destinada a ofrecer computación de escritorio de mayor rendimiento, a bajo costo y en un paquete térmico restringido, como en Acorn Archimedes , aunque aparece en las tablas de Super Computer League , su implementación inicial, relativamente de menor potencia y enfriamiento, pronto se adaptó a aplicaciones integradas, como el procesamiento de imágenes rasterizadas de impresoras láser. [32] Acorn, en asociación con Apple Inc y VLSI, creó ARM Ltd, en 1990, para compartir los costos de I+D y encontrar nuevos mercados para la ISA, que en asociación con TI, GEC, Sharp, Nokia, Oracle y Digital desarrollarían diseños RISC integrados y de bajo consumo, y apuntarían a esos segmentos de mercado, que en ese momento eran de nicho. Con el auge de la computación móvil, automotriz, de transmisión y de dispositivos inteligentes, ARM se convirtió en la ISA más utilizada, y la compañía estima que casi la mitad de todas las CPU enviadas en la historia han sido ARM. [33]
La confusión en torno a la definición de RISC derivada de la formulación del término, junto con la tendencia a categorizar de manera oportunista las arquitecturas de procesador con relativamente pocas instrucciones (o grupos de instrucciones) como arquitecturas RISC, condujo a intentos de definir RISC como una filosofía de diseño. Un intento de hacerlo se expresó de la siguiente manera:
Un procesador RISC tiene un conjunto de instrucciones diseñado para una ejecución eficiente por parte de un procesador canalizado y para la generación de código por parte de un compilador optimizador.
— Michael Slater, Informe sobre microprocesadores [34]
Un malentendido común de la frase "ordenador con conjunto de instrucciones reducido" es que las instrucciones simplemente se eliminan, lo que da como resultado un conjunto de instrucciones más pequeño. [35] De hecho, con el paso de los años, los conjuntos de instrucciones RISC han crecido en tamaño, y hoy en día muchos de ellos tienen un conjunto de instrucciones más grande que muchas CPU CISC. [36] [37] Algunos procesadores RISC como el PowerPC tienen conjuntos de instrucciones tan grandes como el IBM System/370 CISC , por ejemplo; por el contrario, el DEC PDP-8 (claramente un CPU CISC porque muchas de sus instrucciones involucran múltiples accesos a memoria) tiene solo 8 instrucciones básicas y algunas instrucciones extendidas. [38] El término "reducido" en esa frase tenía la intención de describir el hecho de que la cantidad de trabajo que cualquier instrucción individual logra se reduce (como máximo un solo ciclo de memoria de datos) en comparación con las "instrucciones complejas" de las CPU CISC que pueden requerir docenas de ciclos de memoria de datos para ejecutar una sola instrucción. [39]
A veces se prefiere el término arquitectura de carga-almacenamiento .
Otra forma de analizar el debate RISC/CISC es considerar lo que se expone al compilador. En un procesador CISC, el hardware puede utilizar internamente registros y bits de bandera para implementar una única instrucción compleja como STRING MOVE
, pero ocultar esos detalles al compilador. Las operaciones internas de un procesador RISC están "expuestas al compilador", lo que da lugar al acrónimo 'Relegate Interesting Stuff to the Compiler' (Relegar cosas interesantes al compilador). [40] [41]
La mayoría de las arquitecturas RISC tienen instrucciones de longitud fija y una codificación simple, lo que simplifica considerablemente la lógica de búsqueda, decodificación y emisión. Este es uno de los principales objetivos del enfoque RISC. [22]
Parte de esto es posible sólo gracias a la transición contemporánea a formatos de 32 bits. Por ejemplo, en un programa típico, más del 30% de todas las constantes numéricas son 0 o 1, el 95% cabe en un byte y el 99% en un valor de 16 bits. [42] Cuando las computadoras se basaban en palabras de 8 o 16 bits, era difícil tener un valor inmediato combinado con el código de operación en una sola palabra de memoria, aunque ciertas instrucciones como el incremento y el decremento lo hacían implícitamente al usar un código de operación diferente. En contraste, una máquina de 32 bits tiene amplio espacio para codificar un valor inmediato, y al hacerlo se evita la necesidad de hacer una segunda lectura de memoria para captar el valor. Esta es la razón por la que muchos procesadores RISC permiten codificar una constante de 12 o 13 bits directamente en la palabra de instrucción. [22]
Suponiendo un área constante de 13 bits, como es el caso en los diseños MIPS y RISC, hay otros 19 bits disponibles para la codificación de instrucciones. Esto deja un amplio espacio para indicar tanto el código de operación como uno o dos registros. Las operaciones de registro a registro, principalmente matemáticas y lógicas, requieren suficientes bits para codificar los dos o tres registros que se utilizan. La mayoría de los procesadores utilizan el formato de tres operandos, de la forma A = B + C
, en cuyo caso se necesitan tres números de registros. Si el procesador tiene 32 registros, cada uno requiere un número de 5 bits, para 15 bits. Si uno de estos registros se reemplaza por un inmediato, todavía hay mucho espacio para codificar los dos registros restantes y el código de operación. Las instrucciones comunes que se encuentran en los sistemas de múltiples palabras, como INC
y DEC
, que reducen la cantidad de palabras que deben leerse antes de realizar la instrucción, son innecesarias en RISC, ya que se pueden realizar con un solo registro y el valor inmediato 1. [22]
El formato RISC-I original sigue siendo un ejemplo canónico del concepto. Utiliza 7 bits para el código de operación y una bandera de 1 bit para códigos condicionales, los siguientes 5 bits para el registro de destino y los siguientes cinco para el primer operando. Esto deja 14 bits, el primero de los cuales indica si los siguientes 13 contienen un valor inmediato o utiliza solo cinco de ellos para indicar un registro para el segundo operando. [22] Un ejemplo más complejo es la codificación MIPS, que utilizaba solo 6 bits para el código de operación, seguido de dos registros de 5 bits. Los 16 bits restantes se podían utilizar de dos maneras, una como un valor inmediato de 16 bits o como un valor de desplazamiento de 5 bits (utilizado solo en operaciones de desplazamiento, de lo contrario cero) y los 6 bits restantes como una extensión del código de operación. En el caso de operaciones aritméticas de registro a registro, el código de operación era 0 y los últimos 6 bits contenían el código real; aquellos que usaban un valor inmediato usaban el campo de código de operación normal al frente. [43]
Un inconveniente de las instrucciones de 32 bits es la densidad de código reducida, que es una característica más adversa en la informática integrada que en los mercados de estaciones de trabajo y servidores para los que se diseñaron originalmente las arquitecturas RISC. Para abordar este problema, varias arquitecturas, como SuperH (1992), ARM thumb (1994), [44] MIPS16e (2004), Power Variable Length Encoding ISA (2006), RISC-V y Adapteva Epiphany , tienen un conjunto de instrucciones comprimidas opcionales, cortas y con características reducidas . Generalmente, estas instrucciones exponen un número menor de registros y menos bits para valores inmediatos, y a menudo utilizan un formato de dos operandos para eliminar un número de registro de las instrucciones. Un formato de dos operandos en un sistema con 16 registros requiere 8 bits para números de registro, dejando otros 8 para un código de operación u otros usos. El SH5 también sigue este patrón, aunque ha evolucionado en la dirección opuesta, habiendo añadido instrucciones más largas de 32 bits a una codificación original de 16 bits.
El aspecto más característico de RISC es la ejecución de al menos una instrucción por ciclo . [31] La operación de ciclo único se describe como "la ejecución rápida de funciones simples que dominan el flujo de instrucciones de una computadora", buscando así entregar un rendimiento promedio cercano a una instrucción por ciclo para cualquier flujo de instrucciones único. [45]
Otras características de las arquitecturas RISC incluyen:
También es más probable que los diseños RISC incluyan un modelo de memoria Harvard , donde el flujo de instrucciones y el flujo de datos están conceptualmente separados; esto significa que modificar la memoria donde se almacena el código podría no tener ningún efecto en las instrucciones ejecutadas por el procesador (porque la CPU tiene un caché de instrucciones y datos separados ), al menos hasta que se emita una instrucción de sincronización especial; los procesadores CISC que tienen cachés de instrucciones y datos separados generalmente los mantienen sincronizados automáticamente, para compatibilidad con versiones anteriores de procesadores más antiguos.
Muchos de los primeros diseños RISC también compartían la característica de tener una ranura de retardo de bifurcación , un espacio de instrucciones que sigue inmediatamente a un salto o bifurcación. La instrucción en este espacio se ejecuta, ya sea que se realice o no la bifurcación (en otras palabras, el efecto de la bifurcación se retrasa). Esta instrucción mantiene la ALU de la CPU ocupada durante el tiempo adicional que normalmente se necesita para realizar una bifurcación. Hoy en día, la ranura de retardo de bifurcación se considera un desafortunado efecto secundario de una estrategia particular para implementar algunos diseños RISC, y los diseños RISC modernos generalmente lo eliminan (como PowerPC y versiones más recientes de SPARC y MIPS). [ cita requerida ]
Algunos aspectos atribuidos a los primeros diseños etiquetados como RISC alrededor de 1975 incluyen las observaciones de que los compiladores con restricciones de memoria de la época a menudo no podían aprovechar las características destinadas a facilitar la codificación de ensamblaje manual , y que los modos de direccionamiento complejos requieren muchos ciclos para realizarse debido a los accesos de memoria adicionales requeridos. Se argumentó [ ¿por quién? ] que tales funciones se realizarían mejor con secuencias de instrucciones más simples si esto pudiera producir implementaciones lo suficientemente pequeñas como para dejar espacio para muchos registros, reduciendo el número de accesos lentos a la memoria. En estos diseños simples, la mayoría de las instrucciones son de longitud uniforme y estructura similar, las operaciones aritméticas están restringidas a los registros de la CPU y solo las instrucciones de carga y almacenamiento separadas acceden a la memoria. Estas propiedades permiten un mejor equilibrio de las etapas de la canalización que antes, lo que hace que las canalizaciones RISC sean significativamente más eficientes y permitan frecuencias de reloj más altas .
Otro impulso tanto de RISC como de otros diseños provino de mediciones prácticas en programas del mundo real. Andrew Tanenbaum resumió muchas de ellas, demostrando que los procesadores a menudo tenían constantes inmediatas de gran tamaño. Por ejemplo, demostró que el 98% de todas las constantes de un programa cabían en 13 bits , aunque muchos diseños de CPU dedicaban 16 o 32 bits para almacenarlas. Esto sugiere que, para reducir la cantidad de accesos a la memoria, una máquina de longitud fija podría almacenar constantes en bits no utilizados de la propia palabra de instrucción, de modo que estuvieran listas inmediatamente cuando la CPU las necesitara (de forma muy similar al direccionamiento inmediato en un diseño convencional). Esto requería códigos de operación pequeños para dejar espacio para una constante de tamaño razonable en una palabra de instrucción de 32 bits.
Dado que muchos programas del mundo real pasan la mayor parte de su tiempo ejecutando operaciones simples, algunos investigadores decidieron centrarse en hacer que esas operaciones fueran lo más rápidas posible. La velocidad de reloj de una CPU está limitada por el tiempo que tarda en ejecutar la suboperación más lenta de cualquier instrucción; la disminución de ese tiempo de ciclo a menudo acelera la ejecución de otras instrucciones. [46] El enfoque en las "instrucciones reducidas" llevó a que la máquina resultante se llamara "computadora de conjunto de instrucciones reducidas" (RISC). El objetivo era hacer que las instrucciones fueran tan simples que pudieran canalizarse fácilmente , para lograr un rendimiento de reloj único a altas frecuencias . Esto contrastaba con los diseños CISC cuyas "operaciones aritméticas cruciales y transferencias de registros" se consideraban difíciles de canalizar. [47]
Más tarde, se observó que una de las características más significativas de los procesadores RISC era que la memoria externa solo era accesible mediante una instrucción de carga o almacenamiento . Todas las demás instrucciones se limitaban a los registros internos. Esto simplificó muchos aspectos del diseño de procesadores: permitió que las instrucciones tuvieran una longitud fija, simplificó las secuencias de comandos y aisló la lógica para lidiar con el retraso en completar un acceso a la memoria (error de caché, etc.) a solo dos instrucciones. Esto llevó a que los diseños RISC se conocieran como arquitecturas de carga y almacenamiento . [48]
Algunas CPU han sido diseñadas específicamente para tener un conjunto muy pequeño de instrucciones, pero estos diseños son muy diferentes de los diseños RISC clásicos, por lo que se les han dado otros nombres, como computadora de conjunto de instrucciones mínimo (MISC) o arquitectura activada por transporte (TTA).
Las arquitecturas RISC tradicionalmente han tenido poco éxito en los mercados de PC de escritorio y servidores básicos, donde las plataformas basadas en x86 siguen siendo la arquitectura de procesador dominante. Sin embargo, esto puede cambiar, ya que se están desarrollando procesadores basados en ARM para sistemas de mayor rendimiento. [49] Fabricantes como Cavium , AMD y Qualcomm han lanzado procesadores de servidor basados en la arquitectura ARM. [50] [51] ARM se asoció además con Cray en 2017 para producir una supercomputadora basada en ARM. [52] En el escritorio, Microsoft anunció que planeaba soportar la versión para PC de Windows 10 en dispositivos basados en Qualcomm Snapdragon en 2017 como parte de su asociación con Qualcomm. Estos dispositivos soportarán aplicaciones de Windows compiladas para x86 de 32 bits a través de un emulador de procesador x86 que traduce el código x86 de 32 bits al código ARM64 . [53] [54] Apple anunció que hará la transición de sus computadoras de escritorio y portátiles Mac de procesadores Intel a SoC basados en ARM64 desarrollados internamente llamados Apple silicon ; Las primeras computadoras de este tipo, que utilizan el procesador Apple M1 , se lanzaron en noviembre de 2020. [55] Las Mac con silicio de Apple pueden ejecutar binarios x86-64 con Rosetta 2 , un traductor de x86-64 a ARM64. [56]
Sin embargo, fuera del ámbito de los ordenadores de sobremesa, la arquitectura ARM RISC se utiliza ampliamente en teléfonos inteligentes, tabletas y muchas formas de dispositivos integrados. Si bien los primeros diseños RISC diferían significativamente de los diseños CISC contemporáneos, en 2000 las CPU de mayor rendimiento de la línea RISC eran casi indistinguibles de las CPU de mayor rendimiento de la línea CISC. [57] [58] [59]
Las arquitecturas RISC ahora se utilizan en una variedad de plataformas, desde teléfonos inteligentes y tabletas hasta algunas de las supercomputadoras más rápidas del mundo, como Fugaku , la más rápida en la lista TOP500 a noviembre de 2020 [actualizar], y Summit , Sierra y Sunway TaihuLight , las siguientes tres en esa lista. [60]
A principios del siglo XXI, la mayoría de los sistemas móviles y de gama baja dependían de arquitecturas RISC. [61] Algunos ejemplos incluyen:
Las arquitecturas RISC se han vuelto populares en los procesadores de código abierto y los microprocesadores de software , ya que son relativamente fáciles de implementar, lo que las hace adecuadas para implementaciones y prototipos de FPGA , por ejemplo. Algunos ejemplos incluyen:
En 2022, Steve Furber , John L. Hennessy , David A. Patterson y Sophie M. Wilson recibieron el premio Charles Stark Draper de la Academia Nacional de Ingeniería de los Estados Unidos por sus contribuciones a la invención, el desarrollo y la implementación de chips informáticos de conjunto de instrucciones reducido (RISC). [70] [71]
[...] el primer silicio se ejecutó el 26 de abril de 1985.
objetivo principal no era reducir el número de instrucciones, sino la complejidad
La línea entre RISC y CISC se ha vuelto más difusa con el paso de los años.
Apple ha anunciado oficialmente que cambiará los procesadores Intel por sus propios chips de la serie A basados en ARM en sus ordenadores Mac.
N.ª publicación de CISC vs. RISC (o qué es RISC, en realidad)