Cray-1
Da Wikipedia, l'enciclopedia libera.
Il Cray-1 è un supercomputer sviluppato da un team di progettisti guidati da Seymour Cray per la Cray Research. Il primo Cray-1 venne installato ai Los Alamos National Laboratory nel 1976, e divenne famoso come uno dei più famosi e meglio riusciti supercomputer della storia.
Indice |
[modifica] Storia
All'inizio degli anni 70 Cray stava lavorando per la Control Data Corporation a una nuova macchina chiamata CDC 8600, il successore logico del CDC 6600 e CDC 7600. L'8600 era fondamentalmente quattro 7600 inseriti in una singola scatola con una modalità speciale di funzionamento che gli consentiva di lavorare all'unisono con una modalità tipo SIMD.
Jim Thornton, inizialmente collega di Cray durante il progetto aveva lanciato un progetto più radicale, il CDC STAR-100. A differenza dell'approccio a forza bruta dell'8600 lo STAR seguiva una strada differente. Il processore principale dello STAR era meno potente di quello del 7600 ma lo STAR era dotato di hardware aggiuntivo che velocizzava alcune operazioni molto comuni nei supercomputer.
Nel 1972 l'8600 era giunto alla fine. La macchina era incredibilmente complessa e era diventata ingestibile. Bastava che un singolo componente si rompesse per bloccare la macchina. Cray andò a parlare con William Norris, il Control Data e CEO della società, affermando che era necessaria una riprogettazione completa. In quel periodo la società stava subendo una crisi finanziaria e lo stesso STAR era stato un insuccesso. Norris quindi non aveva i soldi per finanziare una riprogettazione della macchina.
Cray abbandono la società e ne fondò una nuova con sede a poche centinaia di metri dalla CDC che lui e altri ex dipendenti della CDC avevano acquistato a Chippewa Falls (Wisconsin). Il gruppo iniziò a cercare un'idea; inizialmente l'idea di realizzare un supercomputer sembrava impossibile, poiché se anche la CDC non aveva avuto abbastanza soldi per realizzare il progetto come avrebbe potuto fare una piccola compagnia appena nata e praticamente senza fondi. Ma il CTO della società fece degli incontri con alcuni agenti di Wall Street e trovò investitori disposti a finanziare la realizzazione di un nuovo supercomputer. Quindi alla società di Cray mancava oramai solo un nuovo progetto.
Nel 1975 il Cray-1 venne annunciato. L'eccitazione dovuta alla nuova macchina creò una guerra tra i centri LLNL e Los Alamos su chi dovesse essere il primo cliente. Los Alamos vinse il primo esemplare e nel 1976 venne installato il Cray-1 con matricola 001 per un periodo di prova di alcuni mesi. Il National Center for Atmospheric Research (NCAR) divenne cliente ufficiale della Cray Researc nel luglio del 1977 pagando 8.86 milioni di dollari (7.9 milioni di dollari e 1 milione di dollari per i dischi). La macchina del NCAR venne dismessa nel gennaio del 1989. La compagnia si aspettava di vendere una dozzina di macchine ma in realtà vendette più di ottanta macchine a un prezzo compreso tra i 5 milioni e gli 8 milioni di dollari. Le sue macchine resero Cray una celebrità nel suo ambiente e la sua compagnia un successo fino all'inizio degli anni 90 quando il mercato dei supercomputer si sgonfiò.
Il Cray-1 venne seguito nel 1982 dal Cray X-MP una macchina da 800 Megaflops e la prima macchina multiprocessore della società. Nel 1985 venne presentato il Cray-2 una vera innovazione del settore. La macchina era in grado di sviluppare 1.9 Gigaflops di picco. Questo computer fu un limitato successo commerciale per via di problemi legati alle reali prestazioni delle macchine nell'esecuzione dei programmi. Un nuovo modello basato su un disegno molto conservativo venne presentato nel 1988, il Cray Y-MP un'evoluzione dei Cray-1 e X-MP dai quali prese il nome.
[modifica] Premessa
Molte applicazioni scientifiche consistono nella lettura di un ampio insieme di dati nella loro elaborazione e nella loro scrittura. Spesso le operazioni sono di carattere ripetitivo, cioè sono identiche per tutto l'insieme di dati. Per esempio un programma potrebbe leggere un milione di dati sommare ad ogni dati il numero 5 e salvare il risultato in memoria. Questo viene tradotto con l'istruzione a = add b
m il processore per eseguire l'istruzione esegui i seguenti passi. Legge l'istruzione, la decodifica, determina la posizione dei dati, li carica e infine esegue l'operazione vera e propria e salva il risultato in memoria.
Nel sistema STAR delle nuove istruzioni permettevano di eseguire i cicli in modo molto efficiente. In sostanza si poteva specificare alla macchina quale insieme di dati andassero trattati con la stessa istruzione, quindi dopo aver decodificato l'istruzione il processore doveva solo caricare i dati, elaborarli e salvarli, saltando la fase di caricamento delle istruzioni, della decodifica e della individuazione dei dati da caricare. Se l'insieme di dati da trattare è elevato l'aumento di prestazione del sistema può essere notevole.
In realtà l'aumento di prestazioni dei sistemi come lo STAR non è così elevato dato che le CPU utilizzano un sistema a pipeline che esegue lavorando come una catena di montaggio aumenta la prestazioni della CPU e riduce il divario rispetto a una macchina come la STAR.
I processori vettoriali sapendo in anticipo quale insieme di dati vada elaborato possono implementare delle tecniche di caricamento massiccio dei dati che permette di incrementare la banda passante tra il processore e la memoria. Questo incrementa le prestazioni dato che normalmente i processori sono molte più rapidi della memoria.
Il CDC STAR utilizzava un'architettura del tipo "memoria-memoria". Questa tipologia di architettura permette alle pipeline di leggere i dati direttamente dalla memoria. Questa architettura permette di utilizzare vettori di qualsiasi lunghezza o profondità e quindi è molto flessibile e veloce con le istruzioni vettoriali. Purtroppo per venir implementata correttamente richiede pipeline molto profonde per poter processare istruzioni mentre il sistema attende i dati dalla memoria principale. Purtroppo pipeline molto profonde sono molto penalizzanti nel passaggio da istruzioni vettoriale a istruzioni scalari. Il sistema inoltre era dotato di istruzioni scalari lente che combinale con lento cambio da istruzioni vettoriali a istruzioni scalari rendeva la macchina lenta nelle applicazioni reali. Questo era prevedibile tenendo conto della legge di Amdahl.
Cray analizzo il fallimento dello STAR e ne trasse utili insegnamenti. Cray decide che la sua macchina doveva essere molto veloce anche nell'elaborazione scalare in modo da poter compensare la commutazione tra il funzionamento vettoriale e quello scalare. Inoltre Cray notò che l'utilizzo di registri poteva migliorare le prestazioni del sistema in molti casi.
Solo le prime architetture ignorarono il fatto che la maggior parte delle operazioni vengono eseguite sugli stessi data. Lo STAR ignorava questo con il suo accesso diretto alla memoria. Se per esempio lo STAR avesse dovuto eseguire cinque operazioni su un insieme di dati avrebbe dovuto leggere cinque volte i dati dalla memoria mentre sarebbe stato molto più efficiente leggere i dati, salvarli nei registri e accedere direttamente ai registri per le operazioni. I registri sono dei componenti molto costosi in termini di transistor e inoltre sono meno flessibili dato che stabiliscono una lunghezza fissa alla dimensione dei vettori. Quindi nel caso di accesso a un vettore lungo lo STAR lo poteva indicare direttamente mentre il progetto di Cray prevedeva la suddivisione del vettore nei vari registri e la loro elaborazione. Questo rallentava leggermente il processore ma Cray ritenne che la perdita di prestazione fosse accettabile.
Dato che spesso le operazioni vettoriali caricano ridotti insiemi di dati sui quali eseguono diverse operazioni Cray decise di realizzare una pipeline appositamente per le operazioni vettoriali. Per esempio le operazioni di somma e di moltiplicazione avevano un proprio hardware dedicato in modo da non bloccare il processore durante le operazioni. Il processore poteva decodificare la nuova istruzione mentre la precedente veniva eseguita. Cray indicò il concetto come "concatenamento" e quindi i programmi per sfruttare adeguatamente il processore dovevano concatenare insieme più istruzioni.
[modifica] Descrizione
Il nuovo sistema fu il primo sistema progettato da Cray a far uso dei circuiti integrati. Sebbene i circuiti integrati fossero disponibili fin dagli anni 60 solo agli inizi degli anni 70 raggiunsero le prestazioni sufficienti per applicazioni ad alte prestazioni come i supercomputer. I circuiti integrati utilizzati nel progetto di Cray erano molto semplici, normalmente contenevano quattro porte logiche ed ogni porta logica conteneva quattro transistor. In totale il Cray-1 conteneva circa 200.000 porte logiche.
I circuiti integrati veniva montati su ampi circuiti stampati a cinque strati contenenti 144 circuiti stampati per scheda. I circuiti vennero montati uno di fronte all'altro per migliorare il raffreddamento e disposti in ventiquattro rack da 28 pollici contenenti 72 schede doppie. Un tipico modulo (una singola unità di elaborazione) richiedeva una o due schede madri. In totale la macchina richiedeva 1992 moduli con 113 varianti.
Un problema scoperto durante la fase iniziale di sviluppo era che per via della elevata velocità di alcuni componenti scelti per il progetto il segnale non arrivava in tutta la scheda madre in modo corretto, alcuni componenti ricevevano un segnale troppo rapidamente, e quindi il segnale era troppo debole per permettere una sicura identificazione del livello logico. Il problema venne risolto aggiungendo alcuni leggeri ritardi lungo queste linee. I ritardi venivano creati aggiungendo porte logiche che ritardassero il segnale e lo amplificassero oppure aggiungendo piccoli condensatori. Si stima che il 40% dei circuiti integrati del sistema servissero per ripulire il segnale o per introdurre dei ritardi.
Come sempre Cray spese molto tempo per perfezionare il progetto meccanico ed elettrico dei sistema in modo da ottenere un'elevata frequenza di funzionamento. I moduli di elaborazione erano molto vicini ai moduli di alimentazione per ridurre il rumore ed elevare la frequenza di funzionamento. Ogni cavo che collegava un modulo era attorcigliato con una massa in modo da ridurre le interferenze elettromagnetiche, inoltre ogni cavo aveva una lunghezza specifica in modo da evitare riflessione dell'onda elettromagnetica che lo percorreva. Ogni amplificatore era bilanciato in modo da mantenere costante la richiesta di potenza elettrica e quindi ridurre i disturbi dovuti all'alimentazione.
I circuiti ad alte prestazioni generavano una notevole potenza termica che i progettisti del Cray-1 analizzarono con attenzione per ottenere un buon sistema di raffreddamento e un supporto meccanico adeguato. Ogni circuito elettronico veniva appaiato con un un secondo disposto frontalmente al primo. Tra il primo e il secondo veniva disposto un foglio di rame per permettere al calore di scorrere agevolmente lungo il foglio e poter essere raffreddato dal freon che scorreva al lato della macchina. Il primo Cray-1 venne ritardato di sei mesi per risolvere i problemi legati all'unità di refrigerazione. Il lubrificante che veniva normalmente miscelato con il freon per permettere al compressore di funzionare correttamente fuoriusciva dalle guarnizioni e finiva per sommergere i circuiti elettronici danneggiandoli. Nuove tecniche di saldatura risolsero il problema impedendo al lubrificante di fuoriuscire dai condotti.
Per ottenere il massimo delle prestazioni possibili il telaio della macchina fu progettato con la forma di una grande C. Le parti del sistema più strette con i tempi vennero disposte sulla parte interna della C in modo da ridurre la lunghezza dei collegamenti e quindi i tempi di trasferimenti. Questo insieme alle altre scelte tecniche permise di ridurre il tempo di ciclo a 12.5 ns (80MHz), non veloce quanto gli 8 ns (125MHz) previsti per l'8600 ma sufficienti per superare il CDC 7600 e lo STAR. NCAR stimò che la macchina fosse circa 4.5 volte più rapida del CDC7600.
Il Cray-1 era un sistema a 64 bit a differenza del 7600/6600 che erano macchine a 60 bit (anche 8600 doveva essere a 64 bit). L'ìndirizzamento era a 24 bit e permetteva al massimo 1 milione di parole (8 MB) di memoria principale. La memoria era disposta su 16 banche, ogni banco con un tempo di ciclo di 50 ns in modo da permettere la lettura di quattro parole per ciclo di clock.
I registri principali consistevano in 8 registri a 64 bit scalari (S) e 8 registri a 24 bit per gli indirizzi (A). In aggiunta erano presenti 64 registri temporanei per memorizzare A e S chiamati T e B ma che non erano visibili dal set di istruzioni. Le unità vettoriali aggiunsero 8 registri vettoriali contenenti ognuno 64 elementi a 64 bit oltre a un registro per la lunghezza del vettore (VL) e uno per la maschera del vettore (VM). Infine il sistema conteneva un clock a 64 bit e quattro registri a 64 bit per il buffer delle istruzioni che erano a 16 bit e quindi contenevano 16 istruzioni. Le memorie erano progettate in modo da poter carica i registri vettoriali in un ciclo di clock mentre gli accessi i registri scalari e di indirizzamento richiedevano due cicli di clock. Invece l'intero buffer di istruzioni poteva essere riempito con quattro cicli di clock.
Il sistema era dotato di dodici unità funzionali ma era dotato di un limitato parallelismo. Poteva caricare un'istruzione nell'unità funziona per ciclo di clock e dato che due unità potevano funzionare in parallelo il sistema in teoria poteva fornire fino a 160 MIPS (80 MHz x 2 istruzioni) sebbene nella realtà il sistema sviluppava circa 135 megaflops. Tuttavia utilizzando con accortezza le istruzioni vettoriali il sistema poteva sviluppare fino a 250 megaflops.
Il sistema era progettato per operare con ampi insiemi di dati e quindi fu speso molto tempo per realizzare un sistema di I/O efficiente. I primi progetti Cray al CDC includevano due computer separati per gestire le operazioni di ingresso uscita. Nel Cray-1 questo non fu necessario dato che la macchina includeva 6 controller di canale in grado di accedere alla memoria ogni quattro cicli di clock. Ogni controller leggeva 16 bit di dati con tre bit di controllo e uno per la correzione degli errori. Il sistema carica una parola in 100 ns e ogni secondo poteva prelevare 500.000 parole in totale.
Il primo modello Cray-1A pesava 5.5 tonnellate e includeva il sistema di refrigerazione basato sul freon. Configurato con un milione id parole di memoria principale la macchina consumava 115 KWatt di potenza. Un Data General SuperNova S/200 venne utilizzato come terminale per gestire il sistema ma in seguito venne sostituito dal Eclipse.
Il successivo Cray-1S era una versione leggermente più veloce (12 ns di tempo di clock) del primo Cray e poteva venir configurato con 1, 2 o 4 milioni di parole a 64 bit. Le macchine della Data General vennero sostituite da un sistema progettato internamente con architettura a 16 bit e con una potenza di 80 MIPS. Il sistema di I/O venne spostato su una macchina apposita collegata al sistema tramite un canale a 6 MB/s e un secondo controller da 100 MB/s tramite collegamento in fibra ottica. La separazione dei sistema I/O permise di realizzare molte configurazione del Cray-1. La più economica era l'S/500 senza sistema di I/O e con 0.5 Milioni di parole di memoria primaria. La più costosa era l'S/400 con 4 milioni di parole di memoria principale e 4 sistemi di I/O.
Il Cray-1S venne rimpiazzato dal Cray-1M dove la M indicava l'uso molto esteso della tecnologia MOS per la memoria principale e per il sistema di I/O. Il sistema 1M era disponibile in tre versioni, l'M/1200 con un milione di parole come memoria principale, l'M/2200 e l'M/4200 con 2 o 4 milioni di parole come memoria principale. Tutti i sistemi includevano due, tre o quattro sistemi di I/O e un secondo canale ad alta velocità opzionale. Gli utenti potevano richiedere un disco a stato solido da 8 a 32 milioni di parole basate su MOS-RAM.
[modifica] Software
Nel 1978, il primo pacchetto software standard per il Cray-1 venne prodotto. Il pacchetto era formato da:
- Cray Operating System (COS) (le ultime versioni utilizzarono l'UniCOS, il sistema operativo tipo UNIX di Cray),
- Cray Assembler Language (CAL), e
- Cray FORTRAN (CFT), il primo compilatore Fortran che automaticamente vettorializza i programmi.
[modifica] Altri progetti
[modifica] Collegamenti esterni
- (EN) CRAY-1 Computer System Hardware Reference Manual, Publication No. 2240004 Rev.C 11/77 (first three chapters) – From DigiBarn / Ed Thelen
- (EN) The Cray-1 Supercomputer – By Andie Hioki, student at San Jose State University (a detailed description of the system)