Home Computer Crays Supercomputer Site Map counter

Die CDC 6600

Der Name von Seymour Cray ist aufs engste mit der Entwicklung von Supercomputern verbunden. Seymour Cray arbeitete schon seit 1950 bei der Firma ERA an Rechnern mit hoher Geschwindigkeit für wissenschaftliche Einsatzzwecke. Die meisten anderen Hersteller, vor allem IBM, arbeiteten an Computern die den Ansprüchen von kommerziellen Anwendern entsprachen. Diese wollten primär keinen schnellen Rechner, sondern einen der große Datenmengen verarbeiten konnte.

CDC 6600Zu Ende der fünfziger Jahre veränderte auch ERA ihre geschäftliche Ausrichtung mehr in das kommerzielle Segment. Seymour Cray wechselte zu der Firma CDC (Control Data Corporation) die aufgrund eines Navy Auftrags an Rechnern arbeitete, die vor allem Berechnungen durchführen sollten. Nach dem Erstwerk bei CDC, der CDC 1604, einer verbesserten Version der ERA 1103 die er schon bei ERA baute, kam die CDC 6600 heraus um die es in diesem Artikel geht. Schon die CDC 1604 war sehr fortschrittlich, sie war einer der ersten Rechner die nur aus Transistoren aufgebaut waren.

Die CDC 6600 machte Seymour Cray bekannt, weil sie bei der Vorstellung der schnellste Rechner der Welt war. Diese Führung sollten die von Seymour Cray konstruierten Rechner fast dreißig Jahre lang behalten. Dies obwohl die Firma nicht zu den großen Computerfirmen gehörte. Sie hatte 34 Mitarbeiter. Im Labor arbeiteten nur 14 Ingenieure und 4 Programmierer. Sie war auch ein kommerzielle Erfolg. Sie gilt als erster Supercomputer, auch wenn es diesen Begriff damals noch nicht gab, er bürgerte sich erst in den siebziger Jahren ein. Ein Supercomputer gehört zu den schnellsten Rechnern der Welt und ist speziell auf die Berechnung ausgelegt. Die CDC 6600 deklassierte den bisherigen Spitzenreiter, die IBM 7030 Stretch, denn sie war dreimal schneller als dieser Rechner. IBM Chef J.R. Watson Junior schrieb ein berühmtes Memo, wie es sein könnte dass seine Firma die Führung in der Industrie verloren habe durch eine Firma mit 34 Angestellten inklusive dem Hausmeister ("Janitor") . Es wurde daher auch als "Janitor-Memo" bekannt. Es war der Anstoß bei IBM neue Rechner zu entwickeln um im öffentlichen Bewusstsein wieder die führende Computerfirma zu sein.

Während der mehr als vier Jahre, in denen die CDC 6600 konstruiert wurde, veränderte sich die Leistungsfähigkeit der Hardware drastisch. Transistoren und Eisenringe wurden schneller, Speicher mit höherer Kapazität schien möglich. Das erzeugte nun neue Probleme. Bei den hohen Geschwindigkeiten erzeugte die Verdrahtung der Einheiten Störungen. Es kam zu Oszillatoren, Rauschen, Übersprechen auf andere Leitungen und zuletzt rückte nun die Verdrahtungslänge in den Fokus, die nun bei 10 MHz schon kritisch wurde, Schließlich mussten alle Einheiten im Takt bleiben. Das bedeutete auch ein Signal musste innerhalb eines Taktzyklus auch den letzten Transistor erreicht haben, egal wie viele Transistoren es vorher durchlaufen hatte und wie viele Meter Kabel zwischen dem Taktgeber und dem Ziel lagen. Typischerweise bewegen sich Elektronen durch Leiter mit einer Geschwindigkeit von 200.000 km/h. Das ist schnell, aber in der Zykluszeit von 100 ns sind es nur 20 m.

Aufbau

