# Cray-1

El Cray-1 fue un superordenador diseñado por un importante número de informáticos encabezados por Seymour Cray para Cray Research. El primer sistema Cray-1 fue instalado en el laboratorio nacional de Los Álamos en marzo de 1976. Es uno de los supercomputadores más conocidos y exitosos de la historia, y de los más potentes en su época.
Anunciado en 1975, desató una escalada de ofertas por parte del Laboratorio Nacional de Los Álamos y el Lawrence Livermore, ganando finalmente el primero.
A lo largo de los años, la empresa Cray Research esperaba vender una docena de superordenadores Cray-1, a un precio de entre 5 y 8 millones de dólares, pero finalmente vendió más de ochenta. La máquina dio la fama a Seymour Cray y a Cray Research, siendo continuada en diversas versiones hasta los años 90.
Como características técnicas, la primera versión (Cray-1A) operaba con procesadores vectoriales a 80 MHz, era un sistema de 64-bits y pesaba 5,5 toneladas, incluyendo el sistema de refrigeración por freón; pese a su gran tamaño solo tenía 8 MB de Ram.

## Historia

En los años 1968 a 1972 Cray estaba trabajando en Control Data en una nueva máquina conocida como el CDC 8600, el lógico sucesor de sus anteriores CDC 6600 y CDC 7600. El 8600 estaba esencialmente compuesto de cuatro 7600s en una caja.
Jim Thornton, exsocio de ingeniería Cray en diseños anteriores, había comenzado un proyecto más radical conocido como el CDC STAR-100. A diferencia del 8600, que utilizaba la fuerza bruta, STAR tomó una ruta completamente diferente. De hecho, el procesador principal del STAR tenía menos rendimiento que el 7600, pero añadió hardware adicional e instrucciones para acelerar las tareas, algo común en las supercomputadoras.
En 1972, el 8600 había llegado a un callejón sin salida. La máquina era tan increíblemente compleja que era imposible conseguir que funcione bien, incluso un único componente defectuoso haría la máquina no operativa. Cray fue a William Norris, CEO de Control Data, diciendo que era necesario rediseñar la máquina desde cero. En un momento en que la empresa se encontraba en graves problemas financieros, y con la STAR en la cadena de montaje, Norris simplemente no pudo invertir dinero. Cray deja Control Data e inició una nueva empresa a unos metros de la sede del laboratorio de la CDC, en el patio trasero de la propiedad que él compró en Chippewa Falls, WI; Cray y un grupo de ex empleados de la CDC comenzaron a buscar ideas. Al principio, el concepto de construcción de otro superordenador parecía imposible, pero después que el Director Técnico viajara a Wall Street y encontrara un grupo de inversores más que dispuestos a apoyar a Cray, todo lo que se necesitaba era un diseño.
En 1975, el Cray-1 de 80 MHz fue anunciado. La expectativa fue tan grande que se inició una guerra por la primera máquina entre el Lawrence Livermore National Laboratory y Los Alamos National Laboratory, siendo este último el ganador y recibió la máquina número de serie 001 en marzo de 1976, para un período de prueba de seis meses. El Centro Nacional de Investigaciones Atmosféricas (NCAR) fue el primer cliente oficial de Cray Research, en julio de 1977, pagando 8,86 millones de dólares (7,9 millones de dólares, más 1 millón de dólares para los discos). La máquina fue dada de baja en enero de 1979. La compañía esperaba vender una docena de máquinas, pero se vendieron más de 80 Cray-1 de todos los modelos, con precios desde $5M a $8M. La máquina convirtió a Cray en una celebridad, y a la empresa en un éxito, hasta la caída de las supercomputadoras a principios de 1990.
El Cray-1 fue sucedido en 1982 por el Cray X-MP de 800 MFLOPS, la primera computadora multi-proceso. En 1985, el muy avanzado Cray-2, con capacidad de alcanzar picos de 1,9 GFLOPS, sucedió a los dos primeros modelos, pero solo consiguió un limitado éxito comercial a causa de ciertos problemas en alcanzar un rendimiento sostenido en las aplicaciones del mundo real. Por lo tanto, se hizo un modelo de diseño más conservador como sucesor de los Cray-1 y X-MP, llamado Cray Y-MP, lanzado en 1988.

