Le origini dei colli di bottiglia
Prima di entrare nel vivo dell'analisi dei dati diamo un altro sguardo alla stringa di comandi fissi sotto DirectX 11 e predecessori. Il grafico mostra che il carico su ogni core non è nemmeno vicino alla parità, ed è necessario un sacco di tempo affinché vediate il risultato finale, che nel log è chiamato Present Time. È interessante vedere anche la grande quantità di tempo spesa dal driver e dalla CPU.
Lo stesso scenario appare molto diverso con le DirectX 12. Il carico su ogni core è distribuito in modo più uniforme, portando a più operazioni completate in parallelo. Il tempo speso dal driver è ora diffuso su tutti i thread. Non è che il processo richieda meno tempo di calcolo al processore, ma il tempo per raggiungere il Present Time è tagliato nettamente perché parti del processo sono svolte in parallelo.
Batch (Comandi GPU)
Abbiamo iniziato confrontando il numero di comandi GPU (batch) per frame renderizzato. Emerge che questo rapporto oggi non è del tutto differente per diverse CPU o persino differenti produttori.



Tempo CPU
L'analisi sopra è solo un punto di partenza. Dobbiamo esaminare come il carico della CPU è distribuito analizzando la percentuale di tempo in cui la CPU è in uso. Anche facendo un buon uso della parallelizzazione questo misura è ancora un'immagine speculare delle prestazioni di gioco. Le schede video veloci producono più frame nello stesso periodo di tempo rispetto a quelle più lente, e questo significa che anche la CPU deve completare più operazioni nello stesso periodo di tempo.



Collo di bottiglia CPU
Quindi, qual è il punto in cui la CPU diventa un collo di bottiglia? Quando troppi pochi core lavorano sulle operazioni per far sì che siano svolte in tempo a causa dell'assenza di parallelizzazione, o se non c'è sufficiente potenza di calcolo disponibile tra tutti i core che lavorano in parallelo. In quest'ultimo scenario, fondamentalmente, la CPU non è sufficientemente veloce per tenere il passo della GPU, anche quando lavora al massimo della capacità.
Ci sono altri potenziali colli di bottiglia legati alla CPU. Per esempio quando un sacco di dati sono gestiti in parallelo e poi devono essere passati avanti e indietro tra gli altri sottosistemi, qualche altra interfaccia potrebbe rallentarvi.



Più la GPU è occupata, più facile è per la CPU fare il proprio lavoro. Questo effetto è facile da vedere quando si confrontano le differenti risoluzioni. La Radeon R9 Fury X di AMD sfrutta questo trend molto bene. È una scheda video veloce ma non mette sotto torchio la CPU come altre soluzioni nel suo segmento. Chiaramente, la parallelizzazione migliora marcatamente tra le architetture Hawaii e Fiji.
Tempo legato ai driver
Abbiamo visto che un sacco di tempo di rendering del frame è consumato dal driver. AMD perde un sacco di tempo in più in questo modo rispetto a Nvidia. Questo fenomeno potrebbe essere attribuito all'overhead del drive, ma nuovamente, far girare più operazioni asincrone crea del lavoro aggiuntivo.



Present Time
Il Present Time è il tempo richiesto per mostrare effettivamente il frame a chi osserva. Di conseguenza è l'ultimo passo. Il tempo complessivo varia leggermente a seconda della risoluzione. Questo è dovuto all'influenza della risoluzione sui colli di bottiglia della CPU che abbiamo discusso prima, e il carico aggiuntivo della GPU con risoluzioni maggiori. Se la GPU è il collo di bottiglia, il Present Time è davvero breve, dato che la CPU ha già avuto un sacco di tempo per terminare i suoi calcoli.



Tempo di rendering, conclusione
AMD è la vincitrice con le schede video attuali. La vera parallelizzazione e l'esecuzione asincrona di operazioni sono migliori rispetto alla suddivisione delle operazioni tramite una soluzione basata sul software. Non è totalmente chiara la differenza in scenari di gioco reali, ma è certamente una tecnologia che potrebbe avere un uso maggiore in futuro.