El 801 era un diseño de unidad central de procesamiento (CPU) experimental desarrollado por IBM durante la década de 1970. Se considera el primer diseño RISC moderno , que se basa en los registros del procesador para todos los cálculos y elimina los muchos modos de direccionamiento variantes que se encuentran en los diseños CISC . Desarrollado originalmente como el procesador de un conmutador telefónico , más tarde se utilizó como base para una minicomputadora y una serie de productos para su línea de mainframe . El diseño inicial fue un procesador de 24 bits ; que pronto fue reemplazado por 32 bits Las implementaciones de los mismos conceptos y el 801 original de 24 bits se usaron solo a principios de la década de 1980.
El 801 fue muy influyente en el mercado de las computadoras. Armado con enormes cantidades de datos de rendimiento, IBM pudo demostrar que el diseño simple podía superar fácilmente incluso los diseños de CPU clásicos más potentes, mientras que al mismo tiempo producía un código de máquina que era solo marginalmente más grande que las instrucciones CISC altamente optimizadas. La aplicación de estas mismas técnicas incluso a los procesadores existentes como el System / 370 generalmente también duplicó el rendimiento de esos sistemas. Esto demostró el valor del concepto RISC, y todos los sistemas futuros de IBM se basaron en los principios desarrollados durante el proyecto 801.
Por su trabajo en el 801, John Cocke recibió el Premio Turing en 1987, la Medalla Nacional de Tecnología en 1991 y la Medalla Nacional de la Ciencia en 1994.
Historia
En 1974, IBM comenzó a examinar la posibilidad de construir un conmutador telefónico para manejar 300 llamadas por segundo. Calcularon que cada llamada requeriría 20,000 instrucciones para completar, y cuando una sobrecarga de tiempo adicional y otras consideraciones, dicha máquina requeriría un rendimiento de aproximadamente 12 MIPS. [1] Esto requeriría un avance significativo en el desempeño; su máquina actual de primera línea, el IBM System / 370 Modelo 168 de finales de 1972, ofrecía alrededor de 3 MIPS. [2]
El grupo que trabaja en este proyecto en el Centro de Investigación Thomas J. Watson , incluido John Cocke , diseñó un procesador para este propósito. Para alcanzar el rendimiento requerido, consideraron el tipo de operaciones que requería una máquina de este tipo y eliminaron las que no eran apropiadas. Esto llevó a la eliminación de una unidad de punto flotante, por ejemplo, que no sería necesaria en esta aplicación. Más críticamente, también eliminaron muchas de las instrucciones que funcionaban con datos en la memoria principal y dejaron solo aquellas instrucciones que funcionaron en los registros internos del procesador , ya que eran mucho más rápidas de usar (efectivamente, tiempo cero) y el código simple en un teléfono. Switch podría estar escrito para usar solo estos tipos de instrucciones. El resultado de este trabajo fue un diseño conceptual para un procesador simplificado con el rendimiento requerido. [1]
El proyecto del conmutador telefónico se canceló en 1975, pero el equipo había hecho un progreso considerable en el concepto y en octubre IBM decidió continuarlo como un diseño de propósito general. Sin ningún proyecto obvio al que adjuntarlo, el equipo decidió llamarlo "801" por el edificio en el que trabajaban. Para el rol de propósito general, el equipo comenzó a considerar programas del mundo real que se ejecutarían en una minicomputadora típica. . IBM había recopilado enormes cantidades de datos estadísticos sobre el rendimiento de cargas de trabajo del mundo real en sus máquinas y estos datos demostraron que más de la mitad del tiempo en un programa típico se dedicaba a ejecutar solo cinco instrucciones; cargar valor de la memoria, almacenar el valor en la memoria, bifurcar, comparar números de punto fijo y agregar números de punto fijo. Esto sugirió que el mismo diseño simplificado funcionaría tan bien para una minicomputadora de propósito general como para un interruptor de propósito especial. [3]
Esta conclusión fue contraria al diseño de procesador contemporáneo, que se basaba en el concepto de usar microcódigo . IBM fue uno de los primeros en hacer un uso generalizado de esta técnica como parte de su famosa serie System / 360 . Los 360 y 370 venían en una variedad de niveles de rendimiento que ejecutaban el mismo código de lenguaje de máquina. En las máquinas de gama alta, muchas de estas instrucciones se implementaron directamente en el hardware, mientras que las máquinas de gama baja podrían simular esas instrucciones utilizando una secuencia de otras instrucciones. Esto permitió que una sola interfaz binaria de aplicación se ejecutara en toda la línea y permitió a los usuarios estar seguros de que si alguna vez se necesitara más rendimiento, podrían pasar a una máquina más rápida sin ningún otro cambio. [4]
El microcódigo permitía que un procesador simple ofreciera muchas instrucciones, que habían sido utilizadas por los diseñadores para implementar una amplia variación de modos de direccionamiento . Por ejemplo, una instrucción como ADD
podría tener una docena de versiones, una que agrega dos números en los registros internos, una que agrega un registro a un valor en la memoria, una que agrega dos valores de la memoria, etc. variación que necesitaban para cualquier tarea en particular. El procesador leería esa instrucción y usaría un microcódigo para dividirla en una serie de instrucciones internas. Por ejemplo, la adición de dos números en la memoria podría implementarse cargando esos dos números en registros, agregándolos y luego volviéndolos a guardar. [3]
El equipo notó un efecto secundario de este concepto; cuando se enfrentan a la plétora de posibles versiones de una instrucción dada, los autores del compilador casi siempre elegirían una sola versión. Este fue casi siempre el que se implementó en hardware en las máquinas de gama baja. Eso aseguró que el código de máquina generado por el compilador se ejecutara lo más rápido posible en toda la línea. Si bien el uso de otras versiones de instrucciones podría ejecutarse incluso más rápido en una máquina que implementó otras versiones de la instrucción en hardware, la complejidad de saber cuál elegir en una lista de máquinas en constante cambio hizo que esto fuera extremadamente poco atractivo, y los autores del compilador las ignoraron en gran medida. posibilidades. [3]
Como resultado, la mayoría de las instrucciones disponibles en el conjunto de instrucciones nunca se usaron en programas compilados. Y fue aquí donde el equipo realizó la realización clave del proyecto 801:
La imposición de microcódigo entre una computadora y sus usuarios impone una sobrecarga costosa en la ejecución de las instrucciones ejecutadas con mayor frecuencia. [3]
El microcódigo tarda un tiempo distinto de cero en examinar la instrucción antes de ejecutarla. El mismo procesador subyacente con el microcódigo eliminado eliminaría esta sobrecarga y ejecutaría esas instrucciones más rápido. Y dado que el microcódigo esencialmente ejecutaba pequeñas subrutinas dedicadas a una implementación de hardware en particular, finalmente estaba realizando la misma tarea básica que el compilador, implementando instrucciones de nivel superior como una secuencia de instrucciones específicas de la máquina. Simplemente eliminar el microcódigo e implementarlo en el compilador podría resultar en una máquina más rápida. [3]
Una preocupación era que los programas escritos para tal máquina ocuparían más memoria; Algunas tareas que podrían lograrse con una sola instrucción en el 370 tendrían que expresarse como instrucciones múltiples en el 801. Por ejemplo, agregar dos números de la memoria requeriría dos instrucciones de carga a registro, una adición de registro a registro y luego un almacenamiento en memoria. Esto potencialmente podría ralentizar el sistema en general si tuviera que dedicar más tiempo a leer las instrucciones de la memoria de lo que se necesitaba anteriormente para decodificarlas. A medida que continuaron trabajando en el diseño y mejoraron sus compiladores, encontraron que la duración general del programa seguía cayendo, llegando a ser aproximadamente la misma longitud que los escritos para el 370. [5]
La arquitectura propuesta inicialmente era una máquina con dieciséis registros de 24 bits y sin memoria virtual . [6] [7] Usó un formato de dos operandos en la instrucción, por lo que las instrucciones eran generalmente de la forma A = A + B
. La CPU resultante estaba operativa en el verano de 1980 y se implementó utilizando la tecnología de componentes discretos MECL-10K de Motorola [8] en grandes placas personalizadas envueltas en cables. La CPU tenía una frecuencia de 66 ns ciclos (aproximadamente 15,15 MHz) y podía calcular a la rápida velocidad de aproximadamente 15 MIPS .
La arquitectura 801 se utilizó en una variedad de dispositivos IBM, incluidos los controladores de canal para sus mainframes S / 370 (como el IBM 3090 ), [9] : 377 varios dispositivos de red y, finalmente, el propio núcleo del mainframe IBM 9370 . [10] La versión original de la arquitectura 801 fue la base para la arquitectura del microprocesador IBM ROMP [9] : 378 utilizado en la computadora de estación de trabajo IBM RT PC y varias computadoras experimentales de IBM Research .
Modificaciones posteriores
Habiendo sido diseñado originalmente para un sistema de función limitada, el diseño del 801 carecía de una serie de características que se ven en máquinas más grandes. Entre estos se destacó la falta de soporte de hardware para la memoria virtual , que no era necesaria para la función de controlador y se había implementado en software en los primeros sistemas 801 que lo necesitaban. Para un uso más generalizado, el soporte de hardware era una característica imprescindible. Además, en la década de 1980, el mundo de la informática en su conjunto se estaba moviendo hacia sistemas de 32 bits , y existía el deseo de hacer lo mismo con el 801. [11]
Pasar a un formato de 32 bits tuvo otra ventaja significativa. En la práctica, se encontró que el formato de dos operandos era difícil de usar en el código matemático típico. Idealmente, ambos operandos de entrada permanecerían en registros donde podrían reutilizarse en operaciones posteriores, pero como la salida de la operación sobrescribía a uno de ellos, a menudo se daba el caso de que uno de los valores tenía que volver a cargarse desde la memoria. . Al pasar a un formato de 32 bits, los bits adicionales en las palabras de instrucción permitieron especificar un registro adicional, de modo que la salida de tales operaciones podría dirigirse a un registro separado. La palabra de instrucción más grande también permitió aumentar el número de registros de dieciséis a treinta y dos, un cambio que había sido claramente sugerido por el examen del código 801. A pesar de la expansión de las palabras de instrucción de 24 a 32 bits, los programas no crecieron en el 33% correspondiente debido a cargas evitadas y guardados debido a estos dos cambios. [11]
Otras adiciones deseables incluyen instrucciones para trabajar con datos de cadena que se codificaron en formato "empaquetado" con varios caracteres ASCII en una sola palabra de memoria, y adiciones para trabajar con decimales codificados en binario , incluido un sumador que podría transportar números decimales de cuatro bits. . [11]
Cuando la nueva versión del 801 se ejecutó como un simulador en el 370, el equipo se sorprendió al descubrir que el código compilado en el 801 y ejecutado en el simulador a menudo se ejecutaba más rápido que el mismo código fuente compilado directamente en el código de máquina 370 utilizando el Compilador PL / 1 de 370 . [12] Cuando portaron su lenguaje experimental "PL.8" de nuevo al 370 y compilaron aplicaciones usándolo, también corrieron más rápido que el código PL / 1 existente, hasta tres veces más rápido. Esto se debió a que el compilador tomó decisiones similares a las de RISC sobre cómo compilar el código en registros internos, optimizando así tantos accesos a la memoria como fuera posible, lo que sería costoso en el 801, lo que llevó a una reutilización de registros mucho mejor y, por lo tanto, más alta. rendimiento incluso en un procesador CISC. [12]
Proyecto America
A principios de la década de 1980, las lecciones aprendidas con el 801 se volvieron a poner en el nuevo diseño de "América". Se trataba de un conjunto de procesadores de tres chips que incluía un procesador de instrucciones que busca y decodifica instrucciones, un procesador de punto fijo que comparte funciones con el procesador de instrucciones y un procesador de punto flotante para aquellos sistemas que lo requieran. Diseñado por el equipo 801, el diseño final se envió a la oficina de IBM en Austin, que lo desarrolló en el sistema IBM RS / 6000 . El RS / 6000 corriendo a 25 MHz fue una de las máquinas más rápidas de su época. Superó a otras máquinas RISC de dos a tres veces en pruebas comunes y superó trivialmente a los sistemas CISC más antiguos. [10]
Después del RS / 6000, la compañía centró su atención en una versión de los conceptos 801 que podría fabricarse de manera eficiente a varias escalas. El resultado fue la arquitectura del conjunto de instrucciones IBM POWER y la rama de PowerPC . Por su trabajo en el 801, John Cocke recibió el Premio Turing en 1987, la Medalla Nacional de Tecnología en 1991 y la Medalla Nacional de la Ciencia en 1994. [13]
Michael J. Flynn ve el diseño del IBM 801 como el primer sistema informático de conjunto de instrucciones reducido (RISC). [14]
Referencias
Citas
- ↑ a b Cocke y Markstein , 1990 , p. 4.
- ^ Savard, John. "En el 370/165 y el 360/85" .
- ↑ a b c d e Cocke y Markstein 1990 , p. 5.
- ^ Sack, Harald (7 de abril de 2016). "microcódigo en el sistema 360" . SciHub .
- ^ Cocke y Markstein 1990 , págs. 6-7.
- ^ "La minicomputadora 801: una descripción general" (PDF) . 8 de octubre de 1976. p. 9.
- ^ "Principios de funcionamiento del sistema 801" (PDF) . 16 de enero de 1976.
- ^ Radin, 1982 .
- ^ a b Dewar, Robert BK; Smosna, Matthew (1990). Microprocesadores: la visión de un programador . McGraw-Hill.
- ↑ a b Cocke y Markstein , 1990 , p. 9.
- ↑ a b c Cocke y Markstein 1990 , p. 7.
- ↑ a b Cocke y Markstein , 1990 , p. 8.
- ^ "NSTMF" . NSTMF . Consultado el 12 de mayo de 2020 .
- ^ Flynn, Michael J. (1995). Arquitectura informática: diseño de procesadores en paralelo y en canalización . págs. 54–56. ISBN 0867202041.
Bibliografía
- Cocke, John; Markstein, Victoria (enero de 1990). "La evolución de la tecnología RISC en IBM" (PDF) . Revista de investigación y desarrollo de IBM . 34 (1): 4–11. doi : 10.1147 / rd.341.0004 .
- Cocke, John (marzo de 1988). "La búsqueda de rendimiento en procesadores científicos" . Comunicaciones de la ACM . 31 (3): 252. doi : 10.1145 / 1283920.1283945 . ISBN 978-1-4503-1049-9.
- Radin, G. (1982). El miniordenador 801 . ASPLOS -I. Actas del primer simposio internacional sobre soporte arquitectónico para lenguajes de programación y sistemas operativos . págs. 39–47. doi : 10.1145 / 800050.801824 . ISBN 0-89791-066-4.
Otras lecturas
- "La alteración de la arquitectura de la computadora es una forma de aumentar el rendimiento, sugiere investigadores de IBM". Electronics V. 49, N. 25 (23 de diciembre de 1976), págs. 30–31.
- V. McLellan: "IBM Mini una salida radical". Datamation V. 25, N. 11 (octubre de 1979), págs. 53–55.
- Dewar, Robert BK; Smosna, Matthew (1990). Microprocesadores: la visión de un programador . McGraw-Hill. págs. 258-264.
- Tabak, Daniel (1987). Arquitectura RISC . Prensa de Estudios de Investigación. págs. 69–72.
enlaces externos
- El miniordenador 801: descripción general
- Principios de funcionamiento del IBM System 801, versión 2
- Definición del subsistema de E / S 801
- Archivos de IBM: Breve historia de RISC, IBM RS / 6000 y IBM eServer pSeries