IBM 801

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

El 801 fue un diseño de unidad de procesamiento central (CPU) experimental desarrollado por IBM durante la década de 1970. Se considera que es el primer diseño RISC moderno, que se basa en los registros del procesador para todos los cálculos y elimina las muchas variantes de modos de direccionamiento que se encuentran en los diseños CISC. Originalmente desarrollado como procesador para un conmutador telefónico, luego se usó 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 implementaciones de 32 bits de los mismos conceptos y el 801 original de 24 bits se usó solo hasta principios de la década de 1980.

El 801 fue extremadamente influyente en el mercado de las computadoras. Armado con grandes 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 fue reconocido con varios premios y medallas, incluido el Premio Turing en 1987, la Medalla Nacional de Tecnología en 1991 y la Medalla Nacional de Ciencias en 1994.

Historia

Concepto original

En 1974, IBM comenzó a examinar la posibilidad de construir un conmutador telefónico para gestionar un millón de llamadas por hora, o unas 300 llamadas por segundo. Calcularon que cada llamada requeriría 20,000 instrucciones para completarse, y cuando se agregaba la sobrecarga de tiempo y otras consideraciones, dicha máquina requería un rendimiento de alrededor de 12 MIPS. Esto requeriría un avance significativo en el rendimiento; su máquina actual de primera línea, la IBM System/370 Model 168 de finales de 1972, ofrecía alrededor de 3 MIPS.

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 condujo a la eliminación de una unidad de coma flotante, por ejemplo, que no sería necesaria en esta aplicación. Más importante aún, también eliminaron muchas de las instrucciones que funcionaban con los datos en la memoria principal y dejaron solo aquellas instrucciones que funcionaban con los registros del procesador interno, ya que eran mucho más rápidos de usar y el código simple en un interruptor telefónico podía escribirse para usar. solo este tipo de instrucciones. El resultado de este trabajo fue un diseño conceptual de un procesador simplificado con el rendimiento requerido.

El proyecto del interruptor 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" después del edificio en el que trabajaban. Para la función 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 las 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 realizar solo cinco instrucciones: cargar valor de la memoria, almacenar valor en la memoria, ramificar, comparar números de punto fijo y sumar números de punto fijo. Esto sugirió que el mismo diseño de procesador simplificado funcionaría tan bien para una minicomputadora de uso general como para un interruptor de propósito especial.

Razones contra el uso de microcódigo

Esta conclusión iba en contra del diseño de procesador contemporáneo, que se basaba en el concepto de usar microcódigo. IBM estuvo entre los primeros en hacer un uso generalizado de esta técnica como parte de su 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, como una unidad de punto flotante, mientras que las máquinas de gama baja podían simular esas instrucciones usando 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 clientes sentirse seguros de que, si alguna vez necesitaban más rendimiento, podrían pasar a una máquina más rápida sin ningún otro cambio.

El microcódigo permitió que un procesador simple ofreciera muchas instrucciones, que habían sido utilizadas por los diseñadores para implementar una amplia variedad de modos de direccionamiento. Por ejemplo, una instrucción como ADD puede tener una docena de versiones, una que suma dos números en registros internos, otra que suma un registro a un valor en la memoria, otra que suma dos valores de la memoria, etc. Esto permitió al programador seleccionar la variación exacta 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 guardándolos nuevamente.

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 eligen una sola versión. Este fue casi siempre el que se implementó en el hardware de las máquinas de gama baja. Eso aseguró que el código de máquina generado por el compilador se ejecutaría 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 de compiladores ignoraron en gran medida estos posibilidades.

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 hizo la realización clave del proyecto 801:

Imposing microcode between a computer and its users imposes an expensive overhead in performing the most frequently executed instructions.

Microcode 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. Dado que el microcódigo esencialmente ejecutaba pequeñas subrutinas dedicadas a una implementación de hardware en particular, en última instancia, realizaba la misma tarea básica que el compilador, implementaba 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.

Una de las preocupaciones era que los programas escritos para una máquina de este tipo ocuparían más memoria; algunas tareas que podrían realizarse 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 para registrar, una suma de registro para registrar, y luego un almacenamiento en memoria. Esto podría ralentizar potencialmente el sistema en general si tuviera que pasar más tiempo leyendo instrucciones de la memoria que antes para decodificarlas. A medida que continuaron trabajando en el diseño y mejoraron sus compiladores, descubrieron que la longitud total del programa continuaba disminuyendo, llegando a tener aproximadamente la misma longitud que los escritos para el 370.

Primeras implementaciones

