Während der Cell-Chip eine Reihe verschiedener Konfigurationen haben kann, ist die Grundkonfiguration ein Multi-Core-Chip, der aus einem „Power Processor Element“ („PPE“) (manchmal auch „Processing Element“ oder „PE“ genannt) und mehreren „Synergistic Processing Elements“ („SPE“) besteht. Die PPEs und SPEs sind durch einen internen Hochgeschwindigkeitsbus, den „Element Interconnect Bus“ („EIB“), miteinander verbunden.
Power Processor Element (PPE)Bearbeiten
Der PPE ist der PowerPC-basierte, dual-issue in-order two-way simultaneous-multithreaded CPU-Kern mit einer 23-stufigen Pipeline, die als Controller für die acht SPEs fungiert, die den größten Teil der Rechenarbeit erledigen. Die PSA verfügt über begrenzte Fähigkeiten zur Ausführung außerhalb der Reihenfolge; sie kann Lasten außerhalb der Reihenfolge ausführen und verfügt über verzögerte Ausführungspipelines. Die PPE kann aufgrund ihrer Ähnlichkeit mit anderen 64-Bit-PowerPC-Prozessoren mit herkömmlichen Betriebssystemen arbeiten, während die SPEs für die Ausführung von vektorisiertem Fließkommacode ausgelegt sind. Die PPE enthält einen 64 KiB Level 1 Cache (32 KiB Instruktionen und 32 KiB Daten) und einen 512 KiB Level 2 Cache. Die Größe einer Cache-Zeile beträgt 128 Byte. Darüber hinaus hat IBM eine AltiVec (VMX)-Einheit eingebaut, die vollständig für Gleitkomma mit einfacher Genauigkeit ausgelegt ist (Altivec 1 unterstützt keine Gleitkomma-Vektoren mit doppelter Genauigkeit), eine 32-Bit-Fixpunkt-Einheit (FXU) mit einer 64-Bit-Registerdatei pro Thread, eine Lade- und Speichereinheit (LSU), eine 64-Bit-Gleitkomma-Einheit (FPU), eine Verzweigungseinheit (BRU) und eine Verzweigungsausführungseinheit (BXU).PPE besteht aus drei Haupteinheiten: Befehlseinheit (IU), Ausführungseinheit (XU) und Vektor-/Skalar-Ausführungseinheit (VSU). Die IU enthält einen L1-Befehls-Cache, Hardware für die Verzweigungsvorhersage, Befehlspuffer und ein Login für die Abhängigkeitsüberprüfung. XU enthält die Integer-Ausführungseinheiten (FXU) und die Ladespeichereinheit (LSU). VSU enthält alle Ausführungsressourcen für FPU und VMX. Jede PPE kann zwei Double-Precision-Operationen pro Taktzyklus mit einem skalaren Fused-Multiply-Add-Befehl ausführen, was 6,4 GFLOPS bei 3,2 GHz entspricht, oder acht Single-Precision-Operationen pro Taktzyklus mit einem Vektor-Fused-Multiply-Add-Befehl, was 25.6 GFLOPS bei 3,2 GHz.
Xenon in Xbox 360Edit
Der PPE wurde speziell für den Cell-Prozessor entwickelt, aber während der Entwicklung trat Microsoft an IBM heran und wollte einen Hochleistungsprozessorkern für seine Xbox 360. IBM kam dem Wunsch nach und stellte den Xenon-Prozessor mit drei Kernen her, der auf einer leicht modifizierten Version des PPE mit zusätzlichen VMX128-Erweiterungen basierte.
Synergistic Processing Elements (SPE)Bearbeiten
Jeder SPE ist ein doppelter Auftragsprozessor, der aus einer „Synergistic Processing Unit“, SPU, und einem „Memory Flow Controller“, MFC (DMA, MMU und Busschnittstelle) besteht. SPEs haben keine Hardware für die Verzweigungsvorhersage (daher ist der Compiler stark belastet). Jede SPE verfügt über 6 Ausführungseinheiten, die sich auf ungerade und gerade Pipelines auf jeder SPE verteilen: Die SPU führt einen speziell entwickelten Befehlssatz (ISA) mit 128-Bit-SIMD-Organisation für einfache und doppelte Präzisionsbefehle aus. Bei der aktuellen Cell-Generation enthält jede SPE einen 256 KiB großen eingebetteten SRAM-Speicher für Befehle und Daten, der als „Local Storage“ bezeichnet wird (nicht zu verwechseln mit dem „Local Memory“ in den Dokumenten von Sony, die sich auf den VRAM beziehen) und der für die SPE sichtbar ist und direkt von der Software angesprochen werden kann. Jede SPE kann bis zu 4 GiB des lokalen Speichers unterstützen. Der lokale Speicher funktioniert nicht wie ein herkömmlicher CPU-Cache, da er weder für die Software transparent ist noch Hardwarestrukturen enthält, die vorhersagen, welche Daten geladen werden sollen. Die SPEs enthalten eine 128-Bit-Registerdatei mit 128 Einträgen und messen 14,5 mm2 auf einem 90-nm-Prozess. Eine SPE kann sechzehn 8-Bit-Ganzzahlen, acht 16-Bit-Ganzzahlen, vier 32-Bit-Ganzzahlen oder vier Gleitkommazahlen mit einfacher Genauigkeit in einem einzigen Taktzyklus sowie eine Speicheroperation verarbeiten. Beachten Sie, dass die SPU nicht direkt auf den Systemspeicher zugreifen kann; die von der SPU gebildeten virtuellen 64-Bit-Speicheradressen müssen von der SPU an den Memory Flow Controller (MFC) der SPE weitergegeben werden, um eine DMA-Operation innerhalb des Systemadressraums einzurichten.
In einem typischen Nutzungsszenario lädt das System die SPEs mit kleinen Programmen (ähnlich wie Threads) und verkettet die SPEs miteinander, um jeden Schritt in einer komplexen Operation zu verarbeiten. Eine Set-Top-Box könnte zum Beispiel Programme zum Lesen einer DVD, zur Video- und Audio-Dekodierung und zur Anzeige laden, und die Daten würden von SPE zu SPE weitergereicht, bis sie schließlich auf dem Fernseher landen. Eine andere Möglichkeit besteht darin, den Eingangsdatensatz zu partitionieren und mehrere SPEs die gleiche Art von Operation parallel durchführen zu lassen. Bei 3,2 GHz bietet jede SPE eine theoretische Leistung von 25,6 GFLOPS in einfacher Genauigkeit.
Im Vergleich zu den Zeitgenossen der Personalcomputer scheint die relativ hohe Gesamtfließkommaleistung eines Cell-Prozessors die Fähigkeiten der SIMD-Einheit in CPUs wie dem Pentium 4 und dem Athlon 64 in den Schatten zu stellen. Der Vergleich der Fließkommafähigkeiten eines Systems ist jedoch ein eindimensionaler und anwendungsspezifischer Maßstab. Im Gegensatz zu einem Cell-Prozessor eignen sich solche Desktop-CPUs besser für die Allzweck-Software, die normalerweise auf Personal Computern ausgeführt wird. Prozessoren von Intel und AMD führen nicht nur mehrere Anweisungen pro Takt aus, sondern verfügen auch über Verzweigungsvorhersagen. Der Cell ist so konzipiert, dass er dies mit Hilfe des Compilers kompensiert, indem er Verzweigungsvorbereitungsbefehle erstellt. Bei Gleitkommaoperationen mit doppelter Genauigkeit, wie sie manchmal in Personalcomputern und häufig bei wissenschaftlichen Berechnungen verwendet werden, sinkt die Leistung des Cell um eine Größenordnung, erreicht aber immer noch 20,8 GFLOPS (1,8 GFLOPS pro SPE, 6,4 GFLOPS pro PPE). Die PowerXCell 8i-Variante, die speziell für Double-Precision-Berechnungen entwickelt wurde, erreicht 102,4 GFLOPS bei Double-Precision-Berechnungen.
Tests von IBM zeigen, dass die SPEs bei optimierter paralleler Matrixmultiplikation 98 % ihrer theoretischen Spitzenleistung erreichen können.
Toshiba hat einen Co-Prozessor entwickelt, der von vier SPEs, aber nicht von einer PPE angetrieben wird und als SpursEngine bezeichnet wird, um 3D- und Filmeffekte in der Unterhaltungselektronik zu beschleunigen.
Jede SPE hat einen lokalen Speicher von 256 KB. Insgesamt verfügen die SPEs über 2 MB lokalen Speicher.
Element Interconnect Bus (EIB)
Der EIB ist ein interner Kommunikationsbus des Cell-Prozessors, der die verschiedenen Systemelemente auf dem Chip miteinander verbindet: den PPE-Prozessor, den Speicher-Controller (MIC), die acht SPE-Coprozessoren und zwei Off-Chip-E/A-Schnittstellen, insgesamt also 12 Teilnehmer im PS3 (die Anzahl der SPUs kann in industriellen Anwendungen variieren). Der EIB umfasst auch eine Arbitrierungseinheit, die als Ampel fungiert. In einigen Dokumenten bezeichnet IBM die EIB-Teilnehmer als „Einheiten“.
Der EIB ist derzeit als kreisförmiger Ring implementiert, der aus vier 16 Byte breiten unidirektionalen Kanälen besteht, die sich paarweise gegenläufig drehen. Wenn es die Verkehrslage zulässt, kann jeder Kanal bis zu drei Transaktionen gleichzeitig übertragen. Da der EIB mit der halben Systemtaktrate läuft, beträgt die effektive Kanalrate 16 Byte alle zwei Systemtakte. Bei maximaler Gleichzeitigkeit mit drei aktiven Transaktionen auf jedem der vier Ringe beträgt die momentane EIB-Spitzenbandbreite 96 Byte pro Takt (12 gleichzeitige Transaktionen × 16 Byte Breite / 2 Systemtakte pro Übertragung). Diese Zahl wird zwar in der IBM-Literatur häufig genannt, doch ist es unrealistisch, diese Zahl einfach mit der Taktfrequenz des Prozessors zu skalieren. Die Arbitrierungseinheit erlegt zusätzliche Beschränkungen auf.
IBM Senior Engineer David Krolak, leitender Entwickler des EIB, erklärt das Gleichzeitigkeitsmodell:
Ein Ring kann alle drei Zyklen eine neue Operation starten. Jede Übertragung dauert immer acht Takte. Das war eine der Vereinfachungen, die wir vorgenommen haben, denn es ist für das Streaming großer Datenmengen optimiert. Bei kleinen Operationen funktioniert es nicht ganz so gut. Solange die Züge nicht zusammenstoßen, können sie auf der Strecke koexistieren.
Jeder EIB-Teilnehmer hat einen 16-Byte-Leseanschluss und einen 16-Byte-Schreibanschluss. Die Grenze für einen einzelnen Teilnehmer liegt bei einer Lese- und Schreibrate von 16 Byte pro EIB-Takt (der Einfachheit halber werden oft 8 Byte pro Systemtakt betrachtet). Jeder SPU-Prozessor enthält eine spezielle DMA-Verwaltungswarteschlange, die in der Lage ist, lange Sequenzen von Transaktionen an verschiedene Endpunkte zu planen, ohne die laufenden Berechnungen der SPU zu stören; diese DMA-Warteschlangen können auch lokal oder aus der Ferne verwaltet werden, was zusätzliche Flexibilität im Steuerungsmodell bietet.
Daten fließen auf einem EIB-Kanal schrittweise um den Ring. Da es zwölf Teilnehmer gibt, beträgt die Gesamtzahl der Schritte um den Kanal zurück zum Ursprungspunkt zwölf. Sechs Schritte sind die längste Entfernung zwischen einem Teilnehmerpaar. Ein EIB-Kanal darf keine Daten übermitteln, die mehr als sechs Schritte benötigen; solche Daten müssen den kürzeren Weg um den Kreis in die andere Richtung nehmen. Die Anzahl der Schritte, die für das Senden des Pakets erforderlich sind, hat nur geringe Auswirkungen auf die Übertragungslatenz: Die Taktrate, die die Schritte steuert, ist im Vergleich zu anderen Überlegungen sehr schnell. Längere Kommunikationsdistanzen sind jedoch nachteilig für die Gesamtleistung des EIB, da sie die verfügbare Gleichzeitigkeit verringern.
Trotz des ursprünglichen Wunsches von IBM, den EIB als leistungsfähigere Kreuzschiene zu implementieren, stellt die kreisförmige Konfiguration, die sie zur Schonung der Ressourcen gewählt haben, nur selten einen begrenzenden Faktor für die Leistung des Cell-Chips als Ganzes dar. Im schlimmsten Fall muss der Programmierer besonders darauf achten, Kommunikationsmuster zu planen, bei denen der EIB in der Lage ist, mit hoher Gleichzeitigkeit zu arbeiten.
David Krolak erklärte:
Nun, am Anfang, früh im Entwicklungsprozess, drängten mehrere Leute auf einen Crossbar-Switch, und so wie der Bus konstruiert ist, könnte man tatsächlich den EIB herausnehmen und einen Crossbar-Switch einbauen, wenn man bereit wäre, mehr Siliziumplatz auf dem Chip für die Verkabelung zu verwenden. Wir mussten ein Gleichgewicht zwischen Konnektivität und Fläche finden, und es gab einfach nicht genug Platz, um einen vollständigen Crossbar-Switch einzubauen. Also haben wir uns diese Ringstruktur ausgedacht, die wir für sehr interessant halten. Sie passt zu den Flächenbeschränkungen und hat dennoch eine sehr beeindruckende Bandbreite.
BandbreitenbewertungBearbeiten
Bei 3,2 GHz fließt jeder Kanal mit einer Rate von 25,6 GB/s. Betrachtet man den EIB isoliert von den Systemelementen, die er verbindet, so ergibt sich bei zwölf gleichzeitigen Transaktionen mit dieser Flussrate eine abstrakte EIB-Bandbreite von 307,2 GB/s. Basierend auf dieser Sichtweise wird in vielen IBM-Publikationen die verfügbare EIB-Bandbreite mit „mehr als 300 GB/s“ angegeben. Diese Zahl spiegelt die momentane EIB-Spitzenbandbreite, skaliert mit der Prozessorfrequenz, wider.
Es gibt jedoch noch weitere technische Einschränkungen, die mit dem Arbitrierungsmechanismus für die auf dem Bus akzeptierten Pakete zusammenhängen. Die IBM Systems Performance Group erklärt:
Jede Einheit auf dem EIB kann gleichzeitig 16 Byte Daten pro Buszyklus senden und empfangen. Die maximale Datenbandbreite des gesamten EIB ist durch die maximale Rate begrenzt, mit der Adressen über alle Einheiten im System gesnooped werden, nämlich eine pro Buszyklus. Da jede gesnoopte Adressanforderung potenziell bis zu 128 Byte übertragen kann, beträgt die theoretische Spitzen-Datenbandbreite auf dem EIB bei 3,2 GHz 128Bx1,6 GHz = 204,8 GB/s.
Dieses Zitat stellt offenbar den vollen Umfang der öffentlichen Offenlegung dieses Mechanismus und seiner Auswirkungen durch IBM dar. Die EIB-Arbitrierungseinheit, der Snooping-Mechanismus und die Interrupt-Generierung bei Segment- oder Seitenübersetzungsfehlern sind in der bisher von IBM veröffentlichten Dokumentation nicht genau beschrieben.
In der Praxis kann die effektive EIB-Bandbreite auch durch die beteiligten Ringteilnehmer begrenzt werden. Während jeder der neun Prozessorkerne 25,6 GB/s gleichzeitig lesen und schreiben kann, ist der Speicherschnittstellen-Controller (MIC) an ein Paar XDR-Speicherkanäle gebunden, die einen maximalen Durchfluss von 25,6 GB/s für Lese- und Schreibvorgänge zusammen ermöglichen, und die beiden IO-Controller sind so dokumentiert, dass sie eine kombinierte Spitzen-Eingangsgeschwindigkeit von 25,6 GB/s und eine kombinierte Spitzen-Ausgangsgeschwindigkeit von 35 GB/s unterstützen.
Um die Verwirrung noch zu vergrößern, wird in einigen älteren Veröffentlichungen die EIB-Bandbreite unter der Annahme eines Systemtakts von 4 GHz angegeben. Dieser Bezugsrahmen ergibt eine momentane EIB-Bandbreite von 384 GB/s und eine arbitrationsbegrenzte Bandbreite von 256 GB/s.
Alles in allem ist die theoretische Zahl von 204,8 GB/s, die am häufigsten genannt wird, die beste, die man im Auge behalten sollte. Die IBM Systems Performance Group hat SPU-zentrierte Datenströme demonstriert, die 197 GB/s auf einem Cell-Prozessor mit 3,2 GHz erreichen, so dass diese Zahl auch die Praxis gut widerspiegelt.
Speicher- und E/A-ControllerBearbeiten
Cell enthält ein Zweikanal-Rambus-XIO-Makro, das eine Schnittstelle zum Rambus-XDR-Speicher bildet. Der Memory Interface Controller (MIC) ist vom XIO-Makro getrennt und wurde von IBM entwickelt. Die XIO-XDR-Verbindung läuft mit 3,2 Gbit/s pro Pin. Zwei 32-Bit-Kanäle können ein theoretisches Maximum von 25,6 GB/s liefern.
Die E/A-Schnittstelle, ebenfalls ein Rambus-Design, ist als FlexIO bekannt. Die FlexIO-Schnittstelle ist in 12 Lanes organisiert, wobei jede Lane ein unidirektionaler 8-Bit breiter Punkt-zu-Punkt-Pfad ist. Fünf 8-Bit breite Punkt-zu-Punkt-Pfade sind eingehende Lanes zu Cell, die restlichen sieben sind ausgehende Lanes. Dies ergibt eine theoretische Spitzenbandbreite von 62,4 GB/s (36,4 GB/s ausgehend, 26 GB/s eingehend) bei 2,6 GHz. Die FlexIO-Schnittstelle kann unabhängig getaktet werden, typischerweise mit 3,2 GHz. 4 eingehende + 4 ausgehende Lanes unterstützen die Speicherkohärenz.