Die CDC 6600 die auch Cyber 6600 genannt wurde aus einzelnen Transistoren hergestellt. Verwendet wurden Siliziumtransistoren, das war damals ungewöhnlich. Transistoren wurden nicht mit Silizium als Halbleiter erfunden, sondern mit Germanium. Germanium war in der ersten Dekade der Transistoren der alleinige Halbleiter, es war als einzige Metall in hinreichend reiner Form gewinnbar. Aber es ist erheblich teurer, da das Element sehr selten ist. Silicium gibt es dagegen wie Sand am Meer (Sand besteht vor allem aus Siliziumdioxid und ist ein Rohstoff für die Siliziumgewinnung). Erst die Erfindung des Zonenschmelzverfahrens und die Einführung von Siliziumtransistoren durch Fairchild brachten eine Geschwindigkeitssteigerung, denn diese schalteten schneller als die Germaniumtransistoren, die am Ende ihrer Entwicklung waren. Insgesamt bestand die CDC 6600 aus 400.000 Transistoren, ihre Komplexität war also mit dem 80386 Prozessor vergleichbar (275.000 Transistoren). Ein weiterer Vorteil der Siliziumtransistoren war, dass sie eine höhere Betriebstemperatur duldeten. Die Transistoren der CDC 6600 bestanden aus NPN Typen. Diese waren lange Zeit schwerer herzustellen als die PNP Typen, aber da die beweglichen Ladungen bei ihnen aus Elektronen bestanden, schalteten sie schneller. (Bei den PNP Transistoren wandern Elektronenmangelgebiete durch den Transistor, die man als "Löcher" bezeichnet").  Fortschritte in der Herstellung erlaubten es diese Transistoren mit hoher Zuverlässigkeit zu produzieren. Die Ausfallrate betrug pro Transistor 4 x 10-9 pro Stunde. Daraus leitete die Firma aufgrund der bekannten Transistorzahl eine MTBF von 2000 Stunden ab. Ursprünglich war ein Adressbereich von 131.072 Worten geplant und Seymour Cray wollte das 18-te Bit für andere Zwecke nutzen. Boeing, die später auch eine Speichererweiterung in Auftrag gaben, bestand aber auf einen maximalen Speicher mit 256 KWorten, so musste man die Architektur anpassen..

Die Transistoren waren in DCTL Bauweise verbunden (Direct Coupled Transistor Logic). Die Spannungen für logisch 1 und 0 betrugen +0,2 und +1,2 V. Ein Transistor schaltete innerhalb von 5 ns. Maximal 5 Transistoren konnten ohne Wiederstände zu einer Schaltung verbunden werden. Jedes Modul hatte 30 Anschlüsse, ein Chassis (von vieren) enthielt 756 Module angeordnet in 4 "Seiten". Die vier Chassis wurden in Kreuzform miteinander verbunden. Jedes Chasiss war 1,67 m Breit und 3,34 m lang. Die 16 Seiten teilten sich wie folgt auf:

Schrank 1:

Schank 2

Schrank 3

Schrank 4(entfiel bei einer 64 K Konfiguration)

Dies war der eigentliche Computer. An ihn wurde die Kontrollkonsole mit zwei markanten runden Bildschirmen angeschlossen und auch die Peripheriegeräte wie Lochstreifenleser, Magnetbandlaufwerke oder das Disksystem. Zusammen mit ihnen füllte der Rechner einen Raum, was damals aber typisch für Großrechner war.

Neu war das der Rechner aus einzelnen Modulen, jedes mit einer Platine in einer Standardgröße von 3 x  3 Zoll bestand. Je zwei Platinen bestand aus einem Modul. Die Transistoren waren auf eine Seite eingelötet, Widerstände und Drähte befanden sich zwischen den Platinen. Diese konnte man wie Seiten aufblättern. Vorher waren es größere Blöcke. Neu war auch, dass der Rechner aktiv gekühlt wurde. Dazu wurde Freon, ein Fluorkohlenwasserstoff der auch in Kühlschränken zur Kühlung verwendet wurde eingesetzt. Bisher waren die Rechner luftgekühlt. Diese aktive Kühlung erlaubte eine dichtere Packung. Sie war bei einer Verlustleistung von 150 kW nötig. Seymour Cray blieb bei dieser Kühlungsmethode sein Leben lang.

Allerdings war die CDC 6600 nicht wirklich klein. Der Rechner bestand aus vier Schränken, die in Kreuzform angeordnet waren. Sie enthielten nur die Logik und den Speicher. Die Kühlung befand sich außen. So war der Weg zwischen den Modulen klein. Disksysteme waren separat, genauso wie die Bedienkonsole mit zwei Monitoren (auch dies war damals relativ neu), die allerdings eine kreisförmige Bildröhre hatten. Sie verwandten den Elektronenstrahl um Vektoren zu zeichnen, lenkten ihn also zum nächsten Zeichenpunkt ab. Der Bildschirm leuchtete nach, damit auch komplexe Formen gezeichnet werden konnten. So benötigte man viel weniger Speicher für den Bildschirminhalt als wenn dieser aus Rasterpunkten besteht. Die CDC war der erste kommerzielle Computer mit einem Bildschirm. Die Konsole, "Scoreboard" genannt verteilte auch die Befehle an die Recheneinheiten und sorgte dafür dass diese erst loslegten wenn die Daten vorlagen.

Architektur

Erreicht wurde die hohe Geschwindigkeit primär durch mehr Funktionseinheiten. Jede CPU, die Zentraleinheit eines Computer besteht aus einzelnen Funktionseinheiten. So verfügt jede CPU über eine ALU (arithmetisch-logische Einheit) und eine Load/Store Unit welche die Daten vom Speicher holt und dort wieder ablegt. Wenn es mehrere dieser Einheiten gibt so kann der Computer schneller arbeiten, weil jeder Befehl eine Einheit beschäftigt und der nächste dann eine andere. Die CDC enthielt folgende Funktionseinheiten:

Das waren zusammen 10 Einheiten. Vier der Einheiten bearbeiteten Fließkommazahlen, die anderen Ganzzahlberechnungen, machten Adressberechnungen/Sprünge oder arithmetisch-logische Verknüpfungen. Der Rechner war auch fähig 11 Programme gleichzeitig laufen zu lasen, und zwar ohne einen Time-Sharing Betrieb mit dem dies bei jedem Rechner möglich ist. Die Taktfrequenz betrug 10 MHz, der Rechner konnte 3 Millionen Anweisungen pro Sekunde ausführen. (zumindest nach Firmenbroschüre, Wikipedia gibt die Leistung mit 5 MIPS an). Bei Fließkommarechenoperationen war die Spitzenleistung bei 1 MFLOP. Dazu gab es 10 Peripherieprozessoren an die 12 Ein/Ausgabekanäle z.B. für Disklaufwerke (eigentlich Plattenlaufwerke) angeschlossen werden konnten.

Mehrere Einheiten hatten den Vorteil der Parallelität: Wenn auf einen Additionsbefehl ein Multiplikationsbefehl folgte, so konnte dieser nachdem er dekodiert war (ein Teil der Befehlsausführung) von einer zweiten Einheit ausgeführt werden, anstatt zu warten bis die Addition abgeschlossen war. Das war nur möglich, wenn die Befehle unabhängig waren, also nicht die Multiplikation das Ergebnis der Addition brauchte. Damit der Rechner alle Einheiten auslasten konnte hatte einen 32 Worte langen Befehlsbuffer, der die aktuell anstehenden Befehle aufnahm. Das entlastete ihn auch vom Speicherzugriff, der relativ langsam war. Die Instruktionen wurden bei der Dekodierung an die Funktionseinheiten verteilt, die im Befehl vorgesehen war, unabhängig davon ob die Daten schon verfügbar waren. Wenn diese erst bei einer anderen Berechnung anfielen, dann musste die Berechnung noch warten bis sie zur Verfügung standen. Was die CDC 6600 noch nicht hatte war eine Pipeline, die bei jedem Takt einen weiteren Befehl aus dem Speicher holte und bei jedem folgenden Takt ihn stufenweise dekodierte und ausführte. Dies führte ihr Nachfolgemodell die CDC 7600 ein.

Um die Geschwindigkeit zu erhöhen und nicht zu oft auf den Arbeitsspeicher zuzugreifen, hatte die CPU einen Befehlszwischenspeicher, der den aktuellen und die letzten sieben Befehle enthielt. Bei Sprüngen über diese Distanz konnte so das erneute Einlesen des Arbeitsspeichers verhindert werden. Dadurch brauchten diese kurzen Sprünge nur 5 Takte anstatt 9 bei langen Sprüngen.

Peripherieprozessoren

Typische Peripheriegeräte zu dieser Zeit waren Lochkartenleser und -Stanzer. Es gab sieben Kanäle für Bandlaufwerke, sechs Trommellaufwerke und eine Disketteneinheit konnten angeschlossen werden. Sie wurden an eigene Periphereprozessoren angeschlossen, die nur für die Ein- und Ausgabe zuständig waren und davon die CPU entlasteten. Es gab zehn Peripherieprozessoren, erweiterbar auf 20. Jeder Prozessor hatte eine 12-Bit Architektur. Die Instruktionen waren 12 Bit breit (Registeroperationen) oder 24 Bit lang (Enthielten eine Adresse des Hauptspeichers, wobei diese in den letzten 18 Bit steckte). Der lokale Speicher des Prozessor betrug 4096 Worte zu je 12 Bit Länge. Jeder Periphereprozessoren konnte einen Job abwickeln, wenn dieser stand, weil ein angeschlossenes Gerät gerade Daten verarbeitete, konnte er zu einem zweiten Job wechseln. Es gab insgesamt 12 Ein/Ausgabekanäle zu den Periphereprozessoren. Die Peripherieprozessoren hatten Zugriff auf den Arbeitsspeicher der CPU und konnten dort Daten ablegen oder auslesen. Ein Peripherieprozessor konnte auch die CPU über ein Signal zum Abbrechen des laufenden und Aufnahme eines neuen Programms bewegen.

Diese Architektur hatte einige Vorteile. Sie entlastete nicht nur die CPU. Sie hatte auch eine große Flexibilität. So konnte jeder Peripherieprozessor mit jedem anderen kommunizieren und es gab keine feste Zuordnung der Kommunikationskanäle zu Peripheriegeräten wie Druckern oder Lochkartenlesern.

Der Peripheripherieprozessor (PPU: Peripherial Processing Unit) hatte einen Zykluszeit von 1000 ns, den zehnfachen Wert der CPU, abgestimmt auf die Zykluszeit des lokalen Speichers, die genauso hoch war. Er konnte in einem Taktzyklus einen Wert von 12 Bits Länge in den Speicher lesen und Schreiben. Da es zehn Periphereprozessoren gab, welche die zehnfache Zykluszeit der CPU hatten teilten sie sich einen Zugriff auf die CPU. Bei jedem Takt der CPU von 100 ns kam ein anderer Peripherieprozessor dran, der nun Daten in den Hauptspeicher der CPU lesen oder schreiben konnte, nach einem seiner Taktzyklen (1000 ns) war er erneut an der Reihe.

Die Instruktionen der PPU umfassten Sprünge, Shift-Operationen, Additionen, Subtraktionen und Boolesche Operationen (Und, Oder, Exklusiv-Oder). Der lokale Speicher konnte direkt adressiert werden (Hole Daten von der Adresse die angegeben ist), indirekt (Hole die Adresse von der man Daten benötigt von der Speicherzelle die angegeben ist und lade die Daten von dort) und indexiert (wie indirekt, jedoch wird noch ein Offsetwert addiert).

Auf die CPU konnte ebenfalls zugegriffen werden. Es gab zwei Instruktionen "Exchange Jump" und "Monitor Exchange Jump", die in heutiger Sichtweise einem Interrupt gleichkamen. Die CPU beendete daraufhin die laufenden Operationen und sicherte die Register in einem festen Speicherbereich. Der Peripherieprozessor konnte dann ein neues Programm starten. Ebenso konnte die Adresse die gerade bearbeitet wurde ausgelesen werden. (Beim Monitor Exchange Jump der so einem Debugging Signal entsprach). Auf das Speichersubsystem konnte lesend und schreibend zugegriffen werden, wobei einzelne 60 Bit Worte oder Blöcke gelesen oder geschrieben wurden. Über diese "Exchange Jump" Instruktion war es auch möglich einen Time-Sharing Betrieb aufzubauen, mehrere Programme waren dabei im CPU Speicher und erkannte ein Peripherieprozessor, das Daten abgeholt werden mussten, so konnte er das laufende Programm anhalten und das Programm aufrufen, das die Daten verarbeitete. So war es nicht nötig auf langsame Peripherigeräte zu warten "Polling" und die CPU konnte währenddessen ein anderes Programm ausführen.

Die Außenwelt wurde in Kanälen angesprochen. Neben dem Schreiben und Lesen auf diese Kanäle gab es auch bedingte Sprünge, wenn ein Kanal aktiv oder inaktiv war oder es Daten gab oder nicht. An jedem Kanal gab es dazu ein Channelregister als Puffer, das genau ein Wort aufnahm. Ein Kanal konnte aktiviert oder die Verbindung konnte unterbrochen werden. So war es möglich die Kanäle auf die Prozessoren zu verteilen, anstatt einen Prozessor fest an einen Kanal zu binden.

Langsame Peripherigeräte wie Drucker, Lochkartenleser und -stanzer konnten sich auch einen der Hochgeschwindigkeitskanäle teilen und wurden an einen Multiplexer angeschlossen, der die Daten sammelte und nacheinander übertrug. Analog teilten sich Magnetbandgeräte meist einen Kanal, allerdings ohne Multiplexer. Die Diskstationen konnten dagegen die Daten mit voller Geschwindigkeit des Kanals transferieren.

Jede PPU hatte eine Realzeituhr. Doch da diese bei jedem Takt erhöht wurde und das Register nur 12 Bits breit war, konnte man damit maximal Zeiten von 4,095 ms messen.

Jede PPU hatte nur vier Register: A+P als Register für Adressen im Speicher und des aktuellen Programms und die Register Q und K für Operanden (für Berechnungen oder transferierte Daten). Von den 64 möglichen Instruktionen wurden 62 genutzt. Die restlichen zwei waren Null Befehle, die nichts tun (moderner Ausdruck NOP: No Operation), im CDC Sprachgebrauch hießen sie "Pass".

Parameter Wert
Anzahl: 10, erweiterbar auf 20
Speicher: 4.096 Worte  zu je 12 Bit (6 KByte)
Zykluszeit 1 Mikrosekunde
Register: Akkumulator (18 Bit)
Instruktionen: 62

Speicher

Der Speicher bestand in der Standardversion aus 128 KWorten (131.072 Worte), jedes 60 Bit lang. Diese krumme Länge resultierte daraus, dass ein "Byte", also die kleinste Einheit in der Daten abgelegt werden, damals bei CDC nur 6 Bits lang war. Das reichte für die Großbuchstaben, Zahlen und Sonderzeichen. Hier war IBM mit dem zeitgleich erschienen System 360 weiter. Es setzte 8 Bit pro Byte ein, die moderne Definition. Doch CDC war damit nicht alleine. Erst im Laufe der sechziger Jahre wurde die heutige Definition mit 8 Bit eingeführt, die auch Kleinbuchstaben, Steuerzeichen und einen nicht definierten Teil, der bei Zeichencode 128 begann, umfasste. Ein Wort war also 10 6-Bits-Bytes lang. Die Länge wurde benötigt, da für wissenschaftliche Berechnung eine hohe Genauigkeit benötigt wird, die durch zahlreiche Nachkommastellen erreicht wird. Der Speicher wurde in 32 Bänken angeordnet, da seine Zugriffszeit langsamer als die Zykluszeit des Prozessors war. Die Zugriffszeit betrug 425 bis 475 ns, die Zykluszeit rund 1 Mikrosekunde. Das Ansprechen einer Bank nach der anderen, erreichte man über eine einfache Technik, die bei den späteren Computern beibehalten wurde. Die niedrigwertigen 5 Bits der 18 Bit langen Adresse gaben die Banknummer an. Da in einem Großteil der Fälle Code linear abgearbeitet wird, und auch Daten hintereinander abgelegt werden, führte das Hochzählen der Adresse um den nächsten Befehl oder das nächste Wort zu erhalten, zum Zugriff auf die nächste Bank und erst nach 32 Befehlen wurde die erste Bank wieder angesprochen.

Der Speicher war über einen 60 Bit breiten Bus mit der CPU kommunizieren konnte. Ein Wort pro Taktzyklus konnte übertragen werden. Intern bestanden die Module aus einzelnen Ringkernspeichermodulen die jeweils 4096 Bits in 4096 Ringkernen aufnahmen, aufgefädelt in einer Matrix von 64 x 64 Drähten. Insgesamt machten die Speichermodule so die meisten Module aus.

Varianten mit 64 KWorten und 256 KWorten wurden ebenfalls hergestellt. 256 KWorte (rund 1920 Kbyte) war das Maximum das mit 18 Bit adressiert werden konnte. Das war damals ein relativ großer Speicher. Die größte Version des IBM Systems 360, die zwei Jahre später vorgestellt wurde, hatte einen Speicher von 256 KByte. Die 128 KWorte der CDC 660 entsprachen dagegen 960 KByte. Da Instruktionen nur 12 oder 24 Bits breit waren, konnten die 128 KWorte mehr als 128.000 Anweisungen enthalten. Das war ein Vorteil der Wortlänge von 60 Bit. Der Speicher hatte noch keine Paritätsprüfung um verfälschte Bits zu erkennen. Es konnte ein 60 Bit Wort pro Taktzyklus transferiert werden. Ein Speichermodul hatte 1024 Speicherzellen mit je 12 Bits Größe. 5 Dieser Module speicherten 1024 Worte zu je 60 Bit.

Der Speicher bestand nicht aus Transistoren, sondern aus Ringkernspeichern, dem gebräuchlichsten Speichertyp bis zu den siebziger Jahren. Ein Modul enthielt 4096 Worte. Der Speicherausbau war durch 18 Bits für die Adressregister auf 256 KWorte beschränkt. Zumindest einem Kunden reicht dies nicht. Boeing gab einen 2 MWort Speicher in Auftrag der als eigener Schrank mit Leitungen mit der CPU verbunden war. Er wurde später als ECL (Extended Core Storage) regulärer Bestandteil der CDC 6600.

ECL-Speicher und Kontroller

Der externe Speicher, der auch in einem eigenen Gehäuse untergebracht war, wurde durch einen ECS (Extended Core Storage) Controller verwaltet, der als eine Funktionseinheit angesehen wurde und den in der Grundversion nicht benutzten Einschub in Schrank 3 einnahm. Es gab bei Nutzung des Kontrollers zwei neue Instruktionen im Befehlssatz, mit denen man einen Block mit gegebener Länge (maximal 8 Worte) vom internen Speicher zum erweiterten Speicher transferieren konnte bzw. einlesen konnte. Die Register A0 und X0 enthielten dabei die Adressen für den internen Speicher und externem Speicher.

 Dieser externe Speicher war mit einer Zugriffszeit von 1,4 Mikrosekunden und einer Zykluszeit von 3,2 Mikrosekunden dreimal langsamer als der interne. Um dies auszugleichen, wurden nicht einzelne Worte, sondern immer acht Stück auf einmal transferiert. Sofern diese Daten auch benötigt wurden (was meistens gegeben ist) konnte so die Langsamkeit durch eine größere Bandbreite ausgeglichen werden. Die Datenrate des externen Speichers war damit genauso hoch, wie die des internen Speichers und 50-mal höher als die eines Peripheriekanals. Der externe Speicher wurde ebenfalls in Bänken angeordnet, allerdings waren es hier nur vier. Der ECS Controller generiert aus der 18 Bit Adresse der CPU die 21 Bit Adresse des Blocks. Das war möglich, weil durch den Blocktransfer nicht einzelne Worte angesprochen werden mussten, sondern nur vielfache von 8 Worten. Intern wurden im externen Speicher die Daten in "Superwörtern" von 480 Bit Länge abgelegt. Ein Superwort hatte hier auch acht Bits zur die Prüfung auf Korrektheit, dies hatten die im Hauptspeicher verbauten Module nicht. 15.744 dieser Superworte waren eine Bank. Ein Superwort wurde in 800 ns übertragen. Nach 3200 ns, oder der Übertragung von vier Superworten, wurde wieder dieselbe Bank angesprochen. Die Zeitspanne in der zwei Bänke angesprochen wurden war also genauso groß wie beim Hauptspeicher.

Der ECL-Kontroller lies den Anschluss von bis zu vier CDC 6600 und vier Speicherschränken zu, die diesen Speicher gemeinsam nutzen konnte. Allerdings reduzierte sich die Übertragungsrate mit jedem zusätzlich angeschlossenen Rechner. Während eines Blocktransfers wurde eine Halt-Instruktion ausgelöst, das bedeutet, die Funktionseinheiten führten die Befehle noch durch, soweit dies ging, es stoppten aber die weitere Dekodierung von Befehlen. Dies war nötig weil das Speichersystem nun die volle Performance des Rechners für den Transfer brauchte und die CPU nicht noch Instruktionen in den Befehlsbuffer einlesen konnten. Da ein Transfer acht Takte brauchte, war es möglich dass ein Peripherieprozessor einen Interrupt generierte, da diese ohne Verzögerung bedient wurden.

Parameter Wert
Speichergröße: 64, 128 oder 256 KWorte (zu je 60 Bit)
Speicherbänke 32
Zykluszeit 1 Mikrosekunde
Zugriffszeit: 0,425 bis 0,475 Mikrosekunden
Erweiterter Speicher 1 bis 16 Bänke (max. 2000 KWorte oder 15 MByte)
Bankgröße erweiterter Speicher: 125.000 Worte zu je 60 Bit
Speicherwortlänge erweiterter Speicher: 480 Bits
Zykluszeit erweiterter Speicher: 3,2 Mikrosekunden
Zugriffszeit erweiterter Speicher: 1,4 Mikrosekunden
Übertragungsrate: 8 Worte zu 60 Bits pro 800 ns

Befehlssatz und Register

Die CDC 6600 hatte drei Registersätze mit je acht Registern:Register

Diese drei Registersätze (auch mit je acht Stück) findet man auch bei späteren Rechnern Crays. Ab der Cray 1 kommen dann noch acht Vektorregister hinzu.

Die Befehlsworte waren immer 60 Bit lang, Instruktionen wurden aber in kleineren Einheiten gelesen. Befehle hatten eine Länge von 15 Bits bei Registeroperationen und 30 Bit wenn eine Adresse oder eine Konstante beteiligt war. Der Befehlssatz würde man später als RISC bezeichnen, das bedeutet, die Befehle hatten ein einheitliches Format und konnten schnell ausgeführt werden. Auf komplexere Operationen wurde verzichtet. Zudem wurde wortweise adressiert, ebenfalls ein Kernmerkmal von RISC. So gab es nur 71 Instruktionen.

Die Operationen verwandten das Dreiadressbefehlsformat, sprich sie lehnten sich an die menschliche Denkweise an in der man schreibt:

C = A + B

In einem Befehl gab es also ein Zielregister und zwei Quellregister für die Operation. Alle Rechenoperationen fanden mit Registern statt. es gab keine Rechenoperationen, welche die Daten direkt vom Speicher holten. Von den 60 Bit Registern waren fünf als Leseregister und zwei als Schreibregister ausgelegt, d.h. von von den zwei Schreibregistern konnte der Inhalt in den Arbeitsspeicher zurückgeschrieben werden.

Die beiden Befehlsformate sahen so aus: Kurzformat 15 Bit Länge und Langformat, 30 Bits Länge

Symbol F   m i j k
Breite in Bits 3   3 3 3 3
Bedeutung Funktionsklasse   Modus innerhalb der Funktionseinheit Zielregister Operand1-Register Operand2-Register
Symbol F   m i j K
Breite in Bits 3   3 3 3 18
Bedeutung Funktionsklasse   Modus innerhalb der Funktionseinheit Zielregister Operand1-Register Konstante oder Adresse

Es war also ein relativ "geradliniges" Format. Da man mit 3 Bits für i,j, und k maximal acht Zustände hat, gab es acht Register in jeder Gruppe (X0-X7, A0-A7 und B0-B7). Die X-Register von 60 Bit Länge waren die primären Register für die Datenverarbeitung (Festpunktzahlen, Fließkommazahlen, gepackte alphanumerische Daten). Die B-Gruppe waren die Indexregister. Mit ihnen konnte man Integerzahlen verarbeiten und den Exponent von Fließkommazahlen. Die A-Register dienten zum Adressieren des Hauptspeichers.

Über die Funktionsklasse F war schon im Befehl erkennbar, welche der acht verschiedenen Funktionseinheiten (einige waren doppelt vorhanden) den Befehl ausführen sollten. Der Parameter m gibt dann den Befehl innerhalb dieser Funktionseinheit wieder. Da dies teilweise nicht reichte, wurde dann für einige Befehle die Bits des i Operanden genutzt. So gab es insgesamt 71 Anweisungen.

Wer die Befehle ansieht, wird eine der häufigsten Gruppen kaum vorfinden: Die Load / Store Befehle. Sie dienen dazu, in Register entweder Werte (Konstanten), Adressen oder den Inhalt von Speicherzellen deren Adresse schon im Register steht, zu laden. Die CDC 6600 löste dies durch Seiteneffekte.

Die A0 bis A7 Register waren reine Adressregister. Beschrieb man sie, so gab es automatisch folgenden Seiteneffekt:

Alle Befehle zum Laden und Speichern arbeiteten mit Index. Dieser musste auf 0 gesetzt werden um eine eine einfache Setzung der Adresse zu bewerkstelligen. Das Register B0 war daher hardwaremäßig immer auf 0 gesetzt und für einen einfachen Inkrement eines Registers konnte das Register B1 genutzt werden, das ebenfalls durch Verschaltung immer eine 1 enthielt. Die Gruppe der Befehle mit den Codes 50 bis 77 (oktal) war für das Setzen der Registerwerte und damit Lade/Speicheroperationen verantwortlich.

Opcode )octal) Befehl Taktzyklen
Branch Unit
00 Stop -
01 Return Jump to K 14
02 Go To K + Bi 14
030 Go to K if Xj = 0 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
031 Go to K if Xj <> 0 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
032 Go to K if Xj > 0 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
033 Go to K if Xj < 0 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
034 Go to K if Xj in Range 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
035 Go to K if Xj out of Range 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
036 Go to K if Xj is definite 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
037 Go to K if Xj is indefinite 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
04 Go to K if Bi = Bj 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
05 Go to K if Bi <> Bj 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
06 Go to K if Bi >= Bj 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
07 Go to K if Bi < Bj 9/15 (9 wenn im Instruktionsbuffer, sonst 15)
Boolean Unit
10 Transmit Xj to Xi 3
11 Logical Product of Xi and Xk to Xi 3
12 Logical Sum of Xi and Xk to Xi 3
13 Logical Difference of Xi and Xk to Xi 3
14 Transmit Xj Complement to Xi 3
15 Logical Product of Xi and Xk Complement to Xi 3
16 Logical Sum of Xi and Xk Complement to Xi 3
17 Logical Difference of Xi and Xk Complement to XI 3
Shift einheit
20 Shift xi links um xk 3
21 Shift xi rechts um xk 3
22 Shift xi Normiert links um Bj 3
23 Shift xi Normiert rechts um Bj 3
24 Normalisiere xk in xi und bj 4
25 Normalisiere und Runde xk in xi und bj 4
26 Entpacke xk in xi und bj 3
27 Packe xk aus xi und bk 3
43 Forme jk Maske in xi 3
Fließkomma-Additionseinheit
30 Fließkomma Summe von xj und xk in xi 4
31 Fließkomma Differenz von xj und xk in xi 4
32 Fließkomma Doppelte Genauigkeit Summe  von xj und xk in xi 4
33 Fließkomma Doppelte Genauigkeit Differenz von xj und xk in xi 4
34 Gerundete Fließkomma Summe von xj und xk in xi 4
35 Gerundete Fließkomma Differenz von xj und xk in xi 4
Ganzzahl-Additionseinheit
36 Ganzzahl Summe von xj und xk in xi 3
37 Ganzzahl Differenz von xj und xk in xi 3
Multiplikationseinheit
40 Fließkommaprodukt von xj und xk in xi 10
41 Gerundetes Fließkommaprodukt von xj und xk in xi 10
42 Doppelte Genauigkeit Fließkommaprodukt von xj und xk in xi 10
Divisonseinheit
44 Fließkommadivision von xj und xk in xi 29
45 Gerundete Fließkommadivision von xj und xk in xi 29
46 Pass (Keine Operation) -
47 Summe aller "1" in Xk abgelegt in xi 8
Inkrementeinheit
50 Summe von Aj und K in Ai 3
51 Summe von Bj und K in Ai 3
52 Summe von Xj und K in Ai 3
53 Summe von Xj und Bk in Ai 3
54 Summe von Aj und Bk in Ai 3
55 Differenz von Aj und Bk in Ai 3
56 Summe von Bj und Bk in Zi 3
57 Differenz von Bj und Bk in Zi 3
60 Summe von Aj und K in Bi 3
61 Summe von Bj und K in Bi 3
62 Summe von Xj und K in Bi 3
63 Summe von Xj und Bk in Bi 3
64 Summe von Aj und Bk in Bi 3
65 Differenz von Aj und Bk in Bi 3
66 Summe von Bj und Bk in Bi 3
67 Differenz von Bj und Bk in Bi 3
70 Summe von Aj und K in Xi 3
71 Summe von Bj und K in Xi 3
72 Summe von Xj und K in Xi 3
73 Summe von Xj und Bk in Xi 3
74 Summe von Aj und Bk in Xi 3
75 Differenz von Aj und Bk in Xi 3
76 Summe von Bj und Bk in Xi 3
77 Differenz von Bj und Bk in Xi 3

 

