# ILLIAC IV

El ILLIAC IV fue uno de los primeros supercomputadores de la historia. Uno de la serie de máquinas de investigación, los ILLIAC de la Universidad de Illinois, el diseño del ILLIAC IV se caracterizó por un nivel bastante alto de paralelismo con hasta 256 procesadores, solía permitir a la máquina trabajar en grandes conjuntos de datos en lo que más tarde se conocería como procesamiento vectorial. Después de varios retrasos y rediseños, la computadora fue entregada al Ames Research Center de la NASA, en las afueras de San Francisco, en 1971. Después de las pruebas y de 4 años de uso por parte de la NASA, el ILLIAC IV fue conectado a la ARPANet para uso distribuido en noviembre de 1975, convirtiéndose en el primer supercomputador disponible en red, adelantándose al Cray-1 por casi 12 meses.

## Orígenes

Al principio de los 1960 el diseño de computadores se estaba acercando al punto del rendimiento decreciente. Por aquel entonces, el diseño de computadoras se centraba en añadir tantas instrucciones como fuera posible a la CPU de la máquina, un concepto conocido como "ortogonalidad", la cual hacía los programas más pequeños y más eficientes en el uso de la memoria. También hacía a los propios computadores increíblemente complejos, y en una era donde muchos CPUs eran conectados a mano a partir de transistores individuales, el coste de añadir ortogonalidad era a menudo demasiado alto. Añadir operaciones podía potencialmente ralentizar la máquina; la velocidad máxima era definida por el ritmo de la señal en el hardware, la cual era a su vez una función del tamaño en conjunto de la máquina. El estado del arte de las técnicas de diseño de hardware de la época usaba transistores individuales para formar los circuitos lógicos, así que cualquier incremento en la lógica de procesamiento significaba una máquina más grande. La velocidad de las CPU parecían estar alcanzado un estancamiento.
Diversas soluciones a estos problemas fueron exploradas en la década de los sesenta. Una, entonces conocida como solapamiento pero hoy conocida como segmentación, permite a una única CPU trabajar en pequeñas partes de diversas instrucciones al mismo tiempo. Normalmente la CPU obtendría una instrucción de memoria, la "decodificaría", ejecutaría la instrucción y luego escribiría los resultados de vuelta a memoria. Mientras la máquina está trabajando en cualquier de las etapas, por ejemplo decodificación, las otras porciones de la CPU no están siendo usadas. La segmentación permite a la CPU empezar la etapa de carga y decodificación (por ejemplo) de la siguiente instrucción mientras todavía está trabajando en la última, escribiendo los resultados en memoria. La segmentación fue la principal característica del diseño innovador de Seymour Cray, el CDC 7600, el cual superaba a casi todas las demás máquinas más de diez veces cuando fue introducido.
Otra solución al problema fue la computación paralela, es decir, el construir computadores a partir varios CPU de propósito general. Los "ordenadores" como un todo tendrían que ser capaces de mantener a todas las CPU ocupadas, pidiéndole a cada una trabajar en una pequeña parte del problema y luego juntando el resultado al final en una sola "respuesta". No todas las tareas pueden ser manipuladas de esta forma, y extraer rendimiento a múltiples procesadores sigue siendo un problema incluso hoy en día, aunque el concepto tiene la ventaja de no tener límite teórico de velocidad –si necesitas más rendimiento, simplemente añade más CPU. Las CPU de propósito general eran muy caras, sin embargo, así que cualquier diseño "masivamente paralelo" sería o demasiado caro para ser rentable, o tendría que usar un diseño de CPU mucho más simple.

## Solomon

