În timp ce cipul Cell poate avea o serie de configurații diferite, configurația de bază este un cip cu mai multe nuclee compus dintr-un „Element procesor de putere” („PPE”) (denumit uneori „Element de procesare” sau „PE”) și mai multe „Elemente de procesare sinergică” („SPE”). PPE și SPE sunt conectate între ele printr-un bus intern de mare viteză denumit „Element Interconnect Bus” („EIB”).
Power Processor Element (PPE)Edit
E PPE este nucleul CPU bazat pe PowerPC, bazat pe PowerPC, cu un nucleu de procesare simultană-multithreaded în două direcții, cu o conductă în 23 de etape, care acționează ca și controler pentru cele opt SPE-uri, care gestionează cea mai mare parte a volumului de lucru computațional. PPE are capacități limitate de execuție în afara ordinii; poate efectua sarcini în afara ordinii și are conducte de execuție întârziată. PPE va funcționa cu sisteme de operare convenționale datorită asemănării sale cu alte procesoare PowerPC pe 64 de biți, în timp ce SPE-urile sunt concepute pentru executarea codului vectorizat în virgulă mobilă. PPE conține o memorie cache de nivel 1 de 64 KiB (32 KiB de instrucțiuni și 32 KiB de date) și o memorie cache de nivel 2 de 512 KiB. Dimensiunea unei linii de cache este de 128 de octeți. În plus, IBM a inclus o unitate AltiVec (VMX) care este complet pipelinată pentru virgulă mobilă de precizie unică (Altivec 1 nu suportă vectori în virgulă mobilă de precizie dublă.), o unitate de virgulă fixă pe 32 de biți (FXU) cu un fișier de registre pe 64 de biți pe fir, o unitate de încărcare și stocare (LSU), o unitate de virgulă mobilă pe 64 de biți (FPU), o unitate de ramificare (BRU) și o unitate de execuție a ramificațiilor (BXU).PPE constă din trei unități principale: Unitatea de instrucțiuni (UI), unitatea de execuție (XU) și unitatea de execuție vectorială/scalară (VSU). IU conține memoria cache de instrucțiuni L1, hardware de predicție a ramurilor, tampoane de instrucțiuni și conectare pentru verificarea dependenței. XU conține unitățile de execuție a numerelor întregi (FXU) și unitatea load-store (LSU). VSU conține toate resursele de execuție pentru FPU și VMX. Fiecare PPE poate efectua două operații de dublă precizie pe ciclu de ceas folosind o instrucțiune scalară de adunare-multiplicare fuzionată, ceea ce se traduce în 6,4 GFLOPS la 3,2 GHz; sau opt operații de o singură precizie pe ciclu de ceas cu o instrucțiune de adunare fuzionată vectorială, ceea ce se traduce în 25.6 GFLOPS la 3,2 GHz.
Xenon în Xbox 360Edit
PPE a fost proiectat special pentru procesorul Cell, dar în timpul dezvoltării, Microsoft a abordat IBM care dorea un nucleu de procesor de înaltă performanță pentru Xbox 360. IBM s-a conformat și a realizat procesorul Xenon cu trei nuclee, bazat pe o versiune ușor modificată a PPE cu extensii VMX128 adăugate.
Synergistic Processing Elements (SPE)Edit
Care SPE este un procesor cu dublă problemă în ordine compus dintr-o „Synergistic Processing Unit”, SPU, și un „Memory Flow Controller”, MFC (DMA, MMU și interfață de bus). SPE-urile nu au nici un hardware de predicție a ramificațiilor (prin urmare, există o sarcină grea pentru compilator). Fiecare SPE are 6 unități de execuție împărțite între conducte pare și impare pe fiecare SPE: SPU rulează un set de instrucțiuni (ISA) special dezvoltat cu o organizare SIMD pe 128 de biți pentru instrucțiuni de precizie simplă și dublă. În cazul generației actuale a Cell, fiecare SPE conține o SRAM încorporată de 256 KiB pentru instrucțiuni și date, numită „Local Storage” (a nu se confunda cu „Local Memory” în documentele Sony care se referă la VRAM), care este vizibilă pentru PPE și poate fi adresată direct de software. Fiecare SPE poate suporta până la 4 GiB de memorie de stocare locală. Memoria locală nu funcționează ca o memorie cache convențională a procesorului, deoarece nu este nici transparentă pentru software și nici nu conține structuri hardware care să prezică ce date vor fi încărcate. SPE-urile conțin un fișier de registre pe 128 de biți, cu 128 de intrări și măsoară 14,5 mm2 pe un proces de 90 nm. Un SPE poate opera cu șaisprezece numere întregi pe 8 biți, opt numere întregi pe 16 biți, patru numere întregi pe 32 de biți sau patru numere cu virgulă mobilă de o singură precizie într-un singur ciclu de ceas, precum și cu o operație de memorie. Rețineți că SPU nu poate accesa direct memoria sistemului; adresele de memorie virtuală pe 64 de biți formate de SPU trebuie să fie transmise de SPU către controlerul de flux de memorie (MFC) SPE pentru a configura o operație DMA în spațiul de adrese al sistemului.
Într-un scenariu tipic de utilizare, sistemul va încărca SPE-urile cu programe mici (similare cu firele de execuție), înlănțuind SPE-urile împreună pentru a gestiona fiecare etapă a unei operații complexe. De exemplu, un set-top box ar putea încărca programe pentru citirea unui DVD, decodare video și audio și afișare, iar datele ar fi transmise de la un SPE la altul până când ajung în final pe televizor. O altă posibilitate este de a împărți setul de date de intrare și de a avea mai multe SPE care efectuează același tip de operație în paralel. La 3,2 GHz, fiecare SPE oferă o performanță teoretică de 25,6 GFLOPS cu o singură precizie.
În comparație cu contemporanii săi din domeniul calculatoarelor personale, performanța generală relativ ridicată în virgulă mobilă a unui procesor Cell pare să eclipseze capacitățile unității SIMD din CPU-uri precum Pentium 4 și Athlon 64. Cu toate acestea, compararea doar a abilităților în virgulă mobilă ale unui sistem este o măsură unidimensională și specifică aplicației. Spre deosebire de un procesor Cell, astfel de procesoare desktop sunt mai potrivite pentru software-ul de uz general care rulează de obicei pe calculatoarele personale. În plus față de executarea mai multor instrucțiuni pe ceas, procesoarele de la Intel și AMD dispun de predictori de ramificare. Cell este proiectat să compenseze acest lucru cu ajutorul compilatorului, în care sunt create instrucțiuni de pregătire pentru ramificare. Pentru operațiile în virgulă mobilă de precizie dublă, așa cum se utilizează uneori în calculatoarele personale și cum se utilizează adesea în calculul științific, performanța Cell scade cu un ordin de mărime, dar atinge totuși 20,8 GFLOPS (1,8 GFLOPS per SPE, 6,4 GFLOPS per PPE). Varianta PowerXCell 8i, care a fost special concepută pentru dubla precizie, atinge 102,4 GFLOPS în calculele de dublă precizie.
Testele efectuate de IBM arată că SPE-urile pot atinge 98% din performanța lor maximă teoretică rulând multiplicări matriceale paralele optimizate.
Toshiba a dezvoltat un co-procesor alimentat de patru SPE-uri, dar fără PPE, numit SpursEngine conceput pentru a accelera efectele 3D și ale filmelor în electronicele de consum.
Care SPE are o memorie locală de 256 KB. În total, SPE-urile au 2 MB de memorie locală.
Element Interconnect Bus (EIB)Edit
Busul EIB este un bus de comunicație intern al procesorului Cell care conectează diferitele elemente de sistem pe cip: procesorul PPE, controlerul de memorie (MIC), cele opt coprocesoare SPE și două interfețe I/O în afara cipului, pentru un total de 12 participanți la PS3 (numărul de SPU poate varia în aplicațiile industriale). BEI include, de asemenea, o unitate de arbitraj care funcționează ca un set de semafoare. În unele documente, IBM se referă la participanții la EIB ca la „unități”.
În prezent, EIB este implementat ca un inel circular format din patru canale unidirecționale cu o lățime de 16 octeți, care se rotesc în sens invers, în perechi. Atunci când modelele de trafic permit acest lucru, fiecare canal poate transporta până la trei tranzacții concomitent. Având în vedere că EIB funcționează la jumătate din frecvența ceasului de sistem, frecvența efectivă a canalelor este de 16 octeți la fiecare două ceasuri de sistem. La concurența maximă, cu trei tranzacții active pe fiecare dintre cele patru inele, lățimea de bandă instantanee maximă a EIB este de 96 de octeți pe ceas (12 tranzacții concurente × 16 octeți pe lățime / 2 ceasuri de sistem pe transfer). Deși această cifră este adesea citată în literatura IBM, nu este realist să se scaleze pur și simplu acest număr în funcție de viteza de ceas a procesorului. Unitatea de arbitraj impune constrângeri suplimentare.
Inginerul senior IBM David Krolak, designerul principal al EIB, explică modelul de concurență:
Un inel poate începe o nouă operațiune la fiecare trei cicluri. Fiecare transfer durează întotdeauna opt bătăi. Aceasta a fost una dintre simplificările pe care le-am făcut, este optimizat pentru a transmite o mulțime de date. Dacă faceți operații mici, nu funcționează la fel de bine. Dacă vă gândiți la trenuri de opt vagoane care circulă pe această cale ferată, atâta timp cât trenurile nu se lovesc unul de altul, ele pot coexista pe calea ferată.
Care participant la BEI are un port de citire de 16 octeți și un port de scriere de 16 octeți. Limita pentru un singur participant este de a citi și de a scrie la o rată de 16 octeți pe ceas EIB (pentru simplitate, adesea considerat 8 octeți pe ceas de sistem). Fiecare procesor SPU conține o coadă de gestionare DMA dedicată, capabilă să programeze secvențe lungi de tranzacții către diverse puncte finale fără a interfera cu calculele în curs ale SPU; aceste cozi DMA pot fi gestionate și la nivel local sau de la distanță, oferind o flexibilitate suplimentară în modelul de control.
Datele circulă pe un canal EIB pas cu pas în jurul inelului. Deoarece există doisprezece participanți, numărul total de pași în jurul canalului înapoi la punctul de origine este de doisprezece. Șase pași este cea mai mare distanță între orice pereche de participanți. Un canal EIB nu este autorizat să transmită date care necesită mai mult de șase pași; astfel de date trebuie să urmeze ruta mai scurtă în jurul cercului în cealaltă direcție. Numărul de pași implicați în trimiterea pachetului are un impact foarte mic asupra latenței de transfer: viteza ceasului care conduce pașii este foarte rapidă în raport cu alte considerente. Cu toate acestea, distanțele de comunicare mai mari sunt în detrimentul performanței generale a BEI, deoarece reduc concurența disponibilă.
În ciuda dorinței inițiale a IBM de a implementa EIB ca o bară încrucișată mai puternică, configurația circulară pe care au adoptat-o pentru a economisi resurse rareori reprezintă un factor de limitare a performanțelor cipului Cell ca întreg. În cel mai rău caz, programatorul trebuie să aibă grijă deosebită să programeze modele de comunicare în care EIB să poată funcționa la niveluri ridicate de concurență.
David Krolak a explicat:
Bine, la început, la începutul procesului de dezvoltare, mai multe persoane făceau presiuni pentru un comutator crossbar, iar modul în care este proiectată magistrala, puteai de fapt să scoți EIB și să pui un comutator crossbar dacă erai dispus să dedici mai mult spațiu de siliciu pe cip pentru cablare. A trebuit să găsim un echilibru între conectivitate și suprafață și pur și simplu nu a existat suficient spațiu pentru a introduce un comutator crossbar complet. Așa că am ajuns la această structură inelară, pe care o considerăm foarte interesantă. Se încadrează în constrângerile de suprafață și are totuși o lățime de bandă foarte impresionantă.
Evaluarea lățimii de bandăEdit
La 3,2 GHz, fiecare canal curge la o rată de 25,6 GB/s. Privind BEI în mod izolat față de elementele sistemului pe care le conectează, realizarea a douăsprezece tranzacții simultane la această rată de curgere se traduce printr-o lățime de bandă abstractă a BEI de 307,2 GB/s. Pe baza acestei viziuni, multe publicații IBM descriu lățimea de bandă disponibilă a EIB ca fiind „mai mare de 300 GB/s”. Acest număr reflectă lățimea de bandă instantanee de vârf a EIB scalată în funcție de frecvența procesorului.
Cu toate acestea, alte restricții tehnice sunt implicate în mecanismul de arbitraj pentru pachetele acceptate pe bus. Grupul IBM Systems Performance a explicat:
Care unitate de pe EIB poate trimite și primi simultan 16 octeți de date la fiecare ciclu de bus. Lățimea maximă de bandă de date a întregului EIB este limitată de rata maximă la care adresele sunt snoopate pe toate unitățile din sistem, care este de una pe ciclu de bus. Având în vedere că fiecare solicitare de adresă „snooped” poate transfera potențial până la 128 de octeți, lățimea de bandă maximă teoretică a datelor pe EIB la 3,2 GHz este de 128Bx1,6 GHz = 204,8 GB/s.
Acest citat pare să reprezinte întreaga amploare a dezvăluirii publice de către IBM a acestui mecanism și a impactului său. Unitatea de arbitraj EIB, mecanismul de snooping și generarea de întreruperi la erori de translatare a segmentului sau a paginii nu sunt bine descrise în setul de documentație făcut încă public de IBM.
În practică, lățimea de bandă efectivă a EIB poate fi limitată și de participanții la inel implicați. În timp ce fiecare dintre cele nouă nuclee de procesare poate susține 25,6 GB/s de citire și scriere concomitent, controlerul de interfață de memorie (MIC) este legat la o pereche de canale de memorie XDR care permit un flux maxim de 25,6 GB/s pentru citire și scriere combinate, iar cele două controllere IO sunt documentate ca suportând o viteză maximă de intrare combinată de 25,6 GB/s și o viteză maximă de ieșire combinată de 35 GB/s.
Pentru a adăuga și mai multă confuzie, unele publicații mai vechi citează lățimea de bandă EIB presupunând un ceas de sistem de 4 GHz. Acest cadru de referință are ca rezultat o cifră de lățime de bandă EIB instantanee de 384 GB/s și o cifră de lățime de bandă limitată de arbitraj de 256 GB/s.
Din toate punctele de vedere, cifra teoretică de 204,8 GB/s cel mai des citată este cea mai bună de reținut. Grupul IBM Systems Performance a demonstrat că fluxurile de date centrate pe SPU ating 197 GB/s pe un procesor Cell care rulează la 3,2 GHz, astfel încât acest număr este o reflectare corectă și în practică.
Controlere de memorie și I/OEdit
Cell conține un macro Rambus XIO cu două canale care se interfațează cu memoria Rambus XDR. Controlerul de interfață de memorie (MIC) este separat de macroul XIO și este proiectat de IBM. Legătura XIO-XDR funcționează la 3,2 Gbit/s per pin. Două canale de 32 de biți pot oferi un maxim teoretic de 25,6 GB/s.
Interfața I/O, de asemenea un proiect Rambus, este cunoscută sub numele de FlexIO. Interfața FlexIO este organizată în 12 benzi, fiecare bandă fiind o cale unidirecțională de 8 biți lățime, punct-la-punct, unidirecțională. Cinci căi punct-la-punct cu lățimea de 8 biți sunt căi de intrare în Cell, în timp ce celelalte șapte sunt căi de ieșire. Acest lucru oferă o lățime de bandă maximă teoretică de 62,4 GB/s (36,4 GB/s la ieșire, 26 GB/s la intrare) la 2,6 GHz. Interfața FlexIO poate fi sincronizată independent, în mod tipic la 3,2 GHz. 4 benzi de intrare + 4 benzi de ieșire suportă coerența memoriei.