Die Funktionseinheiten

Die CDC 6600 enthielt zahlreiche Funktionseinheiten. Spätere Rechner übernahmen das Prinzip und heute hat jeder Prozessor mehrere Funktionseinheiten die parallel arbeiten können. Zur damaligen Zeit waren die Möglichkeiten jeder Funktionseinheit beschränkt. So ist heute die Divisionseinheit, Multiplikationseinheit und Fließkommaadditionseinheit der CDC 6600 in einer Einheit für Fließkommarechnungen verschmolzen.

Boolean Einheit

Diese Einheit ist bei modernen Computern Bestandteil der Arithmetisch-logischen Einheit und zwar der logische Teil. Die Instruktionen dieser Einheit waren folgende;

Jede Operation dauerte 3 Takte und war in 0,3 Mikrosekunden durchgeführt.

Fixed Add Einheit

Der Name dieser Einheit täuscht, sie rechnet nur mit ganzen (Integer) Zahlen, nicht mit Bruchzahlen, doch man kann relativ einfach sich ein Komma immer an der selben Position denken, so kann man 300,31 und 157,89 addieren indem man 30031 und 15778 addiert. Bei 60 Bit Breite konnte man so auch sehr große Zahlen mit zahlreichen Nachkommastellen berechnen. Die Zahlen wurden immer vorzeichenbehaftet interpretier. das höchstwertige Bit enthielt das Vorzeichen. Die restlichen 49 Bits reichten von Zahlen bis 5,76x1017.

