Hoewel de Cell-chip een aantal verschillende configuraties kan hebben, is de basisconfiguratie een chip met meerdere kernen, bestaande uit een “Power Processor Element” (“PPE”) (soms ook “Processing Element”, of “PE” genoemd), en meerdere “Synergistic Processing Elements” (“SPE”). De PPE en SPE’s zijn met elkaar verbonden via een interne snelle bus, de zogeheten “Element Interconnect Bus” (“EIB”).
Power Processor Element (PPE)bewerken
De PPE is de op PowerPC gebaseerde, dual-issue in-order twee-weg simultaan-multithreaded CPU-kern met een 23-traps pijplijn die fungeert als de controller voor de acht SPE’s, die het grootste deel van de computationele werklast afhandelen. De PPE heeft beperkte mogelijkheden voor uitvoering buiten de order; hij kan belastingen buiten de order uitvoeren en heeft pijplijnen voor vertraagde uitvoering. De PPE werkt met conventionele besturingssystemen vanwege de gelijkenis met andere 64-bit PowerPC-processoren, terwijl de SPE’s zijn ontworpen voor de uitvoering van vectorgestuurde floating point code. De PPE bevat een 64 KiB level 1 cache (32 KiB instructie en een 32 KiB data) en een 512 KiB level 2 cache. De grootte van een cache-regel is 128 bytes. Bovendien heeft IBM een AltiVec (VMX) eenheid opgenomen die volledig is gepipelined voor enkelvoudige precisie floating-point (Altivec 1 ondersteunt geen dubbele precisie floating-point vectoren.), 32-bit Fixed Point Unit (FXU) met 64-bit registerbestand per thread, Load and Store Unit (LSU), 64-bit Floating-Point Unit (FPU), Branch Unit (BRU) en Branch Execution Unit (BXU).De PPE bestaat uit drie hoofdeenheden: Instruction Unit (IU), Execution Unit (XU), en vector/scalar execution unit (VSU). IU bevat L1 instructie cache, branch prediction hardware, instructie buffers, en dependency checking login. XU bevat integer-uitvoeringseenheden (FXU) en load-store-eenheid (LSU). VSU bevat alle uitvoeringsbronnen voor FPU en VMX. Elke PPE kan twee dubbelprecisiebewerkingen per klokcyclus uitvoeren met een scalaire “fused-multiply-add”-instructie, wat neerkomt op 6,4 GFLOPS bij 3,2 GHz; of acht enkelprecisiebewerkingen per klokcyclus met een vector “fused-multiply-add”-instructie, wat neerkomt op 25,4 GFLOPS bij 3,2 GHz.6 GFLOPS bij 3,2 GHz.
Xenon in Xbox 360Edit
De PPE was speciaal ontworpen voor de Cell-processor, maar tijdens de ontwikkeling benaderde Microsoft IBM met de vraag om een krachtige processorkern voor zijn Xbox 360. IBM voldeed hieraan en maakte de tri-core Xenon processor, gebaseerd op een licht gewijzigde versie van de PPE met toegevoegde VMX128 extensies.
Synergistic Processing Elements (SPE)Edit
Elke SPE is een dual issue in order processor die bestaat uit een “Synergistic Processing Unit”, SPU, en een “Memory Flow Controller”, MFC (DMA, MMU, en bus interface). SPE’s hebben geen hardware voor takvoorspelling (vandaar een zware belasting voor de compiler). Elke SPE heeft 6 uitvoeringseenheden, verdeeld over even en oneven pijplijnen op elke SPE: De SPU draait een speciaal ontwikkelde instructieset (ISA) met 128-bit SIMD-organisatie voor enkele en dubbele precisie-instructies. Bij de huidige generatie van de Cell bevat elke SPE een 256 KiB ingebed SRAM voor instructies en gegevens, “Local Storage” genoemd (niet te verwarren met “Local Memory” in Sony’s documenten die verwijzen naar het VRAM), dat zichtbaar is voor de PPE en rechtstreeks kan worden aangesproken door software. Elke SPE kan tot 4 GiB lokaal opslaggeheugen ondersteunen. Het lokale geheugen werkt niet als een conventionele CPU-cache, aangezien het niet transparant is voor de software en ook geen hardwarestructuren bevat die voorspellen welke gegevens moeten worden geladen. De SPE’s bevatten een 128-bit, 128-entry registerbestand en zijn 14,5 mm2 groot op een 90 nm-proces. Een SPE kan zestien 8-bit gehele getallen, acht 16-bit gehele getallen, vier 32-bit gehele getallen of vier enkel-precisie floating-point getallen in één klokcyclus bewerken, evenals een geheugenbewerking. Merk op dat de SPU niet rechtstreeks toegang heeft tot het systeemgeheugen; de 64-bits virtuele geheugenadressen die door de SPU worden gevormd, moeten door de SPU worden doorgegeven aan de geheugenstroomregelaar (MFC) van de SPE om een DMA-bewerking binnen de systeemadresruimte op te zetten.
In een typisch gebruiksscenario zal het systeem de SPE’s laden met kleine programma’s (vergelijkbaar met threads), waarbij de SPE’s aan elkaar worden geketend om elke stap in een complexe bewerking af te handelen. Een set-top box zou bijvoorbeeld programma’s kunnen laden voor het lezen van een DVD, het decoderen van video en audio, en het weergeven, en de gegevens zouden van SPE naar SPE worden doorgegeven tot ze uiteindelijk op de TV terechtkomen. Een andere mogelijkheid is om de invoergegevens te partitioneren en verschillende SPE’s parallel dezelfde bewerkingen te laten uitvoeren. Bij 3,2 GHz levert elke SPE theoretisch 25,6 GFLOPS aan single-precision prestaties.
Vergeleken met zijn tijdgenoten in personal computers lijken de relatief hoge totale floating-point prestaties van een Cell-processor in het niet te vallen bij de mogelijkheden van de SIMD-eenheid in CPU’s als de Pentium 4 en de Athlon 64. Het vergelijken van alleen de floating-point capaciteiten van een systeem is echter een eendimensionale en toepassingsspecifieke metriek. In tegenstelling tot een Cell-processor zijn dergelijke desktop-CPU’s meer geschikt voor de general-purpose software die gewoonlijk op personal computers wordt gedraaid. Processoren van Intel en AMD voeren niet alleen meerdere instructies per klok uit, maar beschikken ook over branch predictors. De Cell is ontworpen om dit te compenseren met compilerhulp, waarbij prepare-to-branch instructies worden gemaakt. Voor dubbelprecieze floating-point bewerkingen, zoals die soms in personal computers en vaak in scientific computing worden gebruikt, dalen de prestaties van de Cell met een orde van grootte, maar halen nog steeds 20,8 GFLOPS (1,8 GFLOPS per SPE, 6,4 GFLOPS per PPE). De PowerXCell 8i-variant, die speciaal is ontworpen voor double-precision, haalt 102,4 GFLOPS in double-precision-berekeningen.
Tests door IBM tonen aan dat de SPE’s 98% van hun theoretische piekprestaties kunnen halen met geoptimaliseerde parallelle matrixvermenigvuldiging.
Toshiba heeft een co-processor ontwikkeld die wordt aangedreven door vier SPE’s, maar geen PPE, genaamd de SpursEngine, ontworpen om 3D- en filmeffecten in consumentenelektronica te versnellen.
Elke SPE heeft een lokaal geheugen van 256 KB. In totaal hebben de SPE’s 2 MB lokaal geheugen.
Element Interconnect Bus (EIB)Edit
De EIB is een communicatiebus intern aan de Cell processor die de verschillende on-chip systeemelementen verbindt: de PPE processor, de geheugencontroller (MIC), de acht SPE coprocessoren, en twee off-chip I/O interfaces, voor een totaal van 12 deelnemers aan de PS3 (het aantal SPU kan variëren in industriële toepassingen). De EIB omvat ook een arbitrage-eenheid die functioneert als een set van verkeerslichten. In sommige documenten verwijst IBM naar EIB-deelnemers als “eenheden”.
De EIB is momenteel geïmplementeerd als een cirkelvormige ring bestaande uit vier 16-byte-brede unidirectionele kanalen die in tegengestelde richting roteren in paren. Wanneer de verkeerspatronen het toelaten, kan elk kanaal tot drie transacties tegelijk verwerken. Aangezien de EIB op de helft van de systeemkloksnelheid draait, is de effectieve kanaalsnelheid 16 bytes per twee systeemklokken. Bij maximale gelijktijdigheid, met drie actieve transacties op elk van de vier ringen, bedraagt de maximale momentane EIB-bandbreedte 96 bytes per klok (12 gelijktijdige transacties × 16 bytes breed / 2 systeemklokken per overdracht). Hoewel dit getal vaak wordt genoemd in IBM-literatuur, is het onrealistisch om dit getal simpelweg te schalen naar processorkloksnelheid. De arbitrage-eenheid legt extra beperkingen op.
IBM Senior Engineer David Krolak, hoofdontwerper van de EIB, legt het concurrency-model uit:
Een ring kan elke drie cycli een nieuwe op starten. Elke overdracht duurt altijd acht tellen. Dat was een van de vereenvoudigingen die we hebben aangebracht, het is geoptimaliseerd voor het streamen van veel gegevens. Als je kleine ops doet, werkt het niet zo goed. Als je denkt aan treinen van acht wagons die over dit spoor rijden, zolang de treinen niet tegen elkaar botsen, kunnen ze naast elkaar bestaan op het spoor.
Elke deelnemer aan de EIB heeft één 16-byte leespoort en één 16-byte schrijfpoort. De limiet voor een enkele deelnemer is om te lezen en te schrijven met een snelheid van 16 bytes per EIB-klok (voor de eenvoud vaak beschouwd als 8 bytes per systeemklok). Elke SPU-processor bevat een speciale DMA-beheerwachtrij die in staat is lange reeksen transacties naar verschillende eindpunten te plannen zonder de lopende berekeningen van de SPU te storen; deze DMA-wachtrijen kunnen ook lokaal of op afstand worden beheerd, hetgeen extra flexibiliteit in het besturingsmodel biedt.
Gegevens stromen op een EIB-kanaal stapsgewijs rond de ring. Aangezien er twaalf deelnemers zijn, is het totale aantal stappen rond het kanaal terug naar het punt van oorsprong twaalf. Zes stappen is de langste afstand tussen een paar deelnemers. Een EIB-kanaal mag geen gegevens verzenden waarvoor meer dan zes stappen nodig zijn; dergelijke gegevens moeten de kortere route rond de cirkel in de andere richting nemen. Het aantal stappen dat nodig is om het pakket te verzenden heeft zeer weinig invloed op de overdrachtslatentie: de kloksnelheid die de stappen aandrijft is zeer snel in verhouding tot andere overwegingen. Langere communicatieafstanden zijn echter nadelig voor de algehele prestaties van de EIB, omdat zij de beschikbare concurrency verminderen.
Ondanks IBM’s oorspronkelijke wens om de EIB te implementeren als een krachtigere kruisbalk, vormt de cirkelvormige configuratie die zij hebben aangenomen om middelen te sparen zelden een beperkende factor voor de prestaties van de Cell chip als geheel. In het ergste geval moet de programmeur extra zorg besteden aan het plannen van communicatiepatronen waarbij de EIB in staat is om te functioneren op hoge concurrency niveaus.
David Krolak legt uit:
Wel, in het begin, vroeg in het ontwikkelingsproces, drongen verschillende mensen aan op een crossbar switch, en de manier waarop de bus is ontworpen, zou je eigenlijk de EIB eruit kunnen halen en een crossbar switch erin kunnen zetten als je bereid was om meer siliciumruimte op de chip te besteden aan bedrading. We moesten een evenwicht vinden tussen connectiviteit en oppervlakte, en er was gewoon niet genoeg ruimte om een volledige crossbar schakelaar in te bouwen. Dus kwamen we met deze ringstructuur die we erg interessant vinden. Hij past binnen de gebiedsbeperkingen en heeft toch een indrukwekkende bandbreedte.
BandbreedtebeoordelingEdit
Op 3,2 GHz stroomt elk kanaal met een snelheid van 25,6 GB/s. Als we de EIB los zien van de systeemelementen die ermee zijn verbonden, komt het realiseren van twaalf gelijktijdige transacties bij deze stroomsnelheid neer op een abstracte EIB-bandbreedte van 307,2 GB/s. Gebaseerd op deze weergave wordt in veel IBM publicaties de beschikbare EIB bandbreedte weergegeven als “groter dan 300 GB/s”. Dit getal geeft de piek momentane EIB bandbreedte weer, geschaald naar processor frequentie.
Er zijn echter andere technische beperkingen betrokken bij het arbitrage mechanisme voor pakketten die op de bus worden geaccepteerd. De IBM Systems Performance group legt uit:
Elke eenheid op de EIB kan tegelijkertijd 16 bytes aan gegevens verzenden en ontvangen elke buscyclus. De maximale gegevensbandbreedte van de gehele EIB wordt beperkt door de maximale snelheid waarmee adressen worden opgezocht door alle eenheden in het systeem, namelijk één per buscyclus. Aangezien elk gesnooped adresverzoek tot 128 bytes kan overdragen, is de theoretische piekbandbreedte voor gegevens op de EIB bij 3,2 GHz 128Bx1,6 GHz = 204,8 GB/s.
Dit citaat geeft blijkbaar de volledige omvang weer van IBM’s openbare bekendmaking van dit mechanisme en de gevolgen ervan. De EIB-arbitrage-eenheid, het “snooping”-mechanisme en het genereren van interrupts bij segment- of paginavertaalfouten worden niet goed beschreven in de documentatie die IBM tot nu toe openbaar heeft gemaakt.
In de praktijk kan de effectieve EIB-bandbreedte ook worden beperkt door de betrokken ringdeelnemers. Terwijl elk van de negen verwerkingskernen tegelijkertijd 25,6 GB/s lezen en schrijven kan ondersteunen, is de geheugeninterface-controller (MIC) gekoppeld aan een paar XDR-geheugenkanalen die een maximale stroom van 25,6 GB/s voor lezen en schrijven gecombineerd toestaan, en de twee IO-controllers zijn gedocumenteerd als ondersteunend voor een piek gecombineerde ingangssnelheid van 25,6 GB/s en een piek gecombineerde uitgangssnelheid van 35 GB/s.
Om de verwarring nog groter te maken, noemen sommige oudere publicaties EIB-bandbreedte uitgaande van een systeemklok van 4 GHz. Dit referentiekader resulteert in een momentane EIB-bandbreedte van 384 GB/s en een arbitragebeperkte bandbreedte van 256 GB/s.
Al met al is het theoretische getal van 204,8 GB/s dat het vaakst wordt genoemd, het beste om in gedachten te houden. De IBM Systems Performance groep heeft aangetoond dat SPU-centrische gegevensstromen 197 GB/s halen op een Cell processor die draait op 3,2 GHz, dus dit getal is ook een eerlijke afspiegeling van de praktijk.
Geheugen en I/O-controllersEdit
Cell bevat een tweekanaals Rambus XIO-macro die een interface heeft met Rambus XDR-geheugen. De geheugeninterfacecontroller (MIC) staat los van de XIO-macro en is ontworpen door IBM. De XIO-XDR verbinding werkt met 3,2 Gbit/s per pin. Twee 32-bit kanalen kunnen een theoretisch maximum van 25,6 GB/s leveren.
De I/O interface, ook een Rambus ontwerp, staat bekend als FlexIO. De FlexIO interface is georganiseerd in 12 lanes, waarbij elke lane een unidirectioneel 8-bit breed point-to-point pad is. Vijf 8-bit brede punt-tot-punt-paden zijn inkomende lanes naar de cel, terwijl de overige zeven uitgaand zijn. Dit levert een theoretische piekbandbreedte op van 62,4 GB/s (36,4 GB/s uitgaand, 26 GB/s inkomend) bij 2,6 GHz. De FlexIO-interface kan onafhankelijk worden geklokt, typisch op 3,2 GHz. 4 inkomende + 4 uitgaande lanes ondersteunen geheugencoherentie.