Giochi CPU bound: perché non è possibile raddoppiare il frame rate di tutti i giochi?

Una completa analisi tecnica sulle potenzialità delle moderne CPU e GPU per quanto riguarda risoluzione e framerate dei giochi.

Giochi CPU bound: perché non è possibile raddoppiare il frame rate di tutti i giochi?
Articolo a cura di

Quali sono le componenti hardware più importanti nella gestione e rendering di una scena tridimensionale in tempo reale? Semplificando drasticamente, possiamo rispondere che il lavoro viene diviso tra GPU e CPU. In realtà anche la memoria e la banda passante, cioè la quantità di dati e la velocità con cui questi vengono trasferiti tra le varie componenti del sistema, sono molto importanti, ma per amore di chiarezza lasceremo da parte questo aspetto, concentrandoci sull'accoppiata GPU + CPU di PlayStation 4 Pro e Project Scorpio.

Come viene diviso il carico di lavoro?

Ogni gioco fa storia a sé, ma attualmente nella gran parte dei titoli tripla A è la GPU a farsi carico di una cospicua dose del lavoro. La CPU viene relegata alla gestione di pochi (ma importanti) aspetti del gioco, ed è per questo che, sopratutto su console, nell'ottica di risparmiare il più possibile, si montano CPU non sempre molto performanti.
Proprio per questo sia gli addetti ai lavori che le grandi compagnie quali Sony e Microsoft, quando parlano di "potenza" dei sistemi di gioco, fanno riferimento esclusivamente alla capacità di calcolo della GPU.
Ad esempio tutti sanno che la PS4 PRO ha una potenza di 4.2Teraflops, e che Xbox Scorpio disporrà di una GPU da 6 Teraflops. Quasi nessuno cita i dati delle CPU, per evitare di mettere in risalto una chiara sproporzione in termini di potenza, conseguenza diretta di quanto appena detto: il calcolo di una scena 3D si poggia quasi esclusivamente sulla GPU.
Ma allora, cosa fa la CPU ed in che modo è così importante per il frame rate? La Scheda Grafica (GPU) crea l'immagine, si fa carico di gestire i poligoni, le texture, gli shader e gli effetti speciali. Ma i personaggi, le loro animazioni, la posizione ed il comportamento dei nemici o compagni di gioco gestiti dall'intelligenza artificiale; il numero di oggetti su schermo con cui è possibile interagire, ed in generale tutte le simulazioni fisiche (compresi a volte i sistemi particellari) sono tutte a carico del processore (CPU).Da quando sono state annunciate le nuove console "midgen" come Ps4 PRO o Xbox Scorpio, molti giocatori si sono lamentati che nonostante la "potenza" più che doppia, a parità di risoluzione, i giochi non abbiano goduto dell'agognato raddoppio del frame rate, il famoso passaggio da 30 a 60 frame per secondo. Si continua a parlare, quasi esclusivamente, di migliorie alla risoluzione ed altri aspetti quali antialiasing, shader ed ombre.
Questo succede perché, nonostante la PlayStation 4 Pro sia un discreto upgrade rispetto alla console originale, Sony ha migliorato soprattutto le prestazioni della GPU (più che raddoppiate, passando da 1.8 a 4.2 Tfops), mentre la CPU ha fatto un balzo di appena il 30%, grazie ad leggero aumento di Ghz, da 102.4 Gflops (PS4) a 134.4 Gflops (PS4 PRO).
Per quanto GPU e CPU siano due tipi di processore totalmente diversi per costruzione e scopi, è evidente la distanza in termini di potenza bruta tra una GPU da 4.2 Tflops, ovvero 4.200 Gflops, ed una CPU da 134 Gflops. Ed il collo di bottiglia, in pratica, sta tutto lì.

La demo dei 100 personaggi

Facciamo un esempio pratico: immaginiamo di aver programmato una demo, graficamente molto semplice, in cui ci sono 10 personaggi che vanno in giro per lo schermo, toccano i muri della stanza in cui si trovano e tornano indietro. L'intelligenza artificiale si limita a far sì che i personaggi cerchino di evitarsi quando si incontrano, mentre la fisica di gioco gestisce eventuali collisioni.
Vi abbiamo spiegato, nel paragrafo immediatamente precedente, che la GPU si occupa di gestire gli aspetti legati alla grafica, mentre sui calcoli della CPU gravano i comportamenti dei personaggi e la simulazione della fisica. Vediamo quindi come possono variare i carichi di lavoro al variare delle condizioni.