Es gab nur zwei Instruktionen:

Sie war aber an die Verzweigungseinheit angegliedert und stellte Flags zur Verfügung die dort abgefragt werden konnten. Sie signalsierten ob:

Das Ergebnis eine definierte Zahl oder nichts ist. Bei einer nicht definierten Zahl (hier wird das Ergebnis als Fließkommazahl interpretiert) sind die 12 niedrigwertigen Bits alle auf "1".

Shift Einheit

Die Shift Einheit schob das Bitmuster von Zahlen nach links oder rechts (das entspricht einer Multiplikation oder Division um den Faktor 2 pro Verschiebung), packte und entpackte die einzelnen Bestandteile einer fließkommazahl, zählte die führenden Nullen in einer Zahl oder bildete eine Maske bestehend aus einer beliebigen Anzahl von "1" Bits. Weiterhin konnte die Shifteinheiten Fließkommazahlen bzw. Ganzzahlen ineinander umwandeln indem sie bei einer Fließkommzahl diese in Mantisse und Exponent aufspaltete bzw. bei einer Ganzzahl in einem B-Register als Exponent und die Mantisse im X-Register diese in das Fließkommaformat umwandelte, Der Maskenbefehl gehört als Besonderheit vom Opcoide her zur Divisionseinheit.

Eine Besonderheit jedes Rechners von Seymour Cray war dass es einen Befehl gab, der die Bits in einem Wort zählte, die auf "1" standen. (Die Zahl der Nullen bekam man dann wenn man von der Wortbreite diesen Wert abzog). da man einen solchen Befehl bei normalen Rechenoperationen nicht braucht forschte man nach warum und es gab einen Kunden der diesen Befehl unbedingt haben wollt - die NSA. Heute (2014) haben aktuelle Prozessoren wieder solche Befehle, da sie beim Ver-- und entschlüsseln nützlich sind und dies in Zeiten von unsicheren Verbindungen oder Notebooks (die auf der Festplatte brisante Daten haben können, aber auch leicht gestohlen werden können) wichtig ist.

