[mks_dropcap size="90" bg_color="#ffffff" txt_color="#e64946"]X[/mks_dropcap]box One ha un’architettura complessa che gli sviluppatori stanno imparando a utilizzare nel migliore dei modi. Effettivamente la nuova console ha una concezione tipica di hardware chiusi, nasconde molti segreti e l’ottimizzazione sono punti cruciali per la creazione di giochi sempre migliori. Xbox One, sebbene derivi dalla tecnologia PC, soprattutto considerando l’architettura x86-x64, offre diverse customizzazioni a partire proprio dalla CPU, passando poi per il pool di memoria unificato supportato da uno scratch-pad (ESRAM) da 32MB, una GPU disegnata dagli ingegneri di Microsoft e AMD (e non solo…), il NoC, un chip audio proprietario e 50 micro controllers configurabili a piacere (comprensivi di 15 SPP).

PowerPoint Presentation

Ma la vera novità di Xbox One è nell’innovativo Sistema Operativo, completamente virtualizzato, capace di cambiare nel tempo e mostrare, all’occorrenza, nuovi stadi prima “bloccati”. Si parlava da mesi nella volontà di Microsoft di sbloccare risorse extra per gli sviluppatori ed è bastato un aggiornamento degli SDK affinché il 10% riservato al Kinect potesse essere sfruttato dalle software house, partizioni questa prima “invisibile”.

Se i risultati sono evidenti a tutti da una manciata di mesi, con giochi che finalmente mostrano una parità di prestazioni, abbiamo un sistema capace di evolvere nel futuro grazie a nuove implementazioni software. Anche PS4, dal canto suo, vanterà ottimizzazioni grazie a driver più performanti e nuove librerie grafiche, ma l’hardware è quello, non possiede nessuna configurazione possibile alternativa (come ad esempio la gestione della memoria, incentrata su un unico canale, fate riferimento al precedente Inside Xbox One per capire di cosa stiamo parlando) e tutto quello che c’era da scoprire è stato scoperto. Un sistema che punta sulla RAW Force e poco altro, diversamente da Xbox One che è invece un sistema camaleontico, in grado di riservare delle sorprese inattese e, come più volte sottolineato dagli architetti di Microsoft, evolversi con il progredire del tempo.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]La console è dinamica e può essere sfruttata come meglio si crede.[/mks_pullquote]

Ma come fa un sistema “chiuso” come una console a “cambiare”? Virtualizzazione del sistema, sblocco di risorse aggiuntive e, cosa molto più importante, riprogrammazione “on the fly” dei vari SPP presenti, in grado di cambiare la loro “posizione” con un semplice aggiornamento di sistema. Ecco quindi che i DMA possono contribuire alla gestione dei flussi di rete, prelevando codice dal NoC sfruttando il cloud o, all’occorrenza, essere sfruttati per i pacchetti provenienti dalla memoria. Anche i 4 DSP del blocco audio possono, in alternativa, essere sfruttati per altri compiti che non siano la gestione del sonoro. Insomma, una tecnologia inedita capace di adattarsi alle esigenze degli sviluppatori.

Prendiamo anche la ESRAM, che può essere utilizzata per mantenere nella memoria alcuni target rendering (luce dinamica, ombre, vari effetti video ecc.) ad accesso rapido o, con l’arrivo delle DirectX12, essere sfruttata per le Tiled Resource, native via hardware su Xbox One, in grado di mantenere ben 6 GB di texture ad altissima risoluzione senza gravare sulla GPU o la banda di sistema.

Come potete vedere la console è dinamica e può essere sfruttata come meglio si crede. In aggiunta l’ostica console di Microsoft possiede – e ritorniamo al discorso dei micro controllers – dei chip riprogrammabili che vengono utilizzati per l’Intelligenza Artificiale, la codifica e la decodifica di determinati dati, anti aliasing e molto altro ancora.

Pensate che fino ad oggi pochissimi giochi hanno sfruttato, e nemmeno tutto, l’hardware della One. Ryse: Son of Rome è bellissimo e sfrutta a dovere la ESRAM di sistema, senza aver beneficiato della RAW Power al 100% della GPU “castrata” fino a poco tempo fa a 1.2 TFLOPS, contro gli 1.31 TFLOPS di adesso.

TFLOPS che con le DX12 cresceranno grazie al multithreading attivo della CPU e una miglior comunicazione con la GPU, il dual lane adibito ai soli processi grafici, un utilizzo migliore di memoria ed SPP e, come già sostenuto, le Tiled Resource, punto forte di One.

DirectX12_16

CAPITOLO 7: Alla scoperta delle Tiled Resource e differenza con le MegaTexture (o PRT)