Westinghouse exploró la última solución en un proyecto conocido como Solomon. Dado que las computadoras de alto rendimiento estaban siendo usadas principalmente para procesamiento matemático en ciencia y tecnología, decidieron centrar el diseño de su CPU en matemáticas únicamente. Ellos diseñaron un sistema en el cual el flujo de instrucciones era adquirido y decodificado por una sola CPU, la unidad de control o UC. La UC se unió a un fila de procesadores construidos para manejar matemáticas de coma flotante únicamente, los "elementos de procesamiento", o EP. Dado que mucha de la complejidad de la CPU de debe a la adquisición de instrucciones y el proceso de decodificación, los EP de Solomon terminaron siendo mucho más simples que la UC, muchos de ellos podían ser construidos sin aumentar los precios. Los diseños de los microprocesadores son bastante similares a esta distribución en términos generales, con un solo decodificador de instrucciones alimentando a un número de subunidades dedicadas a procesar ciertos tipos de datos. Donde Solomon difería de los diseños modernos era en el número de subunidades; una CPU moderna puede tener tres o cuatro unidades de enteros y un número similar para coma flotante, en Solomon había 256 EP, todas dedicadas a coma flotante.
Solomon leería las instrucciones de memoria, las decodificaría, y luego las pasaría a los EP para procesarlas. Cada EP tenía su propia memoria para almacenar operandos y resultados, el módulo de memoria PE, o PEM. La UC podía acceder a toda la memoria vía un bus de memoria dedicado, donde los EP podían solo acceder a su propia PEM. Aunque había problemas, conocidos como embarazosamente paralelos, que podían ser manejados por unidades totalmente independientes, estos problemas son generalmente raros. Para permitir que los resultados de un EP pudieran ser usados como entradas de otro, una red separada conectaba cada EP a su ocho más cercanos vecinos. Disposiciones similares eran comunes en las máquinas masivamente paralelas en la década de los 80.
A diferencia de los diseños modernos, los EP de Solomon solo podían ejecutar una instrucción cada vez, y todos EP tenían que ejecutar la misma instrucción. Eso significaba que el sistema solo era útil cuando trabajaba con conjuntos de datos que tenían anchos vectores que podían ser distribuidos por los EP. Este tipo de problemas eran comunes en el procesamiento científico, y son muy comunes hoy en día cuando se trabaja con datos multimedia. El concepto de aplicar una solo instrucción a un gran número de elementos de datos al mismo tiempo es ahora común en la mayoría de diseños de microprocesadores, lo que se conoce como SIMD, siglas en inglés de Single Instruction, Multiple Data, en español: Una Instrucción, Múltiples Datos. En Solomon, la UC cargaría normalmente los PEMs con datos, esparciendo las instrucciones entre los PEMs, y luego empezando a introducir las instrucciones a los EP, una cada ciclo de reloj.
Bajo un contrato con la rama de investigación del Rome Laboratory (RADC) de la Fuerza Aérea de los Estados Unidos, ellos habían construido un prototipo de placa de pruebas en 1964, pero el contrato con el RADC terminó y Westinghouse decidió no seguir por su cuenta.

## ILLIAC IV