Add-Einheit

Diese Einheit addierte Fließkommazahlen bzw. subtrahierte sie. Es gab sechs Befehle die diese einheit nutzten:

Eine Besonderheit bei "doppelter Genauigkeit" ist das diese sich von der heutigen Definition unterscheidet. Den Standard IEEE 754 gab es damals nicht. Einfache Genauigkeit nutzte die 60 Bits eines Rechenregisters wie folgt:

Die doppelte Genauigkeit hatte dagegen eine Mantisse von 96 bit. und hatte so eine Genauigkeit von 28 Dezimalstellen. Die Addiereinheit hatte daher die Fähigkeit bis zu 96 Bit breite Zahlen zu addieren und eine Ausgabe von 108 Bit Breite zu erstellen.Weiterhin dauerte die "doppelte Genauigkeit" genauso lang wie die einfache Genauigkeit.

Multiplikationseinheit

Diese Einheit führte Multiplikationen durch und war eine komplexe Einheit und benötigte die zweitmeiste Zeit für einen Befehl. Sie führte nur drei Befehle aus:

Eine normale Multiplikation dauerte 10 Takte oder 1 Mikrosekunde. Eine doppelte Genauigkeit aufgrund von zwei Multiplikationseinheiten nur 100 Nanosekunden mehr um beide Ergebnisse zusammenzuführen: 11 Takte oder 1,1 Mikrosekunden. Intern bestand die Einheit aus eine Kombination von Addier- und Schiebeinheiten.

Divisionseinheit

