Crays Fehler

Seymour Cray gilt als der Vater der Supercomputer. Beginnend mit der CDC 6600, die 1964 erschien, waren Rechner die er (mit)konstruiert hatte über 30 Jahre die schnellsten der Welt. Doch bei dieser Leistung hatte er auch einige kapitale Fehlurteile. Die meisten führen sicher als erstes das Scheitern bei der CDC 8600 an. Schon bei der CDC 6600 war ein Problem, dass am Ende der Schränke die Signallaufzeiten Störungen auf den Leitungen verursachten weil Signale unterschiedlich stark verzögert wurden und so schon auf einer schnellen direkten Verbindung das nächste Taktsignal anlag. Die CDC 6600 lief nur mit 10 MHz, was immerhin noch Kabellängen von bis zu 20 m erlaubte. Die CDC 8600 arbeitete bei 125 MHz, wodurch die Packung extrem dicht sein musste, Kabel mussten nun sehr kurz sein. Cray bekam die Kühlung nicht in den Griff, die durch die schnellen aber sehr energiehungrigen ECL Schaltungen freigesetzt wurde. Er brach das Projekt ab und gründete seine eigene Firma. Das Mockup der 8600 sieht übrigens aus wir eine Kreuzung der folgenden Cray Rechner. Die Bank der Cray 1 und die kleine Zentraleinheit der Cray 2. Ich halte es nicht für einen Fehler, denn der Rechner war einfach für seine Zeit zu ambitioniert. Das Kühlungsproblem dieser Packungsdichte sollte Cray erst mehr als ein Jahrzehnt später bei der Cray 2 lösen. Selbst der unmittelbare Nachfolger die Cray 1 war langsamer und größer.

Dir Cray 1 war zwar um einiges schneller als die CDC 7600 und ein Verkaufsschlager, aber sie hatte im Design drei Mänge,l von denen er den gravierendsten nie behob. Der erste, kleine, Mangel waren zwei fehlende Maschinenbefehle die anscheinend für viele FORTAN Programme benötigt wurden und zwar für Anweisungen in der Form:

Y[i]=X[Index[i]]
Y[Index[I]]=X[i]

Also die Nutzung eines Array Elementes als Index. Das nannte sich im damaligen Sprachgebrauch Scatter/Gather, ich kenne es als indirekte Adressierung. Das konnte man relativ einfach bei der Cray X-MP nachreichen. Das zweite war das I/O Subsystem. Die Cray 1 hatte zur Kommunikation mit der Außenwelt nichts anderes als 12 Kanäle mit je 16 Leitungen und drei Handshakeleitungen. Über jeden Kanal konnten 320 MBit/s übertragen werden. Das dumme nur: Solange das stattfand war die CPU beschäftigt. Es fehlte ein System, das sich nur um die Ein/Ausgabe kümmerte und die Daten zwischenspeicherte. Das wurde bei der Cray 1S nachgeliefert, als erstes der drei Probleme, weil die unzureichenden I/O Möglichkeiten offensichtlich waren. (Anders als alle vorherigen Computer war die Cray 1 auch nicht vollständig – man brauchte einen eigenen Computer um sie überhaupt zu starten und mit ihr zu kommunizieren). Interessanterweise hat Cray 1 bei seinem ersten Supercomputer der CDC 6600 eigens 10 I/O Prozessoren vorgesehen um die CPU zu entlasten. Unverständlich, warum er bei der Cray 1 darauf verzichtete, denn die Cray 1S bekam dann ein analoges System verpasst.

