# ILLIAC IV

L'ILLIAC IV è uno dei più famosi supercomputer. Fu l'ultimo di una serie di computer di ricerca dell'University of Illinois. Il progetto dell'ILLIAC IV è un progetto basato su un parallelismo massivo con 256 processori, sviluppato per trattare grandi quantità di dati, un'idea che è alla base dei processori vettoriali. La macchina fu alla fine presentata nel 1976, dopo un decennio di sviluppo ed era molto in ritardo, molto costosa e con prestazioni molto inferiori a macchine come il Cray-1.

## Storia

Verso i primi anni sessanta lo sviluppo dei computer si indirizzava verso una diminuzione della complessità in modo da renderli più veloci potendo implementare direttamente in hardware le istruzioni. Infatti aggiungere funzioni poteva rendere il computer più lento dato che il clock della macchina dipende dalla velocità delle operazioni e il clock massimo è fissato dall'istruzione più lenta della macchina. L'architettura dell'hardware di allora prevedeva il progetto dei singoli transistor che realizzavano le funzioni logiche della cpu. L'aggiunta di funzioni logiche aumenta il numero di transistor e quindi rallenta il sistema. Per raggiungere la massima velocità i progettisti di CPU dovevano cercare un compromesso ottimale.
Molte soluzioni vennero esplorate alla fine degli anni 60. Una di queste era l'utilizzo di una struttura chiamata pipeline. Normalmente una CPU preleva un'istruzione, la decodifica, l'esegue e salva il risultato. Tutte queste operazioni vengono eseguite da un'unità polifunzionale che può eseguire una singola istruzione alla volta. In una struttura a pipeline esistono diverse unità specializzate che eseguono questi compiti in modo parallelo, come in una catena di montaggio. La struttura a pipeline fu una delle maggiori innovazioni di Seymour Cray che rese il CDC 6600 fino a dieci volte più veloce dei suoi concorrenti.
Un'altra soluzione al problema era il calcolo parallelo, ossia progettare computer con un certo numero di CPU generiche. Un computer progettato in questo modo fornisce buone prestazioni solo quando il problema da affrontare può essere agevolmente suddiviso in un sottoinsieme di problemi più piccoli che ogni CPU affronta in modo indipendente. Ma non tutti i problemi possono essere parallelizzati; difatti questo è tuttora un grande problema per l'informatica. L'uso di CPU generiche può essere molto costoso, ma in un progetto massivamente parallelo si possono utilizzare anche delle CPU più semplici.
Il team di ricerca di Westinghouse esplorò questa soluzione con il progetto Solomon. Loro notarono che i computer erano utilizzati principalmente per eseguire calcoli matematici per gli ingegneri e gli scienziati. Loro svilupparono una CPU che si sarebbe occupata di controllare diverse unità di calcolo (che oggi chiamiamo ALU), che si occuperanno di svolgere i calcoli in parallelo. Ogni unità di calcolo eseguiva lo stesso programma ma con dati diversi, un concetto conosciuto come SIMD. Nel 1964, con un contratto dell'US Air Force RADC Research Arm, fu sviluppato un prototipo di scheda madre, ma il contratto con il RADC terminò e Westinghouse decise di non continuare il progetto.
Uno dei principali sviluppatori del progetto Solomon Daniel Slotnick si trasferì all'University of Illinois e convinse l'università a continuare la ricerca. Nel 1964 l'università firmò un contratto con il DARPA per finanziare il progetto che in seguito sarebbe diventato l'ILLIAC IV seguendo la linea di ricerca già iniziata da altri progetti. Burroughs era un collaboratore primario e doveva fornire gli hard disk ad alta velocità oltre a provvedere allo sviluppo del Burroughs B6500, un computer utilizzato per gestirli. Texas Instruments aveva un contratto per la realizzazione di diversi circuiti integrati ECL. ILLIAC è stata la prima macchina a utilizzare gli ECL. Lo sviluppo venne avviato nel 1965 e il primo progetto fu terminato nel 1966.
Il progetto puntava ad ottenere un computer in grado di processare un miliardo di istruzioni per secondo (un GigaFLOPS). Per raggiungere l'obiettivo si era previsto di utilizzare 256 unità elementari di calcolo a 13 MHz, gestite da quattro CPU. L'ILLIAC era progettato con un'architettura a 64 bit, ed ogni unità elementare aveva una memoria di 2048 parole per memorizzare i risultati. Le CPU erano in grado di accedere a tutta la memoria della macchina a differenza delle unità di calcolo, infatti queste per questioni di semplicità potevano accedere solo alla loro zona di memoria. Ogni unità di calcolo era dotata di 6 registri per uso generico e poteva spostare i dati dai registri verso un registro di una delle otto unità di calcolo circostanti.
Inizialmente si pensava di alloggiare tutte le 256 unità di calcolo in un solo computer ma in breve si comprese che il progetto andava modificato e semplificato. Si decise di dividere le unità in blocchi da 64, da alloggiare in armadi separati. Visti i ritardi di progetto e costruzione ci si rese conto che realisticamente si poteva realizzare un solo armadio e quindi le prestazioni iniziali da 1 GigaFLOPS si sarebbero ridotte a 200 MegaFLOPS.
Il lavoro all'università si concentrò primariamente sulla realizzazione di trasferimento efficiente di dati verso le unità di calcolo. Il problema di questa tipologia di computer è che se non esegue software parallelo, dunque non è più veloce di altri sistemi di calcolo. Per permettere l'esecuzione di codice parallelo furono sviluppati molti linguaggi di programmazione come l'IVTRAN e il TRANQUIL, delle versioni parallele del Fortran, e il Glypnir, una conversione parallela dell'ALGOL. Normalmente questi linguaggi fornivano un supporto diretto degli array di dati da processare in modo da fruttare le unità di calcolo parallele.
Mentre il computer era sotto sviluppo alla fine degli anni 60 si svolsero diverse proteste all'università, dato che il progetto era realizzato con sovvenzioni militari e molti ritenevano che l'università fosse in combutta con il ministero della difesa. Le proteste raggiunsero l'apice il 9 maggio 1970 il giorno delle Illazioni. Dopo l'attentato del 24 agosto all'edificio di matematica dell'University of Wisconsin l'Università decise di abbandonare il progetto, che passò in mano alla NASA; quest'ultima per via del Programma Apollo aveva un'enorme disponibilità economica ed era interessata ad ogni sviluppo tecnologico che potesse essere utilizzato in ambito spaziale. La NASA creò la Advanced Computing Division, e la macchina venne spostata a Moffett Field California, casa dell'Ames Research Center.
Lo spostamento rallentò lo sviluppo della macchina, che fu completata solo nel 1972. Dagli iniziali 8 milioni di dollari del progetto del 1966, il costo finale fu di 31 milioni di dollari e le prestazioni si erano ridotte dagli iniziali 1 GigaFLOPS a 100 MegaFLOPS o 150 MegaFLOPS di picco. Nonostante i molteplici problemi, se la macchina doveva trattare problemi parallelizzabili era dalle 2 alle 6 volte più veloce di un CDC 7600. Per la NASA questa era una macchina perfetta, dato che i problemi di fluidodinamica computazionale sono molto parallelizzabili.
Sebbene l'ILLIAC fu terminato nel 1972 la macchina non era affidabile. Continuava ad avere problemi di affidabilità che gli ingegneri tentarono di risolvere fino a quando nel 1974 fu in grado di eseguire il primo programma completo e divenne operativa. Nonostante la macchina fosse dichiarata operativa, funzionava solo dal lunedì al venerdì ed era in grado di richiedere fino a 40 ore di manutenzione alla settimana. La prima applicazione completa fu pronta per il 1976, lo stesso anno che venne presentato il Cray-1 un supercomputer con le stesse prestazioni. Tuttavia la macchina venne utilizzata negli anni seguenti e anzi ad Ames svilupparono la loro versione di Fortran. Infine nel 1982 la macchina venne dismessa e l'Advanced Computing Division venne disciolto.
Sebbene l'ILLIAC IV non abbia riportato i risultati sperati lo studio dei suoi insuccessi e dei fallimenti della sua architettura spinse lo sviluppo delle architetture parallele che portarono alla realizzazione di macchine massivamente parallele come la Thinking Machines e la CM-1 e CM-2. Tuttavia l'idea di utilizzare processori disposti in configurazione matriciale è una delle idee chiave delle macchine parallele e un passo fondamentale del calcolo scientifico. La CDC STAR-100, la TI ASC e il famoso Cray-1 sono tutte macchine ad alte prestazioni basate su singoli processori vettoriali ispirati dal progetto dell'ILLAC.