[mks_dropcap size="90" bg_color="#ffffff" txt_color="#e64946"]P[/mks_dropcap]roseguiamo il nostro viaggio alla scoperta dell’hardware di Xbox One. Nel primo numero siamo partiti analizzando il processore principale della console, una CPU altamente customizzata che deriva dalla famiglia Jaguar di AMD. In questo secondo capitolo faremo un viaggio all’interno della memoria di Xbox One, del suo utilizzo, di tutti i segreti nascosti dietro alla ESRAM da 32 MB. Innanzitutto va subito precisato che questa memoria “aggiuntiva” è collegata direttamente al processore grafico (GPU) e non può essere “vista” dalla CPU. Questo perché gli sviluppatori possono decidere come e quanto utilizzare la ESRAM unicamente prendendo asset grafici, il tutto coadiuvato poi dalla memoria di sistema (le DDR3, per 8 GB totali).

Un passo importante che determina come la ESRAM possa essere utilizzata solamente per il rendering e non per compiti adibiti invece alla CPU. Ora ci addentreremo in aspetti più tecnici.

Capitolo 2: DDR3 e loro struttura

Microsoft ha deciso di implementare nell’hardware di Xbox One un pool unificato di 8 GB DDR3-2133 a 256 bit, suddivisi in 4 banchi da 2GB ciascuno (operanti a 64 bit), con la banda massima fissata a 68,3 GB al secondo. Di questi 8 GB ben 5 sono lasciati per i giochi, mentre i rimanenti 3 sono associati al Sistema Operativo (ricordiamo, un sistema completamente virtualizzato basato su 3 sub-OS), da suddividere in questo modo...

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]Ma si tratta pur sempre di RAM di tipo DDR3, comunemente utilizzata nei PC. Perché questa scelta?[/mks_pullquote]

Uno viene utilizzato dal SO che si occupa dei giochi, uno per il SO che opera il multitasking e le app e uno, tipo hypervisor (un non-Hyper-V nello specifico), che fa da “collante” tra i due. Tutto virtualizzato quindi. Ma si tratta pur sempre di RAM di tipo DDR3, comunemente utilizzata nei PC. Perché questa scelta? Perché non puntare sulla GDDR5 come ha fatto Sony per la sua PS4?

Principalmente per due fattori. La GGDR5 è una memoria ad alta latenza (e scalda anche un bel po’…), ottima per grossi chunk di dati ma che tende a diventare un problema per la gestione di piccoli pacchetti. La CPU non va molto d’accordo con le GDDR5 ed è per questo motivo che nei PC non vengono montate come memoria di sistema: si chiamano appunto GDDR, ossia Graphic DDR. Microsoft ha puntato molto sulla stabilità di sistema, sulla bassa latenza, massimizzando ogni ciclo di clock di RAM e CPU ed evitando i fail-over (perdita di dati o dati elaborati erroneamente e ricalcolati nuovamente): un problema questo, che si presenta frequentemente in Xbox 360, console poco equilibrata da questo punto di vista.

Xbox-One-635x353

Il Pool di memoria principale può essere utilizzato da CPU e GPU senza limitazioni sfruttando il bus di sistema operante a 30 GB al secondo (contro i 20 di PS4). Ovviamente sotto il profilo della velocità le DDR3 impattano negativamente per le prestazioni grafiche, che non possono reggere il confronto con le GDDR5 di PS4. E qui entra in gioco proprio la ESRAM, affiancata alle DDR3 e integrata nella GPU. Questo, effettivamente, serve per avere un boost delle prestazioni sotto il profilo grafico e ottenere risultati anche maggiori rispetto alla GDDR5.

Capitolo 3: La ESRAM e il suo funzionamento

Per capire l’importanza della ESRAM è doveroso riportare un pezzo dell’intervista del DF agli architetti di Xbox One, in modo tale anche da capirne la sua funzione di base:

“Pensiamo di avere realizzato una console molto equilibrata, capace di ottime prestazioni, in particolare in grado di gestire cose diverse dal mettere in fila tante ALU (unità aritmetiche e logiche). Ci sono anche un certo numero d'aspetti di progettazione e requisiti di sistema di cui abbiamo tenuto conto come latenza, frame-rate e che i giochi non siano interrotti dal lavoro del sistema operativo e altri elementi che hanno avuto una certa priorità nella stesura delle linee guida del nostro design”.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]“Ci serviva un alto livello di coerenza di memoria tra la GPU e la CPU e questo ci ha obbligato a modificare la concezione di molti dispositivi"[/mks_pullquote]

“Ci serviva un alto livello di coerenza di memoria tra la GPU e la CPU e questo ci ha obbligato a modificare la concezione di molti dispositivi che si trovano intorno al processore centrale e a come la CPU gestiva la virtualizzazione”. “Sul SoC ci sono molti motori paralleli: alcuni sono core CPU e core DSP core: al calcolo di quindici siamo arrivati in questo modo: otto dentro la componente audio, quattro move engine, due per la codifica/decodifica video e uno deputato ad effettuare la composizione/dimensionamento video”.

“Per ottenere la migliore combinazione tra prestazioni, capacità di memoria ed efficienza, la GDDR5 può creare dei problemi. L'ESRAM invece costa molto poco sotto il profilo del consumo energetico e ha l'opportunità di dare al sistema una larghezza di banda molto elevata. È possibile ridurre la larghezza di banda sulla memoria esterna risparmiando un sacco di corrente e sul costo della materia prima. Nelle scelte progettuali dell'Xbox One la combinazione tra un'alta capacità di memoria, un consumo energetico basso e tanta banda passante era un elemento chiave e per ottenerlo non c'erano molti di modi di farlo se non tramite l'uso della ESRAM”.

1200x-1 (2)

“L'ESRAM dispone di quattro controller di memoria ciascuno da 256-bit per un totale di 1024 bit in entrambe le direzioni. 1024 bit in scrittura danno un massimo di 109GB/s che sommati allo stesso valore simultaneo in lettura arriva a un identico picco di 109GB/s. Ma, come abbiamo detto, usando applicazioni reali questo valore va combinato attestandosi circa a 140-150GB/s e non è l'unico elemento da tenere in considerazione ovvero il limite di banda della memoria esterna, la DDR 3.

Quanto può corrispondere infatti la potenza della banda passante della memoria esterna se si effettua lo stesso genere di calcolo? Con la DDR3 si prende il numero di bit dell'interfaccia, si moltiplica per la velocità e si ottiene il valore di 68GB/s: aggiungendola al valore di 140-150GB/s ottenuto calcolando la banda teorica messa a disposizione dall'ESRAM si arriva a 218GB/s. Tuttavia è difficile riuscire a mantenere valori simili con un'interfaccia di memoria esterna per lunghi periodi di tempo e quindi ci si attesta a circa un 70-80% dell'efficienza possibile che porta la banda passante della DDR3 a circa 50-55GB/s”.

xbox_sram_cache1 (1)

Ma quali sono quindi i reali vantaggi della ESRAM associata a GPU e memoria principale di sistema? Grazie a questa particolare architettura gli sviluppatori godono di massima libertà e possono operare adottando diverse configurazioni (non solo una come su PS4). Come detto poco fa l’accesso della GPU alla ESRAM può essere utilizzata in una moltitudine di casi, dato che offre una banda passante di output velocissima: soprattutto quando si hanno contenuti di grosse dimensioni, come ad esempio 5GB di dati che potrebbero essere indirizzati per un rendering qualsiasi; ogni elemento che passa alla ESRAM, che ha una larghezza di banda dell'ordine di 2-10 volte più veloce della DDR3, è un grosso vantaggio per l’intero sistema.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]Prendiamo ad esempio un gioco di corse dove l’oggetto meno dinamico è il cielo: questo elemento può risiedere senza troppi problemi nella DDR3 di Xbox One[/mks_pullquote]