Cuando Solomon terminó, el investigador principal, Daniel Slotnick, consiguió el interés de Burroughs, quienes en aquel tiempo no eran capaces de aprovecharse del mercado de alto rendimiento científico. Sin embargo, el desarrollo de una máquina para una base de clientes desconocidos era arriesgado, y Slotnick consiguió que la Universidad de Illinois fuese tanto su primer cliente como su socio de desarrollo. Como el rendimiento de la máquina era mucho más de lo que la universidad podía hacer uso de, se esperaba que el tiempo de la máquina pudiese ser alquilado a clientes comerciales. En 1964 la universidad firmó un contrato con DARPA para financiar el esfuerzo, el cual fue conocido como ILLIAC IV, siguiendo con la línea de un número de máquinas de investigación anteriormente desarrolladas allí. El desarrollo empezó en 1965, y un diseño preliminar fue completado en 1966.
En muchos sentidos la máquina fue tratada como un diseño experimental, así que incluía las más avanzadas características entonces disponibles. Los circuitos lógicos estaban basados en circuitos integrados (CI) de lógica de emisores acoplados o ECL, cuando muchas de las máquinas de la época todavía dependían de transistores individuales o CI de baja velocidad. Texas Instruments fue contratada para los CI basados en ECL. Cada EP fue dado 2048-palabras de 240 ns memorias de película fina (más tarde reemplazados por memoria de semiconductor) para el almacenamiento de resultados. Burroughs también suministraba las unidades de disco especializadas, las cuales se caracterizaban por una cabeza estacionaria separada para cada pista y podía ofrecer velocidades hasta de 500 Mbit/s y almacenaba cerca de 80 MB por cada disco de 36". Ellos también suministraban el mainframe Burroughs B6500 que actuaba como controlador de front-end. Conectado al B6500 estaba un medio de almacenamiento de láser óptico, un sistema de una sola escritura que almacenaba hasta 1 Tbit en un disco de plástico cubierto por una fina capa de película metálica.
El ILLIAC fue un diseño 64-bit, en una era pre-ASCII donde las máquinas de 48-bits eran los más común y no existía una longitud de palabra "estándar". La CPU tenía sesenta y cuatro registros de 64-bits y otros cuatro acumuladores de 64-bit. Los EP tenían solo seis registros de 64-bits, cada uno con propósito especial. Uno de estos, RGR, era usado para comunicar datos a los EP vecinos, moviendo un "hop" por ciclo de reloj. Otro, RGD, indicaba si el EP estaba activo en ese momento. Los EP tenían formatos de instrucciones para datos de 64, 32 y 8-bit, y podían ser colocados en modo de 32-bit que hacía que pareciese que había 128 EP.
El objetivo del diseño buscaba una computadora con la habilidad de procesar un billón de operaciones de coma flotante por segundo, o en la terminología de hoy, 1 GFLOPS. Para realizar esto el diseño básico requeriría 256 EP corriendo a 13 MHz, dirigidos por cuatro CPUs. Originalmente ellos pretendían colocar todos los 256 EP en un único y gran mainframe, pero el proyecto rápidamente empezó a ir por detrás de lo planificado. En vez de eso, una modificación fue hecha para dividir las ALUs en cuadrantes de 64 con una sola UC cada, colocados en armarios separados. Finalmente se hizo evidente que solo un cuadrante podría estar disponible en un tiempo realista, reduciendo la capacidad de 1 GFLOPS a cerca de 200 MFLOPS.
El trabajo en la universidad estaba principalmente centrado en encontrar formar eficientes de llenar los EP con datos. A no ser que el "problema" siendo alimentado a la computadora pudiera ser paralelizado de forma SIMD, el ILLIAC no sería más rápido que cualquier otro computador, y mucho más lento que los diseños de otras compañías como Control Data, el cual se caracterizaba por velocidades de reloj mucho más altas. Con el objetivo de hacer esto tan fácil como fuera posible, varios nuevos [lenguaje de programación|lenguajes de programación] fueron creados; IVTRAN y TRANQUIL eran versiones paralelizadas de FORTRAN, y Glypnir era una conversión similar de ALGOL. Generalmente estos lenguajes proporcionaban soporte para carga de vectores de datos entre los EP para ser ejecutados en paralelo, e incluso algún soporte para el desenrollado de bucles en operaciones con vectores.

## Mudanzas del ILLIAC