## Antecedentes

Un trabajo científico típico consistente en la lectura de grandes volúmenes de datos, transformarlos de alguna manera y, a continuación, devolver los resultados. Normalmente, las transformaciones que se aplican son idénticas a lo largo de todo el conjunto de datos. Por ejemplo, el programa podría sumar 5 a cada número en un conjunto de un millón de números. En los computadores tradicionales el programa realiza una iteración en el millón de números para sumarle cinco a cada uno, lo que generará un millón de instrucciones diciendo a = sumar b, c. Internamente el equipo resuelve esta instrucción en varios pasos. En primer lugar, lee la instrucción de la memoria y decodifica y, a continuación, recoge toda la información adicional que necesite, en este caso los números B y C; finalmente se ejecuta la operación y se almacena el resultado.

### Máquina vectorial

En el STAR, las nuevas instrucciones escribían los bucles para el usuario. El usuario le indicaba a la máquina en qué lugar de la memoria se almacenó la "gran lista de números", a continuación, se ingresaba una sola instrucción: a(1..1000000) = sumarv b(1..1000000), c(1..1000000). A primera vista parece que el ahorro es limitado, en este caso la máquina sólo lee y decodifica una sola instrucción en lugar de 1.000.000, con el consiguiente ahorro de 1.000.000 de lecturas y decodificaciones y, tal vez, ¼ del tiempo total. Pero el verdadero ahorro no es tan evidentes. Internamente la CPU de la computadora se construye a partir de una serie de partes dedicadas a una sola tarea, por ejemplo, añadir un número o leerlo de la memoria. Normalmente, mientras la instrucción fluye a través de la máquina, sólo una parte está activa en cualquier momento, significando que el proceso entero debe completarse antes de poder emitir el resultado. Sin embargo, la segmentación de las instrucciones cambió esto, de manera que en estas máquinas la CPU puede "mirar hacia adelante" y comenzar a buscar la próxima instrucción mientras que aún se trabaja con la primera. En esta cadena de montaje una instrucción sigue ocupando todo el proceso, pero tan pronto como se termina una, la próxima ya está casi finalizada.
Los procesadores vectoriales utilizan esta técnica con un "truco" adicional. Debido a que el diseño de los datos es "conocido", básicamente un conjunto de números dispuestos linealmente en la memoria, las líneas de ejecución se pueden ajustar para mejorar el rendimiento. Cuando se recibe una instrucción vectorial, un hardware especial establece el acceso a la memoria para leer en el obtener los datos y colocarlos en el procesador lo más rápido posible.
El enfoque de CDC en el STAR utilizó lo que hoy se conoce como arquitectura memoria-memoria. Esto se refiere a la forma en que la máquina se reúne los datos, ajustando las líneas de ejecución para leer y escribir directamente en la memoria. Esto le permitió el uso de vectores de cualquier longitud o ancho, por lo que es muy flexible. Lamentablemente, la línea de ejecución tenía que ser muy "profunda" con el fin de permitir que tenga suficientes instrucciones leídas al vuelo para compensar la lentitud de la memoria, y eso significa que la máquina tuvo un costo muy alto al pasar de procesamiento vectorial a datos normales. Además, el bajo rendimiento en modo "normal" de la máquina significa que, luego de cambiar el modo y funcionando con instrucciones lógicas típicas, el rendimiento era bastante pobre. El resultado fue un desempeño más bien decepcionante en el mundo real, algo que podría haber sido obvio si los diseñadores hubieran examinado la ley de Amdahl.

### Enfoque de Cray