In questo modo si utilizza la ESRAM, non vengono cioè inseriti all’interno di essa gli elementi più sensibili e che richiedono un continuo accesso alla lettura dei dati presenti, come le “shadow map”, e sono lasciati gli oggetti che fanno un minor utilizzo delle risorse all’interno della memoria di sistema. Prendiamo ad esempio un gioco di corse dove l’oggetto meno dinamico è il cielo: questo elemento può risiedere senza troppi problemi nella DDR3 di Xbox One, con la ESRAM invece utilizzata per elementi dinamici come la visualizzazione delle vetture su pista. Questo funziona praticamente per qualsiasi risorsa D3D, dal buffer alle texture di ogni tipo dato che, in questo caso, non c'è accesso diretto alla CPU, perché la CPU non può vedere il contenuto della ESRAM, ma bisogna passare sempre attraverso la GPU per arrivare ad essa, una imposizione voluta da Microsoft questa.

Come sfruttare quindi a dovere la ESRAM e la RAM di sistema? Semplice, conoscere quali target vanno diretti alla ESRAM e quali alla memoria principale, passando sempre su quest’ultima poiché la copia sulla DDR3 è veramente veloce, e non necessita di un ulteriore passaggio sulla CPU o sulla GPU dato che, per questi compiti, sono già adibiti i 4 Data Move Engines. Questo è il metodo più facile e veloce per avere un output a 1080p, e questo è il procedimento per raggiungere i 60 fotogrammi al secondo. Tutto questo però solo se si utilizzano nuovi engine e non vecchi tool.

XboxOne4-670x334 (1)

Questo è un enorme vantaggio a patto di sfruttare anche i 4 (iirc) DME, senza utilizzare banda e cicli di CPU o GPU, combinando quindi l’altissima banda passante di ESRAM e DDR3. Se ci pensate PS4 possiede solo due canali diretti verso la memoria GDDR5 (CPU e GPU) che può scrivere simultaneamente ma entrambi devono essere prima messi in cache. Ed è l’unica soluzione possibile sulla PS4 mentre Xbox One ha molte più opzioni (CPU, GPU DD3 a DD3, GPU a ESRAM, Move Engine a ESRAM, Move Engine a DDR3) con la possibilità che in alcuni passaggi si può considerare la lettura / scrittura / copia/ simultanea.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]Bisogna utilizzare nuovi engine pensati per i vari passaggi, altrimenti la ESRAM o diventa un collo di bottiglia[/mks_pullquote]

Ribadiamo però che per trarre il massimo beneficio dalle configurazioni possibili su Xbox One bisogna utilizzare nuovi engine pensati per i vari passaggi, altrimenti la ESRAM o diventa un collo di bottiglia o non viene sfruttata a dovere. Di converso PS4 beneficia del veloce pool di GDDR5 che può già sfruttare l’intera banda passante, ma ciò significa anche che c’è meno spazio per l’ottimizzazione.

Il risultato è quindi un beneficio immediato per la PS4, e un piccolo handicap su Xbox One, allo stato attuale. Aspettatevi grandi guadagni nei nuovi motori 3D e prestazioni al di sotto delle aspettative in vecchi engine che non utilizzano il concetto di lettura / scrittura / spostamento della console di Microsoft, nello specifico RAM di sistema più ESRAM più Data Move Engine.

Più o meno è lo scenario attuale di diversi titoli multiformato che girano meglio su PS4 che su Xbox One, ma quando abbiamo nuovi tool come il CryEngine o proprietari come quello di Turn10, ecco che titoli come Ryse: Son of Rome e Forza Motorsport 5 diventano il fiore all’occhiello della console.

2sfIPie (1)

E non dimentichiamoci delle ottimizzazioni che porteranno le DirectX 12, con un incremento delle prestazioni della console anche del 30%, come confermato da più parti (chiamatela ottimizzazione, chiamatela maggior uso intensivo dell’hardware, chiamatelo boost, chiamatela fonte segreta…), fatto sta che Xbox One non è mai stata una console da 1,3 TFLOPS di potenza ed è una hardware pensato per il futuro, che farà da apripista a molteplici soluzioni hardware dei principali produttori hardware: l’unico grosso errore di Microsoft è stato quello di aver lanciato la console troppo presto, con un chipset difficile da comprendere, mancanza di SDK completi e supportata da engine vecchi di anni.

