Mentre il chip Cell può avere un certo numero di configurazioni diverse, la configurazione di base è un chip multi-core composto da un “Power Processor Element” (“PPE”) (talvolta chiamato “Processing Element”, o “PE”), e più “Synergistic Processing Elements” (“SPE”). I PPE e gli SPE sono collegati insieme da un bus interno ad alta velocità soprannominato “Element Interconnect Bus” (“EIB”).
Power Processor Element (PPE)Edit
Il PPE è il core della CPU basato su PowerPC, dual-issue in-order two-way simultaneous-multithreaded con una pipeline a 23 stadi che funge da controller per gli otto SPE, che gestiscono la maggior parte del carico di lavoro computazionale. Il PPE ha limitate capacità di esecuzione fuori dall’ordine; può eseguire carichi fuori dall’ordine e ha pipeline di esecuzione ritardata. Il PPE funzionerà con sistemi operativi convenzionali grazie alla sua somiglianza con altri processori PowerPC a 64 bit, mentre gli SPE sono progettati per l’esecuzione di codice in virgola mobile vettorizzato. Il PPE contiene una cache di livello 1 da 64 KiB (32 KiB di istruzioni e 32 KiB di dati) e una cache di livello 2 da 512 KiB. La dimensione di una linea di cache è di 128 byte. Inoltre, IBM ha incluso un’unità AltiVec (VMX) che è completamente pipelineata per la virgola mobile a precisione singola (Altivec 1 non supporta i vettori in virgola mobile a doppia precisione.), un’unità a virgola fissa a 32 bit (FXU) con un file di registro a 64 bit per thread, un’unità di caricamento e memorizzazione (LSU), un’unità a virgola mobile a 64 bit (FPU), un’unità di ramificazione (BRU) e un’unità di esecuzione di ramo (BXU).PPE consiste di tre unità principali: Instruction Unit (IU), Execution Unit (XU), e vector/scalar execution unit (VSU). IU contiene la cache delle istruzioni L1, l’hardware di predizione delle diramazioni, i buffer delle istruzioni e il login di controllo delle dipendenze. XU contiene unità di esecuzione integer (FXU) e unità load-store (LSU). VSU contiene tutte le risorse di esecuzione per FPU e VMX. Ogni PPE può completare due operazioni a doppia precisione per ciclo di clock usando un’istruzione scalare fusa-multipla-add, che si traduce in 6,4 GFLOPS a 3,2 GHz; o otto operazioni a singola precisione per ciclo di clock con un’istruzione vettoriale fusa-multipla-add, che si traduce in 25.6 GFLOPS a 3,2 GHz.
Xenon in Xbox 360Edit
Il PPE è stato progettato specificamente per il processore Cell, ma durante lo sviluppo, Microsoft si è rivolta a IBM chiedendo un core di processore ad alte prestazioni per la sua Xbox 360. IBM ha acconsentito e ha realizzato il processore tri-core Xenon, basato su una versione leggermente modificata del PPE con l’aggiunta di estensioni VMX128.
Synergistic Processing Elements (SPE)Edit
Ogni SPE è un processore a doppia emissione composto da una “Synergistic Processing Unit”, SPU, e un “Memory Flow Controller”, MFC (DMA, MMU, e interfaccia bus). Le SPE non hanno alcun hardware di predizione di ramo (quindi c’è un pesante onere per il compilatore). Ogni SPE ha 6 unità di esecuzione divise tra pipeline pari e dispari su ogni SPE: la SPU esegue un set di istruzioni (ISA) appositamente sviluppato con un’organizzazione SIMD a 128 bit per istruzioni a precisione singola e doppia. Con l’attuale generazione del Cell, ogni SPE contiene una SRAM incorporata di 256 KiB per istruzioni e dati, chiamata “Local Storage” (da non confondere con “Local Memory” nei documenti Sony che si riferiscono alla VRAM) che è visibile al PPE e può essere indirizzata direttamente dal software. Ogni SPE può supportare fino a 4 GiB di memoria locale. La memoria locale non funziona come una cache convenzionale della CPU poiché non è trasparente al software né contiene strutture hardware che prevedono quali dati caricare. Le SPE contengono un file di registro a 128 bit e 128 voci e misurano 14,5 mm2 su un processo da 90 nm. Una SPE può operare su sedici interi a 8 bit, otto interi a 16 bit, quattro interi a 32 bit, o quattro numeri in virgola mobile a singola precisione in un singolo ciclo di clock, così come un’operazione di memoria. Si noti che la SPU non può accedere direttamente alla memoria di sistema; gli indirizzi di memoria virtuale a 64 bit formati dalla SPU devono essere passati dalla SPU al memory flow controller (MFC) della SPE per impostare un’operazione DMA all’interno dello spazio degli indirizzi di sistema.
In un tipico scenario di utilizzo, il sistema caricherà le SPE con piccoli programmi (simili ai thread), concatenando le SPE per gestire ogni passo di un’operazione complessa. Per esempio, un set-top box potrebbe caricare programmi per la lettura di un DVD, la decodifica video e audio, e la visualizzazione e i dati verrebbero passati da SPE a SPE fino a finire sul televisore. Un’altra possibilità è quella di partizionare il set di dati in ingresso e avere diverse SPE che eseguono lo stesso tipo di operazione in parallelo. A 3,2 GHz, ogni SPE fornisce 25,6 GFLOPS teorici di prestazioni in singola precisione.
Paragonato ai suoi contemporanei di personal computer, la prestazione complessiva in virgola mobile relativamente alta di un processore Cell sembra nanizzare le capacità dell’unità SIMD in CPU come il Pentium 4 e l’Athlon 64. Tuttavia, confrontare solo le capacità in virgola mobile di un sistema è una metrica unidimensionale e specifica dell’applicazione. A differenza di un processore Cell, queste CPU desktop sono più adatte al software general-purpose solitamente eseguito sui personal computer. Oltre all’esecuzione di più istruzioni per clock, i processori Intel e AMD dispongono di predittori di ramo. Il Cell è progettato per compensare questo con l’assistenza del compilatore, in cui vengono create istruzioni prepare-to-branch. Per le operazioni in virgola mobile a doppia precisione, come a volte usate nei personal computer e spesso utilizzate nel calcolo scientifico, le prestazioni del Cell scendono di un ordine di grandezza, ma raggiungono comunque 20,8 GFLOPS (1,8 GFLOPS per SPE, 6,4 GFLOPS per PPE). La variante PowerXCell 8i, che è stata specificamente progettata per la doppia precisione, raggiunge 102,4 GFLOPS nei calcoli in doppia precisione.
I test di IBM mostrano che gli SPE possono raggiungere il 98% delle loro prestazioni teoriche di picco eseguendo la moltiplicazione di matrici parallele ottimizzate.
Toshiba ha sviluppato un co-processore alimentato da quattro SPE, ma nessun PPE, chiamato SpursEngine progettato per accelerare gli effetti 3D e cinematografici nell’elettronica di consumo.
Ogni SPE ha una memoria locale di 256 KB. In totale, gli SPE hanno 2 MB di memoria locale.
Element Interconnect Bus (EIB)Edit
L’EIB è un bus di comunicazione interno al processore Cell che collega i vari elementi del sistema on-chip: il processore PPE, il controller di memoria (MIC), gli otto coprocessori SPE e due interfacce I/O off-chip, per un totale di 12 partecipanti alla PS3 (il numero di SPU può variare nelle applicazioni industriali). L’EIB include anche un’unità di arbitraggio che funziona come un insieme di semafori. In alcuni documenti, IBM si riferisce ai partecipanti della BEI come “unità”.
La BEI è attualmente implementata come un anello circolare che consiste di quattro canali unidirezionali di 16 byte di larghezza che ruotano in coppia. Quando i modelli di traffico lo permettono, ogni canale può trasmettere fino a tre transazioni contemporaneamente. Poiché l’EIB funziona a metà della frequenza di clock del sistema, la frequenza effettiva del canale è di 16 byte ogni due clock del sistema. Alla massima concorrenza, con tre transazioni attive su ciascuno dei quattro anelli, la larghezza di banda istantanea di picco dell’EIB è di 96 byte per clock (12 transazioni concorrenti × 16 byte di larghezza / 2 clock di sistema per trasferimento). Mentre questa cifra è spesso citata nella letteratura IBM, non è realistico scalare semplicemente questo numero dalla velocità di clock del processore. L’unità di arbitraggio impone ulteriori vincoli.
L’ingegnere senior IBM David Krolak, lead designer dell’EIB, spiega il modello di concorrenza:
Un anello può iniziare una nuova operazione ogni tre cicli. Ogni trasferimento richiede sempre otto battute. Questa è stata una delle semplificazioni che abbiamo fatto, è ottimizzata per lo streaming di molti dati. Se fai piccole operazioni, non funziona altrettanto bene. Se pensate a treni di otto vagoni che corrono intorno a questo binario, finché i treni non si scontrano tra loro, possono coesistere sul binario.
Ogni partecipante alla BEI ha una porta di lettura a 16 byte e una porta di scrittura a 16 byte. Il limite per un singolo partecipante è di leggere e scrivere ad una velocità di 16 byte per clock EIB (per semplicità spesso considerato 8 byte per clock di sistema). Ogni processore SPU contiene una coda di gestione DMA dedicata in grado di programmare lunghe sequenze di transazioni a vari endpoint senza interferire con i calcoli in corso della SPU; queste code DMA possono essere gestite localmente o anche in remoto, fornendo ulteriore flessibilità nel modello di controllo.
I dati fluiscono su un canale EIB in modo graduale attorno all’anello. Poiché ci sono dodici partecipanti, il numero totale di passi intorno al canale fino al punto di origine è dodici. Sei passi è la distanza più lunga tra qualsiasi coppia di partecipanti. Un canale EIB non può trasmettere dati che richiedono più di sei passi; tali dati devono prendere il percorso più breve intorno al cerchio nell’altra direzione. Il numero di passi coinvolti nell’invio del pacchetto ha un impatto molto piccolo sulla latenza di trasferimento: la velocità di clock che guida i passi è molto veloce rispetto ad altre considerazioni. Tuttavia, distanze di comunicazione più lunghe sono dannose per le prestazioni complessive della BEI in quanto riducono la concorrenza disponibile.
Nonostante il desiderio originale di IBM di implementare la BEI come una barra trasversale più potente, la configurazione circolare che hanno adottato per risparmiare risorse raramente rappresenta un fattore limitante sulle prestazioni del chip Cell nel suo complesso. Nel peggiore dei casi, il programmatore deve fare molta attenzione a programmare schemi di comunicazione in cui l’EIB sia in grado di funzionare ad alti livelli di concorrenza.
David Krolak ha spiegato:
Bene, all’inizio, all’inizio del processo di sviluppo, molte persone stavano spingendo per uno switch crossbar, e per come è progettato il bus, si potrebbe effettivamente togliere l’EIB e mettere uno switch crossbar se si fosse disposti a dedicare più spazio di silicio sul chip al cablaggio. Abbiamo dovuto trovare un equilibrio tra la connettività e l’area, e non c’era abbastanza spazio per inserire uno switch crossbar completo. Così siamo arrivati a questa struttura ad anello che pensiamo sia molto interessante. Si adatta ai vincoli di area e ha ancora una larghezza di banda impressionante.
Valutazione della larghezza di bandaModifica
A 3,2 GHz, ogni canale scorre a una velocità di 25,6 GB/s. Considerando la BEI isolata dagli elementi del sistema che collega, il raggiungimento di dodici transazioni concorrenti a questa velocità di flusso corrisponde a una larghezza di banda astratta della BEI di 307,2 GB/s. Sulla base di questo punto di vista, molte pubblicazioni IBM descrivono la larghezza di banda EIB disponibile come “maggiore di 300 GB/s”. Questo numero riflette la larghezza di banda istantanea di picco EIB scalata dalla frequenza del processore.
Tuttavia, altre restrizioni tecniche sono coinvolte nel meccanismo di arbitraggio per i pacchetti accettati sul bus. Il gruppo IBM Systems Performance ha spiegato:
Ogni unità sull’EIB può inviare e ricevere simultaneamente 16 byte di dati ogni ciclo di bus. La massima larghezza di banda di dati dell’intera EIB è limitata dalla massima velocità con cui gli indirizzi sono snoopati tra tutte le unità del sistema, che è uno per ciclo di bus. Poiché ogni richiesta di indirizzo snooped può potenzialmente trasferire fino a 128 byte, la larghezza di banda teorica di dati di picco sulla EIB a 3,2 GHz è 128Bx1,6 GHz = 204,8 GB/s.
Questa citazione rappresenta apparentemente l’intera portata della divulgazione pubblica di IBM di questo meccanismo e del suo impatto. L’unità di arbitraggio EIB, il meccanismo di snooping, e la generazione di interrupt su errori di traduzione di segmento o di pagina non sono ben descritti nella documentazione ancora resa pubblica da IBM.
In pratica, l’effettiva larghezza di banda EIB può anche essere limitata dai partecipanti all’anello coinvolti. Mentre ognuno dei nove core di elaborazione può sostenere 25,6 GB/s in lettura e scrittura simultaneamente, il controller dell’interfaccia di memoria (MIC) è legato a una coppia di canali di memoria XDR che permettono un flusso massimo di 25,6 GB/s per letture e scritture combinate e i due controller IO sono documentati per supportare una velocità di picco combinata in ingresso di 25,6 GB/s e una velocità di picco combinata in uscita di 35 GB/s.
Per aggiungere ulteriore confusione, alcune vecchie pubblicazioni citano la larghezza di banda EIB assumendo un clock di sistema di 4 GHz. Questo quadro di riferimento risulta in una cifra di larghezza di banda EIB istantanea di 384 GB/s e una cifra di larghezza di banda limitata all’arbitrato di 256 GB/s.
Tutto sommato il numero teorico di 204,8 GB/s più spesso citato è il migliore da tenere a mente. Il gruppo IBM Systems Performance ha dimostrato che i flussi di dati SPU-centrici raggiungono 197 GB/s su un processore Cell che gira a 3,2 GHz, quindi questo numero è una giusta riflessione anche sulla pratica.
Controller di memoria e I/OModifica
Cell contiene una macro Rambus XIO a doppio canale che si interfaccia alla memoria Rambus XDR. Il controller dell’interfaccia di memoria (MIC) è separato dalla macro XIO ed è progettato da IBM. Il collegamento XIO-XDR funziona a 3,2 Gbit/s per pin. Due canali a 32 bit possono fornire un massimo teorico di 25,6 GB/s.
L’interfaccia I/O, anch’essa un progetto Rambus, è conosciuta come FlexIO. L’interfaccia FlexIO è organizzata in 12 corsie, ogni corsia è un percorso unidirezionale punto-punto largo 8 bit. Cinque percorsi punto-punto a 8 bit di larghezza sono corsie in entrata al Cell, mentre le rimanenti sette sono in uscita. Questo fornisce una larghezza di banda teorica di picco di 62,4 GB/s (36,4 GB/s in uscita, 26 GB/s in entrata) a 2,6 GHz. L’interfaccia FlexIO può essere sincronizzata indipendentemente, tipicamente a 3,2 GHz. 4 corsie in entrata + 4 corsie in uscita supportano la coerenza della memoria.