Cray fue capaz de ver el fracaso de la STAR y aprender de ella. Se decidió que, además del rápido procesamiento vectorial, su diseño también requeriría unas prestaciones excelentes en todos los componentes lógicos. De esta forma cuando el equipo cambiara de modo, seguiría siendo el más rápido. Además se observó que el volumen de trabajo podría ser mejorado de manera espectacular, en la mayoría de los casos, mediante la utilización de registros.
Así como en las primeras máquinas se ignoraba el hecho de que la mayoría de las operaciones se aplicaban a muchos puntos de datos, STAR ignorado el hecho de que esos mismos datos se procesaban varias veces. Considerando que la STAR podía leer y procesar la misma memoria cinco veces para aplicar cinco operaciones vectoriales a un conjunto de datos, sería mucho más rápido leerlos todos juntos una sola vez y aplicar las cinco operaciones vectoriales mientras los datos se encontraban en los registros de la CPU. Los registros son extremadamente caros en términos de circuitería de modo que sólo podrían ser unos pocos, lo que significa que el diseño de Cray tendría menos flexibilidad en términos del tamaño del vector. En lugar de leer vectores de cualquier tamaño varias veces como en el STAR, en el diseño de la máquina Cray tendría que leer pequeñas partes de datos a la vez, pero luego ejecutar en ellos varias operaciones al mismo tiempo. Dado el volumen de trabajo típico, Cray consideró que la pequeña pérdida debido al acceso de la memoria en pasos era un costo que valía la pena pagar.
Debido a que la típica operación vectorial implicaría cargar un pequeño conjunto de datos en los registro vectoriales y ejecutar varias operaciones sobre el mismo, el sistema vectorial del nuevo diseño tuvo su propia línea de ejecución separada. Por ejemplo, las unidades de multiplicación y de suma se implementaron en hardware separados, dando como resultado que una línea de ejecución podía ser conducida a la siguiente, y la instrucción ya decodificada podía ser ejecutada en la línea de ejecución principal. Cray se refirió a este concepto como "encadenamiento", ya que permitía a los programadores "encadenar" varias instrucciones y extraer un mayor rendimiento.

## Descripción

