thumb|right|250px|UC del computador paralelo 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