Wie der Name schon sagt führte diese Einheit Divisionen durch. Sie war die langsamste Operation. Eine Division dauerte 20 Takte. Sie führte drei Befehle aus:

Intern gab es drei Subtraktionseinheiten um die Division zu bewerkstelligen. Divisionen dauerten 20 Takte. Das Zählen der Einsen in einem Wort dauerte 8 Taktzyklen.

Incrementeinheit

Die inkrementeinheit war für das errechnen von Adressen auch mit relativer Adressierung (hole den wert aus der Adresse die in Register A3+100 worte steht in Register X5) zuständig. Sie konnten auch Additionen und Subtraktionen mit den B Registern ausführen. so gab es drei Instruktionssätze, einen mit den A-Registern als Ziel, einen zweiten mit den B-Registern und ein dritter mit den X-Registern. Operanden konnten A,B oder X-Register oder konstanten sein, sodass es sehr viele Instruktionen gab:

die ersten drei Instruktionen ergaben ein 30 Bit langes Ergebnis, die zweiten, da ein B-Register beteiligt war nur ein 15 Bit langes. Die zweiten Instruktionen legten das Ergebnis immer ins B-Register ab:

die dritte Gruppe legt das Ergebnis dann in ein X-Register ab:

Es wären bei der Kombination von A,B, X-Registern und konstanten als Operanden und zwei Operationen noch mehr Varianten möglich, man hat jedoch nur diese implementiert, weil man meinte damit die wichtigsten Anwendungsfälle abzudecken.

Da die Inkrementationseinheiten so universelle Additionseinheiten waren gab es auch zwei davon, die parallel arbeiten konnten sofern sie nicht Quell- oder Zielregister gemeinsam nutzen. Wie die Fixed-Add Einheit setzen die Operationen flugs, die dann von der Verzweigungseinheit für bedingte Sprünge genutzt wurden. Dies wirkte sich auf folgende Befehle aus:

Parallelität

Die Cyber 6600 führte die Superscalarität ein, Das bedeutete, sie konnte mehrere Instruktionen gleichzeitig ausführen. Dies wurde durch die obigen mehrfach vorhandenen Befehlseinheiten bewirkt. So erreichte die CDC 6600 eine für ihre Zeit sehr hohe Geschwindigkeit. Spätere Rechner übernahmen das Prinzip. In der x86 Line wurden die ersten mehrfach vorhandenen Einheiten mit dem Pentium eingeführt. Die Funktionseinheiten selbst alleine sind allerdings nur eine Voraussetzung für eine hohe Geschwindigkeit. Das zweite war, dass sie auch weitgehend unabhängig voneinander arbeiten müssen. Das wurde durch drei Registersätze erreicht, jedes mit acht Registern. Dadurch war die Wahrscheinlichkeit, dass zwei Register gleichzeitig von zwei unterschiedlichen Funktionseinheiten genutzt wurden Dies wurde bei den Nachfolge Modellen beibehalten wie weiterhin Adressregister, Ganzzahlregister und Fließkommaregister hatten und sogar um die Vektorregister erweitert wurden.

Doch die Geschwindigkeit der Funktionseinheiten nützt nichts, wenn der Speicher nicht mithalten kann. Neben dem Bank-Interleave, der im Idealfall (bei linearem Zugriff) die Langsamkeit des Ringkernspeichers kompensierte hatte die CDC 6600 einen Instruktionsbuffer von 8 Instruktionen von je 60 Bits Länge. Bei jeder Ausführung eines Befehls lud die CPU vorrausschauend den nächsten Befehl in das letzte freie Register U0 und mit jedem Taktzyklus wurde ein halbes Register  nach oben verschoben. Die Dekodierung erfolgte immer mit 30 Bits, sodass man für ein 60 Bit breites Register zwei Zyklen brauchte. Erreichte die Instruktion das erste Register U1 so wurde mit dem Dekodieren begonnen. erreichte Sie U2 so war die Dekodierung beendet und es wurden Abhängigkeiten bestimmt (wurden Register benutzt die gerade von anderen Operationen beschrieben wurden oder war die Funktionseinheit nicht frei?), ansonsten erfolgte die Ausführung. Die folgenden Register U3 bis U7 dienten als Puffer, vor allem Rückwärtssprünge konnten so schnell durchgeführt werden. Diese Dekodierung während die Instruktionen einen Puffer durchlaufen nennt man Pipeline und ist heute Standard bei allen Prozessoren. In der x86 Reihe wurde sie erstmals bei der 80486 eingeführt. Die Pipeline war allerdings nur für alle Einheiten gemeinsam genutzt, anstatt eine für jede Einheit. So wird die CDC 6600 im allgemeinen Verständnis nicht als ein "pipelined Computer" angesehen. Damit hemmte der langsamste Befehl den Ablauf der folgenden.

Der Instruktionsbuffer hatte neben dem Dekodieren auch noch eine zweite Funktion: er war ein schneller Zwischenspeicher und machte die CPU vom langsamen Hauptspeicherzugriff unabhängiger. Ein Nachteil ist dass ein Sprung außerhalb des Puffers bedeutet, dass dessen Inhalt ungültig ist und erst die neuen Instruktionen aus dem Speicher die Pipeline füllen müssen. Verzweigungen sind daher deutlich langsamer als andere Operationen. 

Zur Parallelität gehörte auch das Interruptverhalten. Jederzeit konnte ein Peripherieprozessor die Aufmerksamkeit der CPU erfordern, wenn Daten eingelesen oder ausgegeben werden mussten. Wenn dies vorkam, so führte die CPU einen Exchange Jump aus - sie beendete zuerst alle anstehenden Befehle, kopierte dann die Register in einen 16 Worte großen Bereich und war dann bereit mit dem Peripherieprozessor zu kommunizieren. das dauerte 3-5 Takte. Nach Freigabe der CPU durch den PPU wurden die Register aus dem Speicherblock ausgelesen und der nächste Befehl ausgeführt, der vor der Unterbrechung anlag.

Eine wichtige Herausforderung war die Lösung von Konflikten. Dazu gab es eine Subeinheit, das Scoreboard oder die Unit and Register Reservation Control. Sie sah nach ob es Konflikte gab. Denkbar sind drei Arten von Konflikten:

Konflikte erster Ordnung:

Diese Konflikte benötigen dieselbe Einheit oder dieselben Register bei mehreren aufeinanderfolgenden Operationen: Beispiel Funktionskonflikt:

X5 = X1 + X2

X6 = X3 + X4

Beide Instruktionen benutzen die Add-Einheit. Diese gibt es nur einmal. Um dieses Problem zu entschärfen gab es die Multiplikationseinheit zweimal, auch weil Multiplikationen viel länger zur Ausführung als Additionen oder Inkrementoperationen brauchen. Das zweite ist ein Registerkonflikt:

X7 = X1 + X2

X7 = X3 * X4

Beide Instruktionen schreiben in das Register X7. Das ist hier trivial, weil das erste Rechenergebnis gar nicht benötigt wird (eventuell braucht man die Flags die auch als Ergebnis der Rechnung gesetzt werden), doch im Falle lang andauernder Operationen kann sich dies auch erst in einigen Operationen auswirken und dann ist es nicht mehr trivial.

Konflikte zweiter Ordnung

Diese Konflikte entstehen wenn eine Instruktion das Ergebnis einer vorherigen benötigt, deren Ausführung aber noch nicht beendet ist. Beispiel:

X4 = X1 / X2

X5 = X4 + X3

Die zweite Operation braucht das Ergebnis von X4 als Eingabewert für die Addition. Da die Division sehr viele Zyklen braucht und die Addition eigentlich schneller abgeschlossen ist als die Division darf sie nicht den Wert von X4 nehmen solange die Division nicht abgeschlossen ist. Sie wird solange angehalten.

Konflikte dritter Ordnung