La arquitectura propuesta inicialmente era una máquina con dieciséis registros de 24 bits y sin memoria virtual. Usó un formato de dos operandos en la instrucción, por lo que las instrucciones generalmente tenían la forma A = A + B, a diferencia del formato de tres operandos, A = B + C< /código>. La CPU resultante estuvo operativa en el verano de 1980 y se implementó utilizando la tecnología de componentes discretos MECL-10K de Motorola en placas personalizadas grandes envueltas en cables. La CPU tenía una velocidad de reloj de 66 ns (aproximadamente 15,15 MHz) y podía calcular a una velocidad rápida de aproximadamente 15 MIPS.

La arquitectura 801 se usó en una variedad de dispositivos de IBM, incluidos los controladores de canal para sus mainframes S/370 (como el IBM 3090), varios dispositivos de red y como una unidad de ejecución de microcódigo vertical en los procesadores 9373 y 9375 de la familia de mainframe IBM 9370. La versión original de la arquitectura 801 fue la base para la arquitectura del microprocesador IBM ROMP utilizado en la estación de trabajo IBM RT PC y varias computadoras experimentales de IBM Research. Un derivado de la arquitectura 801 con direccionamiento de 32 bits llamado Iliad estaba destinado a servir como el procesador principal del fallido proyecto de sistema de rango medio Fort Knox.

Modificaciones posteriores

Después de haber sido diseñado originalmente para un sistema de funciones limitadas, el diseño del 801 carecía de una serie de características que se ven en máquinas más grandes. Cabe destacar entre estos 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 el software de los primeros sistemas 801 que la 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 movía hacia los sistemas de 32 bits y había un deseo de hacer lo mismo con el 801.

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 uno de ellos, a menudo ocurría 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 pudiera 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 claramente había sido 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 el 33% correspondiente debido a las cargas y ahorros evitados por estos dos cambios.

Otras adiciones deseables incluyen instrucciones para trabajar con cadenas de datos codificadas en "empaquetado" formato con varios caracteres ASCII en una sola palabra de memoria, y adiciones para trabajar con decimal codificado en binario, incluido un sumador que podría transportar números decimales de cuatro bits.

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 la máquina 370 código utilizando el compilador PL/1 de 370. Cuando portaron su "PL.8" de vuelta al 370 y las aplicaciones compiladas usándolo, también se ejecutaron 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 RISC sobre cómo compilar el código en registros internos, optimizando así la mayor cantidad posible de accesos a la memoria. Estos eran tan caros en el 370 como en el 801, pero este costo normalmente estaba oculto por la simplicidad de una sola línea de código CISC. El compilador PL.8 fue mucho más agresivo a la hora de evitar cargas y guardados, lo que resultó en un mayor rendimiento incluso en un procesador CISC.

Los proyectos Cheetah, Panther y América

A principios de la década de 1980, las lecciones aprendidas en el 801 se combinaron con las del proyecto IBM Advanced Computer Systems, lo que resultó en un procesador experimental llamado "Cheetah". Cheetah era un procesador superescalar de 2 vías, que evolucionó hasta convertirse en un procesador llamado "Panther" en 1985, y finalmente en un diseño superescalar de 4 vías llamado "America" en 1986. Se trataba de un conjunto de procesadores de tres chips que incluía un procesador de instrucciones que obtiene y decodifica instrucciones, un procesador de punto fijo que comparte funciones con el procesador de instrucciones y un procesador de punto flotante para los sistemas que lo requieren. Diseñado por el equipo 801, el diseño final se envió a la oficina de Austin de IBM en 1986, donde se desarrolló en el sistema IBM RS/6000. El RS/6000, que funcionaba 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.

Después del RS/6000, la empresa centró su atención en una versión de los conceptos 801 que podrían fabricarse de manera eficiente a varias escalas. El resultado fue la arquitectura del conjunto de instrucciones IBM POWER y la rama PowerPC.

Reconocimiento

Por su trabajo en el 801, John Cocke recibió varios premios y medallas:

  • 1985: Eckert-Mauchly Premio
  • 1987: Premio A.M. Turing
  • 1989: Premio de la máquina de computadoras
  • 1991: Medalla Nacional de Tecnología
  • 1994: IEEE Medalla John von Neumann
  • 1994: Medalla Nacional de la Ciencia
  • 2000: Benjamin Franklin Medal (The Franklin Institute)

Michael J. Flynn considera que el 801 es el primer RISC.

Contenido relacionado

Compresión fractal

Equipo conjunto de instrucciones complejas

Misil de crucero

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save