El CDC 7600 fue diseñado por Seymour Cray para ser el sucesor del CDC 6600 , extendiendo el dominio de Control Data en el campo de las supercomputadoras hasta la década de 1970. [6] El 7600 funcionaba a 36,4 MHz (ciclo de reloj de 27,5 ns) y tenía una memoria primaria de 65 Kword (con un tamaño de palabra de 60 bits) utilizando núcleo magnético y memoria secundaria de tamaño variable (hasta 512 Kword) (dependiendo del sitio). En general, era aproximadamente diez veces más rápido que el CDC 6600 y podía entregar aproximadamente 10 MFLOPS en código compilado a mano, con un pico de 36 MFLOPS. [7] Además, en pruebas comparativas realizadas a principios de 1970 se demostró que era ligeramente más rápido que su rival de IBM , el IBM System/360 , modelo 195. [8] Cuando el sistema se lanzó en 1967, se vendió por alrededor de 5 millones de dólares en configuraciones básicas, [9] y considerablemente más a medida que se añadían opciones y características.
Entre las notables contribuciones de vanguardia del 7600, más allá de la extensa canalización , estaba la forma física de C, que redujo el espacio en el piso y aumentó drásticamente [10] el rendimiento al reducir la distancia que las señales debían viajar. [11]
A medida que el 6600 se acercaba a la calidad de producción, Cray perdió interés en él y se dedicó a diseñar su reemplazo. Hacer una máquina "algo" más rápida no sería demasiado difícil a finales de los años 60; la introducción de circuitos integrados permitió un empaquetamiento más denso de componentes y, a su vez, una mayor velocidad de reloj. Los transistores en general también se estaban volviendo algo más rápidos [12] a medida que los procesos de producción y la calidad mejoraban. Se podría esperar que este tipo de mejoras hicieran que una máquina fuera el doble de rápida, tal vez hasta cinco veces más rápida. Sin embargo, al igual que con el diseño del 6600, Cray se fijó el objetivo de producir una máquina con un rendimiento diez veces superior.
Una de las razones por las que el 6600 era mucho más rápido que sus contemporáneos era que tenía múltiples unidades funcionales que podían funcionar en paralelo. [13] Por ejemplo, la máquina podía realizar una suma de dos números mientras multiplicaba simultáneamente otros dos. Sin embargo, cualquier instrucción dada tenía que completar su recorrido a través de la unidad antes de que la siguiente pudiera ser alimentada a ella, lo que causaba un cuello de botella cuando el sistema de programación se quedaba sin instrucciones. Agregar más unidades funcionales no mejoraría el rendimiento a menos que el programador también se mejorara en gran medida, especialmente en términos de permitirle tener más memoria, de modo que pudiera buscar entre más instrucciones las que pudieran ser alimentadas a las unidades paralelas. Eso parecía ser un problema importante.
Para resolver este problema, Cray recurrió al concepto de una secuencia de instrucciones . Cada unidad funcional constaba de varias secciones que operaban por turnos; por ejemplo, una unidad de suma podía tener circuitos dedicados a recuperar los operandos de la memoria, luego la unidad matemática propiamente dicha y, por último, otra para enviar los resultados de vuelta a la memoria. En cualquier caso, solo una parte de la unidad estaba activa, mientras que el resto esperaba su turno. Una secuencia de instrucciones mejora esto al introducir la siguiente instrucción antes de que se complete la primera, con lo que se aprovecha ese tiempo de inactividad. Por ejemplo, mientras se suma una instrucción, se pueden obtener los operandos de la siguiente instrucción de suma. De esa manera, tan pronto como la instrucción actual se completa y pasa al circuito de salida, los operandos de la siguiente suma ya están esperando a ser agregados. De esta manera, cada unidad funcional trabaja en "paralelo", [14] al igual que la máquina en su conjunto. La mejora en el rendimiento generalmente depende de la cantidad de pasos que la unidad da para completarse. Por ejemplo, la unidad de multiplicación del 6600 necesitaba 10 ciclos para completar una instrucción, por lo que al canalizar las unidades se podría esperar ganar aproximadamente 10 veces la velocidad.
Sin embargo, las cosas nunca son tan sencillas. La segmentación requiere que los componentes internos de la unidad se puedan separar de forma eficaz hasta el punto en que cada paso de la operación se ejecute en circuitos completamente separados. Esto rara vez se logra en el mundo real. Sin embargo, el uso de la segmentación en el 7600 mejoró el rendimiento con respecto al 6600 en un factor de aproximadamente 3. Para lograr el resto del objetivo, la máquina tendría que funcionar a una velocidad más rápida, ahora posible utilizando nuevos diseños de transistores. Sin embargo, existe un límite físico para el rendimiento debido al tiempo que tardan las señales en moverse entre las partes de la máquina, que a su vez está definido por su tamaño físico. Como siempre, el trabajo de diseño de Cray dedicó un esfuerzo considerable a este problema y, por lo tanto, permitió frecuencias de operación más altas. Para el 7600, cada módulo de circuito en realidad constaba de hasta seis placas de circuito impreso , cada una de ellas rellena con resistencias subminiatura, diodos y transistores. Las seis placas se apilaron y luego se interconectaron a lo largo de sus bordes, lo que formaba un módulo muy compacto, pero básicamente irreparable.
Sin embargo, la misma densidad de empaquetamiento también provocó el mayor problema de la máquina: el calor. Para el modelo 7600, Cray volvió a recurrir a su ingeniero de refrigeración, Dean Roush, ex empleado de la empresa Amana . Roush añadió una placa de aluminio a la parte posterior de cada lado de la pila de leña , que a su vez se enfriaba mediante un sistema de freón líquido [15] que recorría el núcleo de la máquina. Dado que este sistema era mecánico y, por lo tanto, propenso a fallas, el modelo 7600 se rediseñó en una gran forma de "C" para permitir el acceso a los módulos a ambos lados de la tubería de refrigeración caminando hacia el interior de la "C" y abriendo el gabinete. [11]
El 7600 fue un hito arquitectónico y la mayoría de sus características siguen siendo componentes estándar del diseño informático. Es un ordenador de carga y almacenamiento con una palabra de instrucción de 15 bits que contiene un código de operación de 6 bits. Solo hay 64 códigos de máquina, incluido un código de no operación , sin operaciones de multiplicación o división de punto fijo en el procesador central.
El 7600 tiene dos memorias principales. La memoria de núcleo pequeño contiene las instrucciones que se están ejecutando actualmente y los datos que se están procesando actualmente. Tiene un tiempo de acceso de 10 de los ciclos menores de 27,5 ns y una longitud de palabra de 60 bits. La memoria de núcleo grande contiene datos listos para transferirse a la memoria de núcleo pequeño. Tiene un tiempo de acceso de 60 de los ciclos menores de 27,5 ns y una longitud de palabra de 480 bits (512 bits con paridad). [4] Los accesos están completamente segmentados y almacenados en búfer, por lo que los dos tienen la misma tasa de transferencia secuencial de 60 bits cada 27,5 ns. Los dos funcionan en paralelo, por lo que la tasa de transferencia secuencial de uno al otro es de 60 bits por ciclo menor de 27,5 ns. En una llamada del sistema operativo, el contenido de la memoria de núcleo pequeño se intercambia y reemplaza desde la memoria de núcleo grande por el sistema operativo, y se restaura después.
Existe una secuencia de instrucciones de 12 palabras, llamada pila de palabras de instrucción en la documentación de CDC. [4] Se obtienen todas las direcciones de la pila, sin esperar a que se procese el campo de instrucción. Por lo tanto, la obtención de la instrucción de destino de una bifurcación condicional precede a la evaluación de la condición de bifurcación. Durante la ejecución de un bucle de 10 palabras (hasta 40 instrucciones), todas las instrucciones necesarias permanecen en la pila, por lo que no se obtienen instrucciones, lo que deja una pequeña memoria del núcleo libre para transferencias de datos.
Hay ocho registros de 60 bits, cada uno con un registro de dirección. [4] Al mover una dirección a un registro de dirección se inicia una pequeña lectura o escritura de memoria central. Las instrucciones aritméticas y lógicas tienen estos registros como fuentes y destinos. El programador o compilador intenta obtener los datos a tiempo para usarlos y almacenarlos antes de que más datos necesiten el mismo registro, pero si no está listo, el procesador entra en un estado de espera hasta que lo esté. También espera si una de las cuatro unidades aritméticas de punto flotante no está lista cuando se le solicita, pero debido al enrutamiento, esto no suele suceder. [16]
El CDC 7600 "fue diseñado para ser compatible con el código de máquina del 6600, pero para proporcionar un aumento sustancial en el rendimiento". [17] [18] Un usuario dijo: "La mayoría de los usuarios podrían ejecutar cualquiera de los dos sistemas sin cambios". [8]
Aunque el 7600 compartía muchas características del 6600, incluyendo hardware, instrucciones y su tamaño de palabra de 60 bits, no era compatible en código objeto con el CDC 6600. [19] [8] Además, no era totalmente compatible en código fuente ( COMPASS ), ya que algunas instrucciones del 7600 no existían en el 6600, y viceversa. Originalmente se había llamado CDC 6800, [20] pero se cambió a 7600 cuando Cray decidió que no podía ser completamente compatible. Sin embargo, debido al diseño del sistema operativo del 7600, el 6600 y el 7600 compartían un "entorno de software uniforme" a pesar de las diferencias de bajo nivel. [8]
De hecho, desde una perspectiva de alto nivel, el 7600 era bastante similar al 6600. En esa época, la memoria de la computadora podía organizarse en bloques con rutas de acceso independientes, y los diseños de Cray aprovecharon esto a su favor. Si bien la mayoría de las máquinas usarían una sola CPU para ejecutar toda la funcionalidad del sistema, Cray se dio cuenta de que esto significaba que cada bloque de memoria pasaba una cantidad considerable de tiempo inactivo mientras la CPU procesaba instrucciones y accedía a otros bloques. Para aprovechar esto, el 6600 y el 7600 dejaron las tareas domésticas mundanas, como imprimir la salida o leer tarjetas perforadas , por ejemplo, a una serie de diez máquinas más pequeñas de 12 bits basadas en el CDC 160-A conocidas como "Unidades de Procesador Periférico", o PPU. [21] Para cualquier ciclo dado de la máquina, una de las PPU estaba en control, alimentando datos a la memoria mientras el procesador principal procesaba números. Cuando se completaba el ciclo, se le daba el control a la siguiente PPU. De esta manera, la memoria siempre conservaba información actualizada para que el procesador principal pudiera trabajar con ella (salvo retrasos en los propios dispositivos externos), eliminando los retrasos en los datos y permitiendo que la CPU se diseñara para el rendimiento matemático y nada más. Se podría haber dicho que la PPU era un "canal de comunicaciones" muy inteligente.
Al igual que el 6600, el 7600 utilizaba palabras de 60 bits con instrucciones que generalmente tenían una longitud de 15 bits, aunque también había instrucciones de 30 bits. Las instrucciones se empaquetaban en palabras de 60 bits, pero una instrucción de 30 bits no podía abarcar dos palabras, y el control solo se podía transferir a la primera instrucción de una palabra. Sin embargo, el conjunto de instrucciones en sí había cambiado para reflejar la nueva disposición de la memoria interna, lo que lo hacía incompatible con el 6600 anterior. Las máquinas eran lo suficientemente similares como para hacer posible la portabilidad de compiladores y sistemas operativos sin demasiados problemas. Inicialmente, la máquina no venía con software; los sitios tenían que estar dispuestos a escribir su propio sistema operativo, como LTSS, NCAROS y otros; y compiladores como LRLTRAN (la versión de Fortran de Livermore con administración de memoria dinámica y otras características no estándar).
CDC también fabricó dos computadoras multiprocesador basadas en el 7600, con el número de modelo 7700. [22] Consistían en dos máquinas 7600 en una configuración asimétrica: una central y una adjunta. Se utilizaron para el lanzamiento de misiles y el seguimiento de la llegada de misiles balísticos intercontinentales de la URSS . El simulador de radar era un simulador en tiempo real con un CDC 6400 para el front-end de entrada/salida. Estos sistemas se iban a utilizar en el Pacific Missile Range . Una computadora se instaló en TRW en Redondo Beach, California (más tarde se trasladó al atolón de Kwajalein, Pacífico Sur), y la segunda se instaló en McDonnell Douglas en Huntington Beach, California . Eran 7600 reales conectados por el chasis 25 para convertirlos en un 7600 MP.
Desde aproximadamente 1969 hasta 1975, el CDC 7600 fue considerado en general como el ordenador más rápido del mundo, [7] a excepción de las unidades especializadas. Sin embargo, incluso con la mecánica y la refrigeración avanzadas, el 7600 era propenso a fallar. Tanto LLNL como NCAR informaron que la máquina se estropeaba al menos una vez al día, y a menudo cuatro o cinco veces. La aceptación en los lugares de instalación tardó años mientras se solucionaban los errores, y aunque la máquina en general se vendió bastante bien dado su nicho de "alta gama", es poco probable que la máquina generara algún tipo de ganancias reales para CDC. El sucesor CDC 8600 nunca se completó, y Seymour Cray pasó a formar su propia empresa, Cray Research . [7]
Un 7600 que sobrevivió está parcialmente en exhibición en el Museo de Historia de la Computación . [9] Su gran tamaño permite que solo se muestren dos unidades de esquina. El resto están almacenadas. Otro 7600 está en exhibición en el Museo de Industria y Tecnología de Chippewa Falls, junto con su consola y un controlador de cinta.