Ma cosa sono esattamente queste Tiled Resource? Innanzi tutto dobbiamo fare una importantissima precisazione, ossia che le TR non sono come le Megatexture o le PRT dato che l’intero processo computazionale è gestito via hardware e non via software. Inoltre la qualità delle TR è ben più elevata rispetto alle PRT.

Le Tiled Resource sono una tecnologia incorporata nelle Direct3D e che servono a rendere maggiormente flessibile l'utilizzo della memoria nelle situazioni complesse (in gergo “large amount of data”). Queste sono già integrate nelle DX 11.2 (che possiede Xbox One) ma non sono state mai sfruttate a dovere a causa anche della mancanza di multi threading, assente in questa versione delle API ma che sarà presente nelle prossime DX 12.

slide-38-638

Prima dell'introduzione di questa interessante tecnologia era necessario che quasi tutte le texture che ricoprivano le varie superfici dovessero essere già caricate nella memoria di sistema, la DRAM. Le Tiled Resources invece sono risorse di memoria le cui pagine (dette tiles) costituenti possono essere opzionalmente popolate con relativa memoria fisica. Microsoft, con le Tiled Resource, ha optato per realizzare un’interfaccia di tipo hardware per l'utilizzo delle risorse in questo modo concepite che non ha precedenti in questa forma particolare, tanto che tutte le precedenti implementazioni venivano effettuate via software con svantaggi che vi mostreremo più avanti.

Dovete sapere che generalmente l'implementazione delle TR viene gestita tramite l'algoritmo View Dependent Streaming Texture Detail (VDSTD), quindi ponendo che una determinata superficie sia strutturata con una tot serie di texture e con un determinato peso con mipmap, solamente la frazione di texture che sono nella prossimitá immediata della “current view” viene compilate, gli elementi ai bordi del frame invece vengono smussati cercando in questo modo di non rivelare il trucco; naturalmente le texture che ricopriranno queste superfici saranno a bassissimo livello di dettaglio, ma non direttamente percepibile dall'occhio umano. 

Ecco un esempio di Tiled Resource disattivate e attivate:

Tiled Resource Off

Snap_2013_08_11_at_00_53_43

Tiled Resource On

Snap_2013_08_11_at_00_53_57

Un grande vantaggio di tale tecnica è che le texture vengono “prefiltrate”, come spiegato poco sopra, mentre con le implementazioni software precedenti questo lavoro spettava allo sviluppatore.

Ora DirectX 11.2 ed OpenGL 4.4 offrono il supporto alle Tiled Resource, tecnologia che esiste per affrontare la problematica dell'utilizzo di una MegaTexture da applicare nello sviluppo di un engine grafico. Una delle prime software house ad utilizzare le MegaTexture fu id Software, grazie al lavoro del guru John Carmack, che aveva già precorso i tempi sviluppando una tecnologia software incorporata nel motore ID Tech 5 (utilizzato nello sparatutto RAGE). La base dell'algoritmo è sempre lo stesso, ossia il View Dependent Streaming Texture Detail, ma il modo con il quale Id Software ha ottenuto questo risultato è unicamente via software.

I vantaggi dell'implementazione via hardware sono i seguenti:

  • Eliminazione delle letture nei casi di strutture dipendenti
  • Filtraggio hardware attivo compreso il filtro anisotropico e non solo

Nella situazione precedente all'impiego delle Megatexture, i modi per ottenere un alto livello di dettaglio erano o lo streaming continuo da asset fisici prefissati oppure attraverso la generazione procedurale delle stesse texture che però implica la problematica della lettura necessaria da struttura (texture di controllo) ma ha come vantaggio che non richiede molta banda passante dalla memoria per lo streaming.

Dopo questa lunga introduzione alla Tiled Resource e la loro differenziazione dalle MegaTexture (o PRT che a dir si voglia) possiamo analizzare meglio Xbox One e PS4 per capire come sono strutturati i determinati chipset per sfruttare queste tecnologie.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]Xbox One nasce con in mente questa tecnologia[/mks_pullquote]

Xbox One nasce con in mente questa tecnologia, lo dimostra la presenza di componentistica dedicata altrimenti inutile o controproducente come appunto la ESRAM, i Data Move Engines e le memorie di sistema tipo DDR3 (ottime per la bassa latenza nella gestione di pacchetti di piccole dimensioni e per non avere colli di bottiglia verso la CPU, un po’ meno performanti invece nella gestione di grossi chunk).