Dieser komplexeste Fall tritt auf, wenn eine Instruktion ihr Ergebnis in ein Register ablegen soll, das als Eingabeparameter einer vorherigen Instruktion genutzt wird, aber diese wurde noch nicht gestartet. Hier ein Beispiel:

X3 = X1 / X2

X5 = X4 * X3

X4 = X0 + X6

Alle drei Instruktionen benutzen unterschiedliche Funktionseinheiten. Sie können also, wenn auf Konflikte nicht Rücksicht genommen wird, parallel ausgeführt werden. Die Addition geht am schnellstem, dann kommt die Multiplikation und am langsamsten ist die Division. Die Multiplikation in der zweiten Instruktion kann aber nicht ausgeführt werden, weil ein Konflikt zweiter Ordnung mit X3 vorliegt (zuerst muss X3 berechnet sein, bevor man den Wert für die Multiplikation nutzen kann). Würde die Addition nun ausgeführt werden, so würde sie den Inhalt von X4 überschreiben, bevor die Multiplikation den wert als eingabewert nutzt.

Die CDC nutzte Reservierungsflags um zu kennzeichnen dass eine funktionale Einheit oder ein Register genutzt werden kann oder überschrieben bzw. ausgelesen werden darf. Zum lösen der Konflikte behielten die funktionalen Einheiten ihr Ergebnis in einem internen Speicher. Das Scoreboard startete die Einheiten und wenn eine Rechnung fertig war, so gaben sie Funktionseinheiten ein Signal an das Scoreboard ab, dass sie nun bereit wären die Daten in die Register zu schreiben. Dies löste das Freigeben von Reservationsflags für die Register und Einheiten aus.

Dead Start BoardDas Booten

In einem unterschied sich die CDC 660 gravierend von heutigen Rechnern. Wenn man diese einschaltet, so wird ein Programm aus dem Festwertspeicher ausgeführt. Dieser ist so verdrahtet dass er beim Start angesprochen wird. (Meist auf der Adresse 0). Das Programm lädt das Betriebssystem von der Platte. Die CDC 6600 hatte an einem Schrank ein Panel mit einer 12 x 12 Matrix aus Schaltern und einigen Kontrollschaltern. Mit den Schaltern gab man im Binärcode 12 Anweisungen für eine PPU ein und legte einen "Dead Start" Schalter um. Dieser wurde alle 4 ms abgefragt und war er aktiv, wurde das Programm in dem Kontrollpanel ausgeführt, das man binär eingegeben hatte. Die Sequenz verband einen Kanal, lass vom Bandlaufwerk die ersten 4.096 Worte ein und führte dann das gerade geladene Programm mit einem Exchange Jump aus. (Bild links)

Massenspeicher

Neben den damals schon üblichen Magnetbandlaufwerken, Lochkartenlesern und -Stanzern war auch die CDC 6638 Magnetic Disc Storage Einheit verfügbar. Das war ein eigener Schrank mit vier Magnetplatten, angeordnet in einer 2 x 2 Matrix. Je zwei Magnetplatten die über/untereinander standen, teilten sich einen Motor und je zwei Platten die nebeneinander standen, eine Lese/Schreibeinheit.

Jedes Plattenlaufwerk hatte 16 Schreiben mit 32 Oberflächen die mit 1200 U/min rotierten. Die Schreib/Leseköpfe waren nicht unabhängig voneinander beweglich, eine Hydraulik bewegte sie. Es konnte also nicht von einer Oberfläche Spur 1 und von der anderen Spur 100 gelesen werden. Immerhin konnte jedes Paar mit eigenem Schreib/Lesekopf als eine eigene Platte angesprochen werden. Es gab pro Schreib/Leseeinheit jeweils 6 Köpfe, Sie waren aber so versetzt, das sie jeweils andere Spuren lasen. So musste man sie weniger oft bewegen. (maximal 32-mal um eine Oberfläche zu lesen).

Die Daten wurden in 64 Worten zu 60 Bit als kleinster Einheit abgelegt. (3840 Bit oder 480 Byte) Physikalisch war ein Sektor 322 Bit breit, es gab 100 Sektoren pro Spur. Bei maximal 12 aktiven Leseköpfen konnten diese 322 x 12 Bit auf einmal lesen, das waren 64 Worte zu je 60 Bit mit zusätzlichen 24 Bit als Kontrollinformationen. Es gab 192 Spuren pro Platte.

Der Speicherplatz von rund 200 MByte war damals enorm groß, etwa 200-mal größer als der Hauptspeicher, der auch schon groß war. Eine kleinere Version die CDC 6603 stand auch zur Verfügung. Sie hatte nur eine Speicherkapazität von 444 Millionen Bit, eine mittlere Zugriffszeit von 1270 ms und transferierte 1,25 Millionen Zeichen/s. Anders als die 6638 konnte sie nur einen Ein/Ausgabekanal nutzen, die 6638 mit Zusatzhardware dagegen zwei.

Parameter Wert
Plattenstapel 4
Oberflächen pro Stapel 32
Platten pro Stapel 16
Schreib/Leseköpfe pro Oberfläche: 6
Positionierungszeit für eine Spur: 25 - 150 ms, typisch 100 ms
Latenz bis Sektor in der spur gefunden: < 52 ms
Sektorgröße 322 Bit
Sektorzahl pro Spur: 100
Spuren: 192
Kapazität pro Oberfläche: 12,4 Millionen Bit
Gesamtkapazität: 1088 Millionen Bit
Datenübertragungsrate 1,68 Millionen 6 Bit Zeichen/s

Geschichtliche Bedeutung

Die CDC 6600 wurde 1964 angekündigt und die erste im Dezember 1965 an das NCAR geliefert. Der Computer kostete 7 Millionen Dollar. Sie wurde bis 1977 produziert - eine lange Zeit für einen Computer. Auch der Einsatz war sehr lange, der zweite ausgelieferte Rechner wurde bis 1977 betrieben.

Es wurden mindestens 84 CDC 6600 verkauft, geschätzt wird die Produktion auf rund 100 Stück, - das klingt nach wenig, doch in den Sechzigern war dies für einen so teuren Computer ein großer Verkaufserfolg. Die meisten wurden von größeren wissenschaftlichen Instituten wie dem CERN gekauft. Einige wurden auch zur Simulation von Atombombenexplosionen genutzt. Von IBM's letztem Computer, der 7030 Stretch, die auch für hohe Geschwindigkeit ausgelegt war, wurden nur neun Stück verkauft, dann stellte IBM die Produktion mangels Nachfrage ein.

Der Verlust des Titels "Schnellster Computer der Welt" an CDC führte dazu dass IBM das System 360/90 ankündigte, das gar nicht existierte, nur um den Eindruck zu erwecken man hätte einen gleichwertigen Rechner. Das führte zur Kaufzurückhaltung. Der Verlust wird auf 50 zusätzlich verkaufte Systeme oder 300 Millionen Dollar geschätzt. Das System 360/90 erschien erst Jahre später und war kein großer Verkaufserfolg, denn kurz danach stellte CDC schon das Nachfolgemodell CDC 7600 vor. Von 1964 bis 1969 war die CDC 6600 der weltweit schnellste Rechner, dann löste sie ihr Nachfolgemodell CDC 7600 ab, die eine verbessere Architektur der CDC 6600 verwendete, aber aus integrierten Schaltkreisen bestand. Die CDC 6600 löste die IBM Systeme der Serie 7000 ab, die vorher vornehmlich für wissenschaftliche Anwendungen angeschafft waren. Die Ankündigung des IBM 360/91 1964 hatte noch ein Nachspiel, als es dann 1969 erschien war klar, dass es 1969 nur auf dem Papier bestand und CDC verklagte IBM, nachdem diese nach nur 20 verkauften IBM 360/91 den Rechnern vom Markt zurückzogen weil sich Produktionsmängel nicht beheben ließen. Es kam zu einer außergerichtlichen Einigung und CDC bekam 600 Millionen Dollar zugesprochen - der Jahresumsatz der Firma betrug 1969 1,6 Milliarden Dollar, das war also ein vielfaches des Reingewinnes, der bei IBM in diesem Jahr bei 12,3% des Umsatzes lag. Diese Finanzspritze erlaubte es der Firma auch Fehlschläge zu überstehen, denn die damals entwickelte CDC 8600 entpuppte sich nicht als technisch umsetzbar. Der nächste Rechner im oberen Leistungsbereich die CDC Star war so lange entwickelt worden, dass er als er auf den Markt kam zu langsam war.

