Il CDC 6600 fu il primo supercomputer costruito dalla Control Data Corporation nel 1963. In generale viene considerato il primo supercomputer con un ampio successo commerciale. Divenne il più veloce supercomputer della sua era essendo tre volte più rapido del precedente IBM 7030 Stretch. Rimase il più potente computer del pianeta tra il 1964 e il 1969 quando venne sorpassato dal successore CDC 7600. Fu il primo sistema a implementare lo scoreboarding.
L'organizzazione del CDC 6600 venne utilizzata da CDC per lo sviluppo del più semplice (e lento) CDC 6400 e in seguito per lo sviluppo di un sistema basato su due processori CDC 6400 che divenne il CDC 6500. Queste macchine sono compatibili a livello di codice con il 6600 ma per via del progetto più semplice e sequenziale sono sistemi più lenti. Il successore CDC 7600 inizialmente doveva essere compatibile con il codice del 6600 ma in seguito si abbandono la compatibilità per ottenere prestazioni migliori.
Storia
I primi progetti CDC erano basati sull'architettura sviluppata da Seymour Cray all'ERA che Cray aveva migliorato per la CDC. Dopo lo sviluppo della macchina sperimentale Little Character venne messa in commercio la macchina CDC 1604 uno dei primi computer commerciali basati su transistor e una delle più veloci macchine del mercato. I dirigenti pianificarono lo sviluppo di una nuova serie di macchine indirizzate al mercato commerciale e quindi con delle istruzioni appositamente progettare per i compiti commerciali. Cray non era interessato a questo progetto, lui voleva realizzare una macchina 50 volte più rapida del 1604. Cray sotto la richiesta dei dirigenti completò un dettagliato piano quinquennale che prevedeva la realizzazione del più veloce computer del pianeta.
Con il suo team di sviluppo si spostò nel nuovo laboratorio vicino alla sede della CDC e iniziò a sperimentare delle versioni ad alta velocità dei transistor basati sul germanio che Cray aveva utilizzato per il 1604. Dopo molti esperimenti con il germanio concluse che quel semiconduttore non avrebbe permesso di realizzare dei transistor molto veloci in modo semplice. In effetti le macchine desiderate della dirigenza e sviluppate per compiti commerciali, cioè la serie CDC 3000, si erano spinte fino al limite della loro tecnologia. Cray decise di puntare sui nuovi transistor basati sul silicio sviluppati dalla Fairchild Semiconductor che erano stati presentati da poco e fornivano frequenze di funzionamento molto elevate.
Nello stesso periodo la CDC stava diventando una grande società. Cray diventava sempre più insofferente alle continue interferenze dei dirigenti che a suo dire creavano inutili complicazioni e avevano delle richieste inutili. Nel 1962 il CDC 3600 era in produzione e i rapporti tra Cray e la dirigenza erano diventati molto tesi. Cray parlò con il CEO William Norris e gli disse che: o gli lasciava creare un laboratorio lontano della sede principale oppure lui avrebbe abbandonato la società. Norrir conosceva l'importanza di Cray nella progettazione dei sistemi e acconsentì alla realizzazione di un altro laboratorio.
Dopo una breve ricerca Cray decise di creare il laboratorio nella sua città natale, Chippewa Falls dove acquistò un ampio appezzamento di terreno. Nonostante la realizzazione del laboratorio abbia inizialmente rallentato lo sviluppo dei progetti, una volta che il laboratorio fu a regime i progetti progredirono rapidamente. Nello stesso periodo i nuovi transistor stavano raggiungendo la maturità necessaria per delle applicazioni complesse come quelle ideate da Cray. Cray lavorò con Jim Thornton un progettista molto capace alla realizzazione dell'architettura della macchina.
Più di cento CDC 6600 vennero vendute durante la vita operativa della macchina. Molti laboratori di ricerche nucleari, università e multinazionali acquistarono la macchina. Dopo la realizzazione del 6600 Cray iniziò a sviluppare il successore 7600, l'obiettivo del nuovo modello era di sviluppare una potenza di calcolo di 10 volte superiore a quella del 6600. I successivi prodotti CDC i CDC Cyber 70 e 170 erano molto simili al CDC 6600.
Nel 1966 L. J. Lander and T. R. Parkin usando un CDC 6600 trovarono un controesempio alla congettura di Eulero per k=5 : (275 + 845 + 1105 + 1335 = 1445) .
Descrizione Una tipica macchina utilizzava una singola CPU per gestire l'intero sistema. Un tipico programma inizialmente caricava i dati nella memoria (spesso utilizzando le librerie ottimizzate), processava i dati a poi li salvava in memoria: tutto ciò implicava l'utilizzo di CPU complesse, estese e dunque soggette a forti penalità prestazionali per via delle latenze di comunicazione. Difatti i progettisti devono garantire che i segnali attraversino le unità funzionali prima della successiva elaborazione e quindi la frequenza massima è limitata.
Cray seguì un altro approccio. In quel periodo una CPU era molto più lenta della memoria, per esempio se la moltiplicazione tra due numeri richiedeva quindici cicli di clock per l'esecuzione l'accesso alla memoria richiedeva solo uno o due cicli e quindi era considerata trascurabile. Nel 6600 il tempo di accesso e il tempo di elaborazione era simile.
Invece di delegare tutte le funzioni alla CPU nel 6600 questa gestiva solo le funzioni aritmetiche e logiche. Questo rendeva la CPU molto piccola e quindi questa poteva operare a frequenze molto elevate. Il nuovo progetto combinato con i veloci transistor da 100 ns (10 MHz) permise di realizzare un processore dieci volte più rapido di quello prodotto dalla concorrenza. Inoltre il processore era anche molto efficiente, per esempio poteva eseguire una moltiplicazione in solo 10 cicli di clock.
Ovviamente essendo semplice il processore non poteva svolgere tutte le operazioni necessarie al normale funzionamento di un computer. Le istruzioni di caricamento e salvataggio dei dati in memorie e le operazioni di I/O vennero rimosse dal processore. Cray affido queste mansioni a dei processori esterni che chiamò PP o peripheral processing units. Per supportare il processore dieci PP lavoravano in parallelo, questa architettura migliorava significativamente le prestazioni del sistema.
Ovviamente questa architettura era anche molto più costosa di un'architettura classica. Per mantenere il costo contenuto e le prestazioni adeguate i PP vennero realizzati per essere semplici. I PP vennero basati sui processori dei CDC 160A, questi processori erano a 12 bit ed erano molto lenti rispetto alla CPU e per questo Cray ne utilizzò 10 che venivano collegati alla memoria e alla CPU da dei canali dedicati ad alta velocità.
Le macchine funzionava in una modalità particolare. In ogni istante di tempo una PP controllava la CPU e le assegnava un compito da eseguire. La scrittura dei programmi era difficoltosa dato che bisognava sincronizzare correttamente l'esecuzione dei dati con il loro caricamento. La CPU era molto più veloce della memoria e quindi i programmi dovevano sfruttare i tempi morti di elaborazione per caricare i dati. La CPU avrebbe dovuto attendere 10 cicli di clock per caricare i dati dalla memoria ma utilizzando le 10 PP in parallelo i tempi di accesso si riducevano a un ciclo di clock.
Le 10 PP erano implementate in modo virtuale dato che in realtà in hardware esisteva una sola PP. La CPU accedeva a 10 insiemi di registri che simulavano lo stato dei 10 PP. I processori PP venivano gestiti in modo esclusivo permettendo al processore di accedere al singolo registro di competenza. Più rotazioni delle PP erano necessarie per eseguire un'istruzione completa. Una rotazione completa dei registri richiedeva 1000 nanosecondi e un'istruzione poteva richiedere da 1 a 5 rotazioni dei registri, le rotazioni dei registri simulavano l'accesso alla memoria.
L'architettura base della CPU del 6600 attualmente verrebbe classificata come architettura RISC dato che il processore era dotato di un set limitato di istruzioni e aveva limitate modalità di accesso alla memoria. Allora (e per molti anni a seguire) la filosofia imperante era quella di realizzare CPU in grado di eseguire operazioni molto specializzate e complesse in modo da poter coprire al meglio l'esigenza dei programmatori. Questi processori come già indicato prima erano molto complessi e quindi lenti a differenza della CPU del 6600 che grazie alla sua semplicità era molto veloce.
Il Central Processor (CP) Il Central Processor (CP) e la memoria dei 6400, 6500 e 6600 era formata da parole di 60 bit. la ragione di un'architettura a 60 bit era che questa permetteva di utilizzare parole di 2, 3,4,5,10,12 e 15 bit quindi la memoria poteva essere riempita con parole di diversa lunghezza per riempire al meglio la memoria (un componente molto costoso a quell'epoca).
Il Central Processor aveva otto registri di uso generico a 60 bit indicati da X0 a X7, aveva otto registri a 18 bit per gli indirizzi da A0 a A7 e otto registri a 18 bit, da B0 a B7, utilizzati per la gestione degli indici. Dei registri addizionali erano utilizzati per lo scoreboarding e non erano visibili all'esterno del processore. Altri registri (RA e FL) erano utilizzati dal sistema operativo. Il CP non aveva istruzioni per caricare o salvare i dati dato che questo era svolto dai PP. In accordo alla filosofia RISC, il processore non poteva leggere o scrivere dati direttamente dalla memoria al processore ma doveva sempre passare dai registri. La lettura e la scrittura dei dati avveniva tramite registri. L'immissione di un indirizzo nei registri da A1 a A5 produceva la lettura dei dati dalla memoria e la loro immissione nei registri da X1 a X5. L'immissione di indirizzi nei registri A5, A6 e A7 invece produceva la scrittura dei registri X5, X6 e X7 nelle locazioni di memoria indicata. I registri X0 e A0 non erano coinvolti nelle operazioni di lettura e scrittura dei dati. La reale lettura e scrittura dei dati in memoria veniva svolta in modo indipendente dal funzionamento del processore, dato che veniva svolta in modo asincrono, e nelle condizioni ottimali veniva svolta in otto cicli di clock. In un moderno progetto le operazioni di lettura e scrittura della memoria sono svolte da unità load/store interne al processore ma asincrone rispetto alle altre unità interne di elaborazione. Le operazioni in virgola mobile erano il fiore all'occhiello del sistema: il CDC 6600 era in grado di eseguire una moltiplicazione a 60 bit in virgola mobile nello stesso tempo e con la stessa velocità di un salto condizionato.
Il CP del 6600 includeva 10 unità funzionali che operavano in parallelo in modo da eseguire più operazioni in parallelo. Attualmente questa architettura verrebbe definita superscalare, ma a quel tempo era una caratteristica unica. Il sistema eseguiva e decodificava le istruzioni più velocemente di quante ne potesse caricare dalla memoria. Le unità erano: unità di esecuzione in virgola mobile (2) unità di divisione in virgola mobile unità di somma in virgola mobile unità di somma sommatore (2 unità, migliorano le prestazioni della memoria) unita di shift unità di logica booleana unità di salto