Ipotizziamo una situazione di base in cui la demo sia renderizzata a 1080p ed il tutto gira 60 fps. Immaginiamo che in questa condizione la nostra demo virtuale sfrutti la GPU al 2%, mentre la CPU sia al 10% di utilizzo. Decidiamo di alzare la risoluzione ai fatidici 4K, quadruplicando il numero di pixel da renderizzare. A questo punto l'uso della GPU sale all'8-10%, mentre la CPU resta sempre al 10% di utilizzo (tutto il carico di lavoro legato ad un miglioramento della grafica finisce insomma sulla scheda video). Il gioco continua a girare a 60 fps.
Decidiamo ora di aumentare i personaggi su schermo, e passiamo da 10 a 100 personaggi. La mole poligonale dei personaggi è generalmente molto inferiore rispetto a quella complessiva della scena, e per questo motivo il carico della GPU passa solo al 20% di utilizzo: ma la CPU, che invece deve decuplicare le operazioni, tocca già il 100% di utilizzo.
Il gioco gira ancora a 60 fps in 4k. E' il momento di aumentare ancora i personaggi sullo schermo e passare da 100 a 200. La GPU passa al 40% di utilizzo ma la CPU, che era già al 100% di utilizzo con 100 personaggi a schermo, non ce la fa. La soluzione sarà quella di dimezzare il frame rate (dimezzando di fatto i calcoli a carico della CPU in un secondo). Il gioco ora gira a 30 fps.
In questo scenario ipotetico la GPU, che era sfruttata al 40% con i 100 personaggi a schermo, avrebbe ancora potenza sufficiente per calcolare la scena a 60 fps, ma la CPU arranca: in questo caso si dice che il gioco è CPU Bound. Lo sviluppatore ha due strade: ridurre il frame rate a 30 fps, oppure ricorrere al così detto framerate upscale. In pratica, si continuano a calcolare i 60 frame per secondo, ma i personaggi sono aggiornati alla metà del frame rate (cioè 30 fps). Questa è una tecnica poco usata, ma che sta prendendo piede, soprattutto su console, per sopperire alla bassa potenza delle CPU montate sulle console. Ad esempio è possibile vederla in azione (facendo molto attenzione) su Halo 5. Il gioco gira generalmente a 60 fps ma si può notare, soprattutto per i personaggi in lontananza, che essi si muovono a volte a 30 fps, e quindi un po' a scatti rispetto al resto del gioco, in modo da ridurre il carico di calcoli sulla CPU e mantenere stabile il frame rate.

Da Ps4 a Ps4 PRO: raddoppio possibile, ma difficile

Sulla PS4 PRO i giochi a 1080p riescono ad avere leggere migliorie, come un frame rate più stabile ed una maggiore fluidità, ma non raggiungono quasi mai il raddoppio dei frame rate. Nella maggior parte dei casi i giochi per PS4 già sfruttano quasi tutta la potenza della CPU, è facile saturarne la capacità di calcolo.

Facciamo l'ipotesi di un gioco Ps4 che gira a 30 frame per secondo, ed in cui la CPU è già al 100% di utilizzo: per sostenere un raddoppio del frame rate (a parità di risoluzione e senza utilizzare tecniche di framerate upscaling, la PS4 PRO avrebbe dovuto avere una CPU capace di almeno 102.4 x 2 = 204.8 Gflops. Ma come abbiamo detto, dispone in realtà di soli 134.4 Gflops.
Un gioco PS4 che sfrutti solo marginalmente la CPU, utilizzando ad esempio il 60% della sua potenza (circa 60 Glops) potrebbe vedere il suo frame rate raddoppiare su Ps4 pro (60 Gflops x 2 = 120 Gflops, minori dei 134.4 della CPU di Ps4 PRO).

E su Xbox Scorpio?

Di Xbox Scorpio sappiamo che avrà una GPU molto potente, oltre 4 volte quella di Xbox One, ed è per questo che sarebbe certamente in grado di raddoppiare il framerate dei giochi Xbox One che girano attualmente a 30 FPS. Ma sarà davvero così? E' semplice: se la CPU di Scorpio sarà almeno il doppio più potente di quella di Xbox One (da 112 Gflops ad oltre 225 Gflops) allora sarà possibile in molti (se non tutti) i giochi ottenere il raddoppio da 30 a 60 fps.
Se invece l'aumento di potenza sarà limitato come quello avvenuto nel passaggio da Ps4 e Ps4 PRO, potremo aspettarci miglioramenti della stessa risma: un framerate più stabile e giochi globalmente più fluidi, sempre nel range dei frame rate originale.