Der Hauptmangel denn er auch nicht bei der Cray 2 und Cray 3 behob war die mangelnde Speicherbandbreite. Die Cray 1 konnte pro Taktzyklus 4 Instruktionen aber nur 1 Datenwort lesen. Das war bei den Daten viel zu wenig, denn bei Vektoroperationen konnte in einem Takt ein Ergebnis pro Funktionseinheit geliefert werden. Das entsprach beim Verketten von Rechnungen zwei Lese und einem Schreibzugriff. Die Cray 1 war ausgelegt auf Register-/Registeroprerationen, hatte deswegen auch die Vektorregister mit 64 Einträgen. Doch auch diese mussten gefüllt werden und bei einem Wort pro Takt war es so dass eine Vektoroperation in 72 Takten erledigt war, das füllen eines Registers aber 81 Takte erforderte. Das war mit ein Grund warum die Cray 1 in vielen Programmen ziemlich einbrach, selbst bei Vektoroperationen, es musste nur mehr als 64 Elemente sein. Bei der Cray X-MP, die Steven Chen als Firmeninterne Konkurrenz aus der Cray 1 entwickelte lernte man daraus und vervierfachte die Speicherbandbreite es gab dort pro Takt je zwei Lesezugriffe, einen Schreibzugriff und einen I/O Zugriff. Andere Rechner wie die Cyber 205 hatten von Anfang an breite Datenbusse, bei dieser z.B. 512 Bit breit, was 8 Datenworten auf einmal entsprach. Auch andere Techniken um dem langsamen Speicher zu begegnen wie Caches setzte Cray nicht ein. Er führte bei der Cray 2 einen lokalen Speicher ein, doch der wurde durch befehle gefüllt und pufferte nicht Daten aus dem Arbeitsspeicher ab. Bei der Cray 2 machte er zudem den Fehler vom einen Extrem (Bipolar-Speicher mit niedriger Integrationsdichte aber kurzer Zugriffszeit) aufs andere Extrem (DRAM Speicher mit hoher Integrationsdichte aber schlechter Zugriffszeit) zu wechseln. Die Folge: der Rechner erreichte selbst in spezialisierten Benchmarks selten mehr als 50% seiner nominellen Leistung. Auch für Vektorregister ideal, wäre ein Burstzugriff, der die 64 Register über die 53 Bänke gleichzeitig füllt und so gerade bei einem sso registerorientierten Rechner Geschwindigkeit bringt.

Die Cray 3 setzte dann auf Galliumarsenid, ob man das als Fehlentscheidung sieht hängt wohl mehr vom Standpunkt ab. Aus der Hardwaresicht war es so, dass Crays Rechner niedrig integriert waren. Die Cray 2 hatte z.b. nur 16 Gatter pro Chip. Gallumarsenid war bei so wenigen Elementen dann eine Alternative, die schneller war. Der Grundfehler den man Cray ankreiden muss ist aber dass er von der Grundarchitektur nicht abließ. er setzte nach wie vor auf wenige Prozessoren, auf ECL Technologie. Er erweiterte auch nicht die interne Architektur. Die 8 normalen, 8 Adressregister und 8 Vektorregister (mit je 64 Elementen) blieben bei jeder Generation. Es gab auch immer die gleichen Funktionseinheiten, sie wurden eher weniger wenn man durch höhere Integration zwei zusammenfassen konnte. Sie zu verdoppeln kam nicht in Frage, dabei taten dies als die Cray 3 erschien, schon Mikroprozessoren.

Eigentlich muss Cray das Problem bekannt gewesen sein. Als die Cray 1 erschien hatte sie einen Takt von 80 MHz, Mikroprozessoren lagen damals bei 3 MHz. Bis zur Cray 3 wurde der Takt auf 500 MHz gesteigert – der Faktor 6. Mikroprozessoren erreichten als die Cray 3 erschien 66 MHz, waren also um den Faktor 22 schneller geworden und in der Verarbeitung von Daten hatten sie enorm aufgeholt: Von 8 Bits auf 32 Bits auf einmal und Fließkommabefehle gab es nun auch. Ein Mikroprozessor war nun noch nicht so schnell wie eine Cray, aber er hatte enorm an Rechenleistung aufgeholt. In MFLOPS ausgedrückt von 0,004 auf 1-2. Würde diese Entwicklung weiter gehen (und sie beschleunigte sich sogar im folgenden Jahrzehnt) so würden sie bald die Rechner die aus tausenden von Chips bestanden und die man nicht mehr kleiner bauen konnte, weil bei 500 MHz (Takt der Cray 3) keine Leitung länger als 40 cm sein dürfte und die Rechner so enorm hoch integriert waren und im Kühlmittel badeten überholen.