La nueva máquina fue el primer diseño de Cray en utilizar los circuitos integrados (CI). Aunque los CI ya estaban disponibles desde la década de 1960, fue sólo en la década de 1970 que alcanzaron el rendimiento necesario para aplicaciones de alta velocidad. El Cray-1 utiliza sólo 4 diferentes tipos de CI, un ECL doble compuerta NAND (4 de entrada + 5 de entrada, cada una con salida diferencial), otro más lento MECL 4/5 NAND utilizados para expansiones de direcciones, una RAM estática (SRAM) de 16x1 de alta velocidad (6 ns) utilizada para los registros, y una RAM estática de 1k x 1 y 50 ns utilizada para la memoria principal. En total, la Cray-1 utilizaba cerca de 200.000 compuertas, aproximadamente la misma cantidad que el Intel 386 de la década de 1980.
Los CI fueron montados en grandes placas de circuitos impresos cinco capas, con hasta 144 CI por tarjeta. Se montaban espalda con espalda para refrigeración (véase más adelante) y se colocaron en veinticuatro racks de 71 cm, cada uno con 72 parejas de placas. Un módulo típico (unidad de procesamiento distinta) requerían uno o dos placas. Toda la máquina contenía 1.662 módulos en 133 variantes.
Uno de los problemas descubiertos durante el diseño inicial era que la velocidad de funcionamiento de la máquina era lo suficientemente cercana a la señal de la placa (una característica de diseño deliberada) que podían crearse ondas estacionarias en algunos de los circuitos eléctricos. Esto significa que la señal podía llegar al CI de destino en un "punto bajo" de la onda, lo que la hacía difícil de detectar. Este problema se resolvió mediante la adición de pequeños retrasos en la trayectoria de la señal, ya sea mediante la colocación de láminas de papel de aluminio junto a las pistas del circuito para añadir una pequeña capacitancia, o colocando CI en los puntos altos de la señal. Algunas estimaciones señalan que cerca del 40% de las compuertas en la máquina, eran simplemente para añadir retrasos y limpiar la señal.
Cray gastó un tiempo considerable en el diseño de los sistemas mecánicos y eléctricos, mejorando el rendimiento al acortar la duración del ciclo. Los módulos estaban conectados entre sí mediante circuitos de alta potencia para reducir los efectos del ruido, permitiendo a los receptores "resolver" más rápido. Cada cable entre los módulos se realizó de par trenzado, y cortado en longitudes muy específicas con el fin de evitar reflejos eléctricos. Cada amplificador estaba equilibrado, por lo que si un cable se conectaba a alta potencia, el otro se conectaba a baja potencia, con lo que la demanda a la fuente de energía se mantenía constante y se evitaba el ruido de conmutación.
Todos estos circuitos de alta potencia generaban un calor considerable, y los diseñadores de Cray emplearon tanto esfuerzo en el sistema de refrigeración como en el resto del diseño mecánico. En este caso, cada placa de circuito se combina con una segunda, colocadas base con base, separadas por una hoja de cobre. La hoja de cobre transmitía el calor a los bordes de la caja, donde era transmitido al freón líquido, que circulaba en tuberías hacia la unidad de enfriamiento situada debajo de la máquina. El primer Cray-1 se retrasó seis meses debido a problemas en el sistema de refrigeración; el lubricante que normalmente se mezclaba con el freón para mantener el buen funcionamiento del compresor, se fugaba a través de los sellos y, finalmente, cubría las placas con aceite hasta que se producía un cortocircuito. Se utilizaron nuevas técnicas de soldadura para sellar correctamente las cañerías.
Con el fin de exprimir hasta la última gota de velocidad de la máquina, todo el chasis se dobló en forma de una gran "C". Las partes del sistema que dependían de la velocidad se colocaron dentro del borde interior, donde los cables eran más cortos. Esto permitió reducir la duración del cada ciclo a 12,5 ns (80 MHz), no tan rápido como los 8 ns a los que había renunciado el 8600, pero lo suficientemente rápido para superar a su anterior CDC 7600 y al STAR. NCAR estima que el rendimiento global del sistema fue de 4,5 veces la del CDC 7600.
El Cray-1 fue construido como un sistema de 64 bits, una salida de la 7600/6600, que eran máquinas de 60 bits (también un cambio previsto para el 8600). El direccionamiento era de 24 bits, para un máximo de 1 megapalabra (8 MB) de memoria principal. La memoria se extendía a través de 16 bancos, cada uno con una duración de ciclo de 50 ns, lo que le permitía leer hasta cuatro palabras por ciclo.
El juego de registros principal consistía de ocho registros escalares de 64 bit (S) y ocho registros de direccionamiento de 24 bit (A). Estos fueron respaldados por un conjunto de sesenta y cuatro registros, cada uno para almacenamiento temporal de los registros S y A, conocidos como T y B, respectivamente, que podían no ser vistos por las unidades funcionales. El sistema vectorial agregaba otros ocho registros de 64 palabras por 64 bits (V), así como una longitud de vector (VL) y una máscara de vector (VM). Por último, el sistema también incluía un reloj de 64 bit y cuatro buffers de instrucciones de 64 bit que almacenaban sesenta y cuatro instrucciones de 16 bit cada uno. El hardware fue creado para permitir que los registros de vectores sean alimentados con una palabra por ciclo, mientras que los registros escalares y los de direccionamiento requerían dos. En cambio, todo el buffer de dieciséis palabras podía ser llenado en cuatro ciclos.
El sistema usaba doce unidades funcionales, pero con paralelismo limitado. Se podía alcanzar una instrucción por ciclo de reloj en las unidades, pero al operar en paralelo se alcanzaban dos. De esta forma, el rendimiento teórico era de 160 MIPS (80 MHz × 2 instrucciones), aunque algunas limitaciones hicieron que el rendimiento de coma flotante se acerque generalmente a 136 megaflops. Sin embargo, mediante el uso cuidadoso de instrucciones vectoriales y la creación de encadenados útiles, el sistema podía alcanzar picos de 250 megaflops.
Puesto que la máquina fue diseñada para operar con grandes conjuntos de datos, el diseño también dedicaba cantidades considerables de circuitos a la E/S. Los primeros diseños de Cray en CDC incluían computadoras independientes dedicadas a esta tarea, pero esto ya no era necesario. Por el contrario, la Cray-1 incluía cuatro controladoras de 6 canales, cada uno de los cuales daba acceso a la memoria principal, una vez cada cuatro ciclos. Los canales tenían 16 bit de ancho, e incluían 3 bit de control y cuatro para la corrección de errores, por lo que la máxima velocidad de transferencia era de 1 palabra por cada 100 ns, o 500K palabras por segundo, para toda la máquina.
El modelo inicial, la Cray-1A, pesaba 5,5 toneladas incluyendo el sistema de refrigeración de freón. Configurado con una memoria RAM de 1 millón de palabras, la máquina y sus fuentes de alimentación consumían cerca de 115 kW de potencia; la refrigeración y el almacenamiento probablemente duplicaban esta cifra. Un Data General SuperNova S/200 se utiliza generalmente como un "front end" para el control de las instrucciones de la máquina, más tarde sustituido por el Eclipse.
El posterior Cray-1S tuvo un reloj un poco más rápido, con 12 ns, y la memoria principal en tamaños de 1, 2 y 4 millones de palabras. Las máquinas Data General fueron sustituidas por un diseño propio de 16 bits funcionando a 80 MIPS. El sistema de E/S fue separado de la máquina, conectado a la red a través de canal de control de 6 MB por segundo y un canal de alta velocidad de 100 MB por segundo. Esta separación hizo que el 1S se vea como dos "medio Crays" separadas por unos pocos decímetros, lo que permitió que el sistema de E/S sea ampliado según se requiera. El sistema podía ser comprado en una variedad de configuraciones, desde el S/500 sin E/S y memoria de medio millón de palabras, hasta el S/4400 con una memoria de 4 megapalabras y 4 procesadores de E/S.
El Cray 1-S fue sustituido por el Cray-1M, la M indicaba que la E/S utilizaba memoria RAM basada en circuitos MOS, más económicos. El 1M sólo se presenta en tres versiones, la M/1200 con 1 millón de palabras en 8 bancos, o la M/2200 y M/4200 con 2 o 4 megapalabras en 16 bancos. Todas estas máquinas incluían dos, tres o cuatro procesadores de E/S, y el sistema añade un segundo canal de datos de alta velocidad opcional. Los usuarios también pueden añadir un dispositivo de almacenamiento de estado sólido, un disco RAM, con 8 a 32 megapalabras de memoria MOS-RAM.