L’importanza della ESRAM viene anche indicata da Wolfgang Engel, fondatore della Confetti FX, importantissima software house specializzata nella creazione di potenti tool utilizzati dalle più rinomate case. Per Engel sarà proprio lo sfruttamento ad hoc della ESRAM a decretare il vantaggio di Xbox Onesulla concorrenza, anche perché, ricordiamolo, questo piccolo pool di memoria sarà sfruttato al massimo solamente tramite l’utilizzo delle tiled resource che consentirà di “salvare” 6 GB di Ram all’interno proprio di 32 MB della ESRAM. Engel ha dichiarato infatti: "L’ESRAM è una memoria molto veloce. In generale la sfida più grande che gli sviluppatori stanno affrontando sono proprio nei modelli di accesso della memoria, così, mentre abbiamo un sacco di potenza di calcolo, il costo di accesso alla memoria sta aumentando notevolmente negli ultimi dieci anni, rispetto al costo delle istruzioni aritmetiche.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]"Per esempio, con uno shader è possibile accedere alla cache di memoria (o nel gruppo di thread della memoria condivisa) in modo da poter rielaborare l'algoritmo"[/mks_pullquote]

"Finché siete nei “registri” non hai problemi ma non appena hai bisogno di accedere alla memoria, diventa più lento. La sfida è di accedere alla memoria in maniera più efficiente. Perciò i modelli di accesso alla memoria sono le strategie di ottimizzazione più importanti. Quindi non si tratta di cicli di conteggio, ma si tratta di pensare come possiamo sfruttare e ottimizzare un algoritmo in modo che possiamo accedere alla memoria nel modo più efficiente. La ESRAM è proprio parte di questo.

"Per esempio, con uno shader è possibile accedere alla cache di memoria (o nel gruppo di thread della memoria condivisa) in modo da poter rielaborare l'algoritmo cosicché utilizzi questa memoria a livello superiore, con un enorme e sostanziali incremento di velocità. Con la Xbox One, l'introduzione di eSRAM propone un'idea simile.

"La chiamate più pesanti e importanti possono essere salvate nella ESRAM. Quando non hai bisogno di banda di memoria velocissima, si utilizza la memoria di sistema regolare. È necessario però pianificare in anticipo, devi pensare che intenzione hai di utilizzare la memoria, nel modo più ottimale. Così la ESRAM ti offre un vantaggio a patto che pianifichi tutto dall’inizio. Per uno dei nostri giochi che stiamo realizzando, abbiamo utilizzato la ESRAM creando un foglio in excel, che mostra come ci accingiamo a utilizzare la ESRAM attraverso gli stadi della pipeline di rendering. Questo ci ha aiutato a utilizzare i miglioramenti di velocità che offre la ESRAM senza impattare sull’intero sistema e sfruttando al massimo ogni singola risorsa".

Alle parole di Engel fa da eco anche Crytek, che ha impartito una lezione piuttosto interessante a tutti gli sviluppatori che intendano sfruttare nel migliore dei modi questo vantaggio di Xbox One. Tutto un discorso legato alla ottimizzazione e alla pianificazione, proprio perché l’hardware della nuova console di Microsoft è una potente “bestia” da saper domare. Xbox One fa della ottimizzazione e del bilanciamento il suo cavallo di battaglia, ma se utilizzata in maniera non consona, puntando cioè unicamente alla RAW Power, allora in questo modo escono fuori i limiti della console, limiti non hardware bensì di utilizzo corretto del software.

Ecco lo scenario tra Xbox One e PS4 per quanto concerne le differenze sulle memorie adottate (Xbox One a sinistra, PS4 a destra):

366fGpf