Infatti, viste le problematiche sopracitate, possiamo affermare con certa convinzione che dovendo effettuate continuamente operazioni di tile-untile per aggiornare la “current view” in base al VDSDT, serviva una bassa latenza nell'accesso alla memoria dato il grande numero di accessi simultanei ed un buffer (nel caso di Xbox One costituito dalla ESRAM) superveloce che potesse salvare i dati relativi al preciso frame per la “current view” fungendo quindi da tampone e/o sincronizzatore dell'intero sistema di interfaccia alla memoria.

Snap_2013_08_11_at_00_22_37

I quattro Data Move Engines posseggono via hardware proprio le funzioni fisse di tile ed untile, scaricando quindi il resto delle componenti di questo compito ed evitando soprattutto allo sviluppatore di dovere scrivere un algoritmo del genere.

Da questo ne deriva la scelta delle memorie di tipo DDR3 che hanno minore latenza delle GGDR5 e quindi sono più adatte agli accessi multipli. Quindi, sembrerebbe che Xbox One sia l'incarnazione hardware della nuova versione di Direct3D (ossia le prossime Direct3D 12, viste da tutti come un salto generazionale delle API di ben quattro volte rispetto alle precedenti DX 9, 10 e 11).

Snap_2013_08_11_at_00_25_20

La console è dunque completamente pensata con in mente le Tiled Resource ed è customizzata per trarre il massimo beneficio da esse, grazie ai tantissimi acceleratori presenti nell’hardware.

La PlayStation 4 nasce invece con in mente il requisito opposto, ovvero una memoria velocissima completamente unificata di tipo GDDR5 senza nessuna ED/ESRAM (un framebuffer collegato direttamente alla GPU che consentirebbe di stoccare anche interamente gli asset di un livello o parte di esso in memoria e di consumarli senza particolari accortezze) data la velocità di questo tipo di memorie. Da notare poi come Xbox One abbia 4 controller separati per la memoria di sistema, disposta da 4 blocchi da 2 GB (per un totale di 8 GB di DDR3) mentre PS4 utilizza un unico canale per la memoria, composta da un blocco da 8 GB.

[mks_pullquote align="right" width="300" size="24" bg_color="#ffffff" txt_color="#e64946"]PS4 può gestire le Tiled Resource?[/mks_pullquote]

Playstation 4 non è pensata per effettuare accessi multipli e repentini alla sua memoria RAM, vista l'alta latenza delle GDDR perché questo causerebbe diversi errori e perdite di dati (bubble). Se Sony avesse voluto una macchina del genere avrebbe dovuto quantomeno montare una EDRAM, cosa che inizialmente era stata anche presa in esame, come dichiarato da Mark Cerny.

La domanda vien da sé: PS4 può gestire le Tiled Resource?

La risposta è sì, non scordiamoci infatti della tecnologia Partial Resident Textures, giá da tempo integrata nelle GPU di AMD, grazie anche alla compatibilità dello standard OpenGL con questa tecnologia, quindi una gestione via software è possibile.

Il problema è però un altro, ovvero che la macchina non integra acceleratori hardware per questa tecnologia, o quantomeno solo in parte (appunto, PRT), con tutto il ricasco in caso di utilizzo su compiti computazionali aggiuntivi che farebbe perdere tempo e potenza.

[youtube]https://www.youtube.com/watch?v=fltM-FK0-Vg [/youtube]

In altre parole con un utilizzo massiccio delle Tiled Resource su PS4 lo sviluppatore dovrebbe gestire molti più processi, processi che su Xbox One sono invece implementati già nel sistema grazie all’hardware dedicato. É vero che OpenGL gestisce queste risorse ma non lo effettua nello stesso modo nel quale viene fatto con Xbox One, proprio perché le GL non sono disegnate per utilizzare ESRAM o Data Move Engines; queste sono prerogative esclusive di Xbox One che Microsoft ha fortemente voluto al suo interno dedicandoci svariati studi e ricerca. Diciamo che Xbox One rappresenta ad oggi forse la miglior implementazione hardware di questa interessante tecnologia.

[youtube]https://www.youtube.com/watch?v=QB0VKmk5bmI [/youtube]

Ancora una volta possiamo ribadire il concetto che da un punto di vista hardware in termini di RAW Power la PS4 è senz’altro su un gradino superiore, ha una framebuffer più diretto e molto più veloce, di contro paga una certa latenza per accedervi e non dispone di particolari accuratezze hardware per ovviare a questa carenza. Inoltre l’utilizzo massivo delle Tiled Resource su Xbox One consentirebbe di liberare ulteriormente compiti computazionali che potrebbero essere dedicati ad altri fattori.

X-Rays tornerà, in via del tutto eccezionale, nel prossimo fine settimana.