Cuando el computador era construido en los finales de los 1960, se encontró con hostilidades por los protestantes que sospechaban de la unión de la universidad con el Departamento de Defensa (a través de ARPA), y sentían que la universidad se había vendido a una conspiración. Los protestantes alcanzaron el punto de ebullición el 9 de mayo de 1970, en el día de la "Illiacción". Tres meses después de los atentados con bombas en el Sterling Hall del 24 de agosto en el edificio de matemáticas de la universidad de Wisconsin, la universidad de Illinois decidió retirarse del proyecto, y lo movió a una localización más segura. El trabajo lo adquirió la NASA, entonces con buen presupuesto en los años post-Apollo e interesada en casi cualquier cosa de "alta tecnología". Formaron la nueva división de computación avanzada y movieron la máquina a Moffett Field, California, donde se encontraba el Ames Research Center.
La mudanza ralentizó el desarrollo y la máquina no se completó hasta 1972. Para entonces la estimación original de $8 millones el primer diseño en 1966 había aumentado a $31 millones, mientras que el rendimiento había disminuido aún más, de 1 GFLOPS a 250 MFLOPS o quizás 100 MFLOPS con picos de 150. La NASA también decidió reemplazar el B6500 con un PDP-10, de uso común en el AMES, pero esto requeriría del desarrollo de nuevo compiladores y programas de soporte. Cuando el ILLIAC fue finalmente encendido en 1972 se encontró meramente operable y fallando continuamente. Los esfuerzos para corregir la estabilidad permitieron ejecutar el primer programa completo en 1974, y su completa operación en 1975. Incluso la "completa operación" estaba algo limitada; la máquina operaba solo de lunes a viernes y tenía hasta 40 horas de mantenimiento planeado cada semana. La primera aplicación completa que corrió en la máquina fue en 1976, el mismo año que el Cray-1 fue lanzado con básicamente el mismo rendimiento.
No obstante, el ILLIAC fue usándose de manera incremental en los siguientes años, y el Ames le añadió su propia versión de FORTRAN, CFD. En problemas que podían se paralelizados la máquina era todavía la más rápida del mundo, mejorando el rendimiento del CDC 7600 de dos a seis veces, y se considera, generalmente, que es la máquina más rápida del mundo hasta 1981. Para la NASA, la máquina era "perfecta", dado que el rendimiento se afinó para programas ejecutando la misma operación sobre conjuntos de datos, que es exactamente de lo que trata la mecánica de fluidos computacional. La máquina fue finalmente dada de baja en 1982, y la división de computación avanzada de la NASA terminó con ella.
Burroughs fue capaz de usar el diseño básico solo para un sistema comercial, el Parallel Element Processing Ensemble, o PEPE. PEPE fue diseñado para permitir seguimiento de alta precisión de 288 misiles ICBMs, cada uno asignado a un PE modificado. Burroughs construyó solo un sistema PEPE, aunque una continuación del diseño fue construida por los Laboratorios Bell.
La unidad de control del ILLIAC IV y el chasis de uno de los elementos de procesamiento se encuentran ahora en el Museo Histórico de Ordenadores en Mountain View, California.

## Legado

Aunque el esfuerzo del ILLIAC terminó con resultados desalentadores, intentos de entender las razones del fracaso de la arquitectura del ILLIAC IV avanzaron la investigación en computación paralela. Durante los 1980s un número de compañías usaron la misma aproximación para construir incluso más máquinas paralelas, con compiladores que podían hacer un mejor uso del paralelismo. Las CM-1 y CM-2 de la corporación Thinking Machines Corporation son excelentes ejemplos del concepto "clásico" del ILLIAC IV, aunque ellos también incluyeron una mucho mejor conectividad entre sus PE con el objetivo de evitar los cuellos de botella que reducían el conjunto de problemas adecuados para el uso en el ILLIAC.
La mayoría de los supercomputadores de la época tomaron otra aproximación a la computación de altas prestaciones, usando un único procesador vectorial de muy alta velocidad. Similares al ILLIAC al menos en concepto, estos diseños de procesadores cargaban muchos elementos de datos en un solo procesador específico en vez de en un gran número de procesadores menos potentes. El ejemplo clásico de este diseño es el Cray-1, el cual tenía un rendimiento parecido al del ILLIAC, pero era capaz de proporcionar este rendimiento paralelo a una más amplia gama de problemas, no solo a aquellos que era altamentemente paralelos. Hubo más de una pequeña reacción en contra del diseño del ILLIAC como resultado, y durante un tiempo el mercado de supercomputadores miró los diseños masivamente paralelos con desdén, incluso cuando eran exitosos. Tal y como dijo el famoso Seymour Cray, "Si estuvieses arando un campo, qué preferirías usar? Dos fuertes bueyes o 1024 pollos?"
Pero el tiempo ha probado que la aproximación del ILLIAC es la mejor para casi toda la computación científica. Hoy, los supercomputadores son casi universalmente compuestos por ordenadores comunes, precisamente el concepto en el que el ILLIAC fue pionero. El progreso en la tecnología de compiladores explica mucho de esto, aunque la rápida, y quizás inesperada, continua mejora del diseño de microprocesadores hizo el diseño de vectores propios más lentos en casi todas las cargas de trabajo.