Zwei CDC 6600 wurden an die Marine verkauft, die sie für Echtzeitaufgaben benötigte, unter anderem zur Überwachung von Erprobungsstarts der Minuteman ICBM. Es war einer der ersten Einsätze von Computern für Echtzeitprobleme. Normalerweise liefen auf dem Rechner die Aufgaben im Batchbetrieb ("Jobs" genannt: Ein Programm wurde vom Magnetband oder Lochkartenleser eingelesen, ausgeführt und die Ergebnisse ausgedruckt, danach kam das nächste Programm dran). Es musste aber nicht schnell auf sich ändernde Meßwerte reagieren. Bei der NSA dauerte es 30 Minuten bis ein Job von der Abgabe bis zu der Zurückgabe des Aufdrucks bearbeitet war (+ die eigentliche Laufzeit des Jobs). Es gab eine Längenbegrenzung in der Dauer eines Jobs auf 32767 s (77777 oktal) das sind 9 Stunden, 6 Minuten, 7 Sekunden. Danach wurde er abgebrochen. Es gibt aber Anwender die über Wochenende Jobs länger liefen lassen bis zu 60 Stunden. Allerdings mussten sie dafür von Hand jeweils den Job spätestens nach 9 Stunden neu starten.

Die CDC 6600 war schnell, aber sie war auch teuer, gemessen an der damaligen Kaufkraft. So kostete eine Atlas Trägerrakete in etwa dasselbe wie der Rechner. CDC brachte zwei Nachfolgemodelle heraus, welche die Produktpalette nach unten abrundeten. Die CDC 6400 war im Befehlssatz kompatibel, hatte aber anstatt der zehn funktionalen Einheiten eine "normale" CPU die nur einen Befehl ausführen konnte und keine Parallelität besaß. Sie war dadurch bedeutend langsamer aber auch preiswerter. Die CDC 6500 war dann eine Version mit zweier dieser einfacheren CPUs. Eine CDC 6400 hatte in etwa ein Zehntel der Integergeschwindigkeit (1 MIPS) und erreichte bei Fließkommaoperationen, die auch auf der 6600 lange dauerten, ein Fünftel derer Geschwindigkeit). Später gab es noch die CDC 6700 die aus einer 6600 und 6400 CPU bestand und die etwas schneller war. Der Rechner wurde sehr lange produziert, über 13 Jahre. Das wäre heute undenkbar. Man stelle sich vor ein PC aus dem Jahre 2002 mit einem Pentium IV mit 1,4 GHz, 512 MB Speicher und einer 40 GB Platte würde noch 2014 hergestellt werden....

Die geschichtliche Bedeutung der CDC 6600 war zweierlei. Das erste war, dass sie der erste Supercomputer war (auch wenn es diesen Begriff zu dieser Zeit noch nicht gab) war, der kommerziell erfolgreich war. Also der erste Rechner der speziell auf Geschwindigkeit und nicht auf die Verarbeitung vieler Daten ausgelegt war. Es gab vorher solche Rechner aufgrund Ausschreibungen des US-Militärs, aber sie waren nicht kommerziell erfolgreich. Die verkauften Stückzahlen waren gering. CDC spezialisierte sich in Folge auf die Fertigung solcher Rechner, wie dem Nachfolgemodell CDC 7600, Cyber Star und Cyber 205. Seymour Cray verließ 1972 die Firma und machte seine eigene auf, die ebenfalls Supercomputer fertigte und bald Marktführer wurde.

Die zweite Bedeutung war das IBMs Vorherrschaft bei den Computern psychologisch gebrochen war. Die Firma verkaufte nach wie vor die meisten Systeme und hatte den größten Umsatz (zeitweise mehr las 60% der Gesamtumsätze bei Großrechnern), aber sie hatte nicht mehr den schnellsten Rechner. Sie stand nicht mehr an der Spitze des Fortschritts. Es dauerte über 30 Jahre bis IBM wieder Cray bei den Supercomputern ablösen konnte. Dies geschah dann aber schon zu einer Zeit als die Rechner aus Tausenden von PC Prozessoren bestanden.

Parameter Wert
Produktion: 1964 bis 1977
Preis 7 bis 10 Millionen Dollar
Geschwindigkeit: 10 MIPS maximal, 3 MFLOPS maximal
3 bis 5 MIPS typisch, 1 MFLOPS typisch
Gewicht: 12.000 lbs (5400 kg)
Stromverbrauch. etwa 150 kW
Flächenbedarf: 69 m² 4 Schränke je 1,67 x 3,34 m.
Speicher: 64, 128 oder 256 KWorte (Ringkernspeicher mit einer Zugriffzeit von 425-475 ns)
Zusatzspeicher 2048 KWorte (Ringkernspeicher mit einer Zugriffzeit von 1400 ns)
Zykluszeit: 100 ns
Architekturbreite. 60 Bit
Instruktionen: 74
Funktionale Einheiten: 20 + 10 bis 20 Peripherieprozessoren, Zykluszeit 1000 ns, je 6 KByte Speicher
Transistoren: 400.000

Referenzen

http://www.textfiles.com/bitsavers/pdf/cdc/6x00/books/DesignOfAComputer_CDC6600.pdf

http://www.drdobbs.com/control-data-6600-the-supercomputer-arri/184404102

Artikel erstellt am 13.6.2013

Zum Thema Computer ist auch von mir ein Buch erschienen. "Computergeschichte(n)" beinhaltet, das was der Titel aussagt: einzelne Episoden aus der Frühzeit des PC. Es sind Episoden aus den Lebensläufen von Ed Roberts, Bill Gates, Steve Jobs, Stephen Wozniak, Gary Kildall, Adam Osborne, Jack Tramiel und Chuck Peddle und wie sie den PC schufen.

Das Buch wird abgerundet durch eine kurze Erklärung der Computertechnik vor dem PC, sowie einer Zusammenfassung was danach geschah, als die Claims abgesteckt waren. Ich habe versucht ein Buch zu schreiben, dass sie dahingehend von anderen Büchern abhebt, dass es nicht nur Geschichte erzählt sondern auch erklärt warum bestimmte Produkte erfolgreich waren, also auf die Technik eingeht.

Die 2014 erschienene zweite Auflage wurde aktualisiert und leicht erweitert. Die umfangreichste Änderung ist ein 60 Seiten starkes Kapitel über Seymour Cray und die von ihm entworfenen Supercomputer. Bedingt durch Preissenkungen bei Neuauflagen ist es mit 19,90 Euro trotz gestiegenem Umfang um 5 Euro billiger als die erste Auflage. Es ist auch als e-Book für 10,99 Euro erschienen.

Mehr über das Buch auf dieser eigenen Seite.

Hier geht's zur Gesamtübersicht meiner Bücher mit direkten Links zum BOD-Buchshop. Die Bücher sind aber auch direkt im Buchhandel bestellbar (da ich über sehr spezielle Themen schreibe, wird man sie wohl kaum in der Auslage finden) und sie sind natürlich in den gängigen Online-Plattformen wie Amazon, Libri, Buecher.de erhältlich.


© des Textes: Bernd Leitenberger. Jede Veröffentlichung dieses Textes im Ganzen oder in Auszügen darf nur mit Zustimmung des Urhebers erfolgen.
Sitemap Kontakt Impressum / Datenschutz Neues Hier werben / advertisment here Buchshop Bücher vom Autor Top 99