In einem gewissen Sinne war Cray enorm konservativ, er hat im Prinzip die Architektur über 20 Jahre nicht geändert. Er versuchte nur mehr Geschwindigkeit durch schnellere Schaltungen, höhere Packung und zum Schluss ein anderes Halbleitermaterial zu erreichen. Das denke ich ist sein größter Fehler. wer stehenbleibt verliert den Anschluss.

6 thoughts on “Crays Fehler

  1. Interessant. – Gibt es Interviews oder andere Quellen, wo er seinen Standpunkt erläutert hat, warum er seine Basisarchitektur beibehielt und daran nichts änderte? – Irgendwelche Gründe muss er dafür ja gehabt haben. Die Frage, die sich mir jetzt dazu stellt ist, ob diese Gründe eher auf persönlicher Eitelkeit beruhten oder ob er einem „Technologie-Gespenst“, also einer Idee hinterher rannte, von der er nicht einsehen konnte oder wollte, dass sie nicht realisierbar ist oder von der übrigen Entwicklung inzwischen überholt worden war?

    In der wikipedia steht, dass er um 1976 herum ein entschiedener Gegner der Mehrprozessortechnik war, obwohl die in der Cray X-MP verwendet wurde. Da frage ich mich, was er dagegen hatte? – In den 90er Jahren war dann schlesslich abzusehen, dass der Mehrprozessortechnik die Zukunft gehören würde und das müsste er eigentlich mitbekommen haben, schliesslich hat er sie noch zu 2 Dritteln mit erlebt. – Oder war da inzwischen auch sowas wie „Altersstarrsinn“ bei ihm eingekehrt?

  2. Es gibt von Cray relativ wenig über eine Philosophie. Er hat sich mehr breit überdas rausgelassen was er gemacht hat. Auch CDC Mitarbeiter deren „Oral History“ ich für die CDC 7500 durchgesehen habe, berichteten davon, dass er einfach mit einer Idee kam ohne viel zu erklären.

    Die Cray X-MP stammt von Chen, der noch weniger als Cray selbst geändert hat. Er hat einfach nur die höhere Integration genutzt um in einem Gehäuse vier anstatt einem Prozessor unterzubringen. Bei der Cray 2 und 3 musste Cray selbst auf 4 bzw. 15 Prozessoren ausweichen, weil die Geschwindigkeit eben nicht mehr durch die Architektur oder kürzere Schaltzeiten (sie sank in 20 Jahren gerade mal um den Faktor 6) kam, sondern durch mehr Prozessoren.

    Der unterschied zu den MPP Systemen war, dass es eben nur wenige waren und nicht tausende.

  3. @Galliumarsenid: Wurde ja bis in die 90er immer als der „Silizium Nachfolger“ angepriesen. Den Wikipedia Absatz dazu fand ich ja interessant.

    Dennoch hat Galliumarsenid das Silicium als Massen-Halbleiter für eher alltägliche Anwendungen nicht verdrängen können. Die hauptsächlichen Gründe dafür sind die im Vergleich zu extrem häufigen Element Silicium wesentlich höheren Preise der deutlich selteneren Ausgangsstoffe Gallium und Arsen, sowie die aufwändigere Technologie zur Herstellung von Einkristallen. Dieser hohe technologische Aufwand begrenzt zugleich die Masse und den Durchmesser der Galliumarsenid-Einkristalle. Außerdem lassen sich in Silicium leichter isolierende Bereiche erzeugen – meist in Form von Siliciumdioxid –, als es im Galliumarsenid möglich ist. Da im GaAs wegen der im Vergleich zum Silicium deutlich geringeren Mobilität seiner leitenden Defektelektronen (den sogenannten „Löchern“) auch keine guten p-Kanal-Feldeffekttransistoren realisiert werden können, ist die CMOS-Schaltungstechnik in GaAs nicht möglich; dadurch kehrt sich der energetische Vorteil von GaAs für viele Anwendungszwecke ins Gegenteil um.

    @Altersstarrsinn: Kann auch ganz gewöhnlicher Starrsinn gewesen sin. Es gibt einfach Leute, die sich tunlichst nichts sagen lassen und immer behaupten recht zu haben.

    Und manchmal machen Firmen einen Fehler, dann sieht es so aus als ob sie daraus gelernt hätten und machen knapp 20 Jahre später denselben Fehler.

    Wie z.b. hier:
    https://www.youtube.com/watch?v=FS1p7W5dmBE
    (Passt nur halb zum Thema, aber es ist trotzdem interessant.)

  4. Für die Cray 1 und Cray 2 und deren Derivate gab es funktionierende Fortran Compiler mit automatischer Vektorisierung. Die Kunden hatten ihre Programme zwar im Regelfall als Source Code vorliegen, aber auf die Cray Architektur optimiert.
    Generische Automatische Parallelisierung ist auch heute noch ein ungelöstes Problem. Spezialfälle sind gelöst bzw. bei geeigneter Parametrisierung lösbar. Die Architektur einer Cray ist für das Lösen von Differentialgleichungen, für Wetter- und Klimasimulationen, sowie Atombombensimulationen relativ gut geeignet.

    Ich weiß von zwei dabei verwendeten Algorithmen, das sie sehr schlecht auf Mikroprozessoren parallelisierbar sind:
    – verkettete Matrixmultiplikationen (vermischt mit Additionen) bei denen die Matrizen gerade so in den Hauptspeicher passen. In der Regel wird sogar eines der Argumente überschrieben um Platz zu sparen. (Muß im Algorithmus berücksichtigt werden.)
    – Simulationen auf Gittern, bei denen der Kommunikationsanteil hoch ist im Verhältnis zum Rechenenteil.
    Es macht einen großen Unterschied aus, ob man die aktuellen Werte der Nachbarn bei jedem Simulationsschritt braucht, oder nur alle 10-100 Simulationsschritte.

  5. Im Prinzip gibt es das Problem bis heute, wie ein Artikel in der ct zeigte bei der es nur um die Zeile
    C[i] =A[i]*B{i] ging.
    Je nach Compilereinstellung kamen da zwischen 3,2 und 25,6 GFlops bei einem Haswell i7 heraus. Nutzte man eine Bibliotheksfunktion für Matrizenmultiplikation waren es 140 GFlops. Eine Cray konnte auch nur wenige Megaflops erreichen, wenn man skalare Werte bearbeitete und diese laufend wechselten, also nicht in den Registern gehalten werden konnte.

    Doch das ist eine Eigenschaft der Architektur und kein Fehler Crays. Was aber sein fehler war, war dass die Cray 1 bei Operationen aus dem Speicher maximal 26, MFlops erreichen konnte, bei Skalarwerten sogar noch weit darunter. Bei der X-MP wurde nur durch die Memoryports die Maximalleistung bei dem Fall dass die Operanden im Speicher sitzen auf 105 MFlops erhöht.

  6. Die genannten 140 GFlops für den Haswell kommen vermutlich daher, dass die genannte Bibliotheksfunktion nicht nur optimal vektorisiert (AVX) ist, sondern auch noch über alle vorhandenen Kerne parallelisiert. Voraussetzung ist zudem, dass die Daten im lokalen Cache liegen, denn die Speicherbandbreite eines Haswell reicht gerade mal für ein paar GFlops, wenn er sich für Berechnungen wie A[i] = B[i] * C[i] alle Bs und Cs aus dem Speicher holen und die As dorthin zurückschreiben muss.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.