## Museos

Varios modelos de superordenadores Cray se exhiben en el Computer History Museum en Mountain View, California y en el Chippewa Falls Museum of Industry and Technology en Chippewa Falls, Wisconsin.
Un Cray-1 se encuentra en exhibición en el Museo de Computadoras Digibarn. Un Cray-1 se encuentra en exhibición en el Deutsches Museum. Un Cray-1 se encuentra en exhibición en el Science Museum (Londres). Un Cray-1 se encuentra en exhibición en el National Air and Space Museum (Washington). Un Cray-1-S/2000 con número de serie 14 se encuentra en exhibición en el Museo de la Ciencia de Valladolid.

## Software

En 1978, el primer paquete de software estándar para la Cray-1 fue comercializado, que consistía de tres productos principales:
* Cray Operating System (COS) (luego las máquinas podían correr el UNICOS, el Unix de Cray),
* Cray Assembler Language (CAL), y
* Cray FORTRAN (CFT), el primer compilador FORTRAN de vectorización automática.

## Comparación con modernos procesadores de PC

A partir de 2007, los más rápidos procesadores de PC alcanzan más de 40 GFLOPS, más de 130 veces más rápido que un Cray-1.

## Otras imágenes del Cray-1

* Placas lógicas
* Dentro de la torre
* Sistema de enfriamiento
* Parte superior del gabinete
* Primer plano de las placas lógicas
* Cray-1 en el Computer History Museum
* Cray-1 en el Computer History Museum
* Detalle de la fuente de alimentación del Cray-1A