Hot topics:
News su Black Friday 2017
17 minuti

PresentMon per testare le GPU in DirectX 12, OpenGL e Vulkan

Abbiamo iniziato a usare PresentMon al posto di Fraps. Questo software, di non facile utilizzo, ci permette di dissezionare le prestazioni delle schede video con i titoli DirectX 12, OpenGL e Vulkan.

PresentMon per testare le GPU in DirectX 12, OpenGL e Vulkan

PresentMon e il nostro software proprietario

NOTA: I test che saranno svolti dai nostri laboratori in Germania e USA useranno PresentMon, mentre per alcune recensioni del laboratorio italiano gli strumenti potranno cambiare. Date sempre un'occhiata alla scheda dei benchmark per sapere precisamente gli strumenti adottati.

L'introduzione delle DirectX 12, della Microsoft Universal Windows Platform e di Vulkan - API nate sulla base di AMD Mantle - ci ha messo di fronte ad un problema: non avevamo più uno strumento affidabile per misurare le prestazioni. Fraps funziona solo con le DirectX 11 e non è così affidabile come pensano alcuni appassionati.

Di conseguenza, il tempismo con cui è arrivato PresentMon, realizzato da Andrew Luritzen e liberamente disponibile su GitHub, è risultato perfetto. Questo software

controlla i comandi presenti nell'insieme degli eventi tracciati da Windows e registra un certo numero d'informazioni su di essi all'interno di in un file CSV per consentirne l'analisi.

PresentMon, però, soggiace alle sue stesse limitazioni tecniche perché opera nello stesso punto della pipeline grafica in cui funziona Fraps. Di conseguenza non può rimpiazzare completamente strumenti come FCAT all'interno della nostra suite. Ciò che rende così interessante PresentMon è la sua compatibilità non solo con le DirectX 11 ma anche con DX12, OpenGL e Vulkan.

00 PresentMon64
Clicca per ingrandire

Il suo handicap maggiore è l'interfaccia a riga di comando, perché può volerci molto tempo per trovare la giusta combinazione di impostazioni necessarie per generare l'informazione di cui si ha bisogno. Di default non è impostato per restituirvi il dato di cui avete bisogno, ed è di questo problema che ci occupiamo in questo articolo.

L'interfaccia grafica (GUI) di PresentMon

Abbiamo deciso di sviluppare un software che fosse in grado di avviare PresentMon, impostarne i parametri e raccogliere i dati dei sensori contemporaneamente alla registrazione delle prestazioni.

01 PresentMon GUI
Clicca per ingrandire

Nell'immagine sopra è presente una lista di giochi usati frequentemente per i benchmark, ognuno con il suo profilo memorizzato. PresentMon applica a ognuno i parametri che abbiamo preimpostato quindi, ad esempio, un test può durare per tre minuti e poi fermarsi, mentre un altro viene avviato e interrotto usando un apposito tasto (hotkey).

Semplificare la raccolta dei dati

PresentMon non è impostato per raccogliere i dati dai vari sensori mentre registra le informazioni prestazionali. Questa possibilità è invece offerta da AIDA64, software realizzato da FinalWire. Ci affidiamo alla versione Engineer di AIDA64 per ottenere i dati di un certo numero di processi host e statistiche di carattere grafico. Volete correlare l'uso della GPU con il frame rate a un certo punto del test? Si può. La latenza e l'overhead sono mantenuti ad un livello minimo perché l'approccio di AIDA64 è diverso da quello di strumenti come HWiNFO che usano delle DLL per la loro interfaccia.

Per minimizzare l'impatto che deriverebbe dalla scrittura dei dati su disco, lasciamo questo secondo log (tutto sommato molto contenuto) sulla RAM fino a quando non viene chiuso il file log di PresentMon. Siccome quest'ultimo non usa un controllo temporale - una sfortuna - ordiniamo il tutto mettendo per prima la nostra registrazione, poi il log di PresentMon, e tra loro (in parallelo) il tempo tracciato. Questo è necessario anche per confrontare misurazioni esterne come quelle del nostro oscilloscopio.

Analizzare i dati e presentarli al meglio

Tutte le nostre rilevazioni relative ad ogni benchmark coinvolgono un'enorme mole di dati che necessita di essere ordinata. Per aiutarci in questo compito usiamo un altro programma sviluppato da noi che combina i due file di log e si occupa di tutti i calcoli necessari per realizzare i grafici. Non sarebbe possibile fare tutto ciò in Excel per via della complessità e del numero di passaggi necessari.

02 Interpreter
Clicca per ingrandire

Grazie al nostro interpreter del file di log, giunto alla terza versione, possiamo calcolare velocemente quello che ci interessa e anche aggiungere nuovi grafici se necessario. Analizzeremo più approfonditamente quali aspetti prendiamo in considerazione tramite il test di due schede video con un gioco in DX12.

Il nostro scopo è fare chiarezza sulle informazioni che generiamo. Senza un'approfondita comprensione di ciò che dicono i grafici è possibile arrivare a conclusioni sbagliate. In recensioni future ci vedrete fare riferimento a questo articolo per essere sicuri che i nostri processi e le nostre procedure siano chiare.

01 FPS Bar Charts
Clicca per ingrandire

Il grafico a barre qui sopra mostra gli FPS minimi, massimi e medi che sono sì importanti ma non ci dicono assolutamente nulla della fluidità percepita durante un'esperienza di gioco e neppure ci danno informazioni puntuali e precise sulla costanza con i frame sono renderizzati. Per avere queste informazioni abbiamo necessità di più dati.

Due schede, due sistemi e un benchmark

Questa prova non è fatta per confrontare fra loro la MSI GTX1060 Gaming X 6 GB e e la RX480 Gaming X 8 GB. Invece, useremo i risultati di entrambe le schede video per spiegare come svolgiamo le misurazioni e come le valutiamo.

03 Intro

Usare un solo benchmark semplifica l'analisi, quindi ci siamo concentrati su Hitman testandolo con entrambe le schede video, usando tanto le DX11 quanto le DX12, su due diversi sistemi.

  Enthusiast System Mainstream PC
CPU Intel Core i7-6950X @ 4.2 GHz AMD FX-8350 @ 4 GHz
Raffreddamento Open-loop water-cooling be quiet! Dark Rock Pro 3
Memoria 16 GB DDR4-3400 16 GB DDR3-1866
Motherboard MSI X99A Gaming Pro MSI Gaming 970
Storage 1TB Intel SSD 530
Sistema operativo Windows 10 Build 1607 (10.0.14393.51)
Driver grafico Crimson 16.8.2
GeForce 372.54

Frame al secondo: barre o curve?

Frame al secondo

Le medie basate sul tempo dicono solamente quanti frame sono renderizzati in un dato secondo. Non c'è alcun modo per sapere se i frame fossero ben distribuiti, oppure se c'è stata una lunga pausa che ha interrotto l'azione a un certo punto riflettendosi negativamente sull'esperienza. Dopotutto, un intervallo di un secondo, con tantissimi frame di cui uno solo che richiede 100 ms per essere visualizzato, finirà per risultare meno fluido dello stesso intervallo in cui i frame sono più lenti ma renderizzati con costanza, persino se il valore medio apparirà pressoché identico.

I seguenti grafici a barre corrispondono ai nostri PC di fascia alta e mainstream, e ognuno include i frame rate minimi, massimi e medi. Sono tutti indicatori approssimativi delle prestazioni, utili per confrontare molte schede video con un semplice sguardo. Anche così, tutti e tre i dati sono tacciati di semplificare troppo l'esperienza di gioco reale.

02 FPS Bars
Clicca per ingrandire

Il grafico del frame rate in un dato periodo di tempo mostra le prestazioni in qualunque punto del nostro benchmark. Questi grafici sono più interessanti delle semplici barre anche se non permettono di arrivare ad una conclusione in modo altrettanto rapido. E comunque è abbastanza ovvio quale configurazione si comporta meglio in questo tipo di confronto.

03 FPS Curves Max CPU
Clicca per ingrandire
04 FPS Curves Min CPU
Clicca per ingrandire

Per ognuno dei 108 secondi del nostro test, abbiamo 108 punti sul nostro asse X con il frame rate corrispondente ad ogni secondo indicato dall'asse Y. Ancora non sappiamo nulla dei frame che sono stati persi né del micro-stuttering all'interno di ogni intervallo (sempre di un secondo): ancora una volta si tratta di una semplice media.

Rappresentare e interpretare correttamente il tempo di rendering è molto importante perché i due indicatori FPS di cui abbiamo già parlato, siano essi barre o line, non ci dicono nulla su come effettivamente è l'esperienza con il gioco. Certamente vogliamo mantenere le medie, i picchi e i cali, ma è importante anche andare più a fondo, analizzando così succede in quel "lungo" secondo.

Frame time e frame renderizzati

Mostrare il tempo di rendering di ogni singolo frame con un grafico a linee sembra piuttosto semplice. Tuttavia, diventa molto più complicato quando si vogliono confrontare schede video con diversi livelli di performance, e che generano un diverso numero di frame durante il medesimo benchmark. Per esempio, nel nostro test con le DirectX 11 sul sistema di fascia alta, la MSI Radeon RX480 Gaming X 8G ha prodotto 8090 frame mentre nel test con le DX12 i frame sono stati 8446. Nello stesso tempo, la GeForce GTX 1060 Gaming X 6G si è spinta, rispettivamente, a 7362 e 7332 frame.

Idealmente vorremmo confrontare il tempo di rendering di ogni singolo frame per comprendere meglio l'andamento di ogni singola scheda video. Però non possiamo semplicemente sovrapporre registrazioni di lunghezza variabile su un comune asse orizzontale come facciamo nei grafici degli FPS che, nel nostro esempio, sono basati su 108 punti. Per i due sistemi di test, partendo dal più performante, il risultato è questo:

05 Frame Times Max CPU
Clicca per ingrandire

In entrambi i grafici, l'asse Y scala in base ai tempi di rendering che abbiamo misurato. Lo facciamo per mostrare quanti più dettagli possibili; semplicemente tenete a mente di non paragonare i grafici a destra e sinistra solo con una rapida occhiata. Per quanto sarebbe certamente possibile estendere l'asse Y del grafico a sinistra fino ad un massimo di 160 secondi, farlo significherebbe sacrificare la risoluzione.

06 Frame Times Min CPU
Clicca per ingrandire

Quindi, ora sappiamo cosa ci troviamo davanti quanto confrontiamo le misurazioni di due GPU frame-per-frame usando un solo asse X, anche quando i risultati delle schede differiscono. Excel non riesce a farlo da solo, quindi ecco perché usiamo il nostro software per creare curve ottimizzate della medesima lunghezza per ciascuna scheda video. Ma come si fa ad inserire 8446 o 7362 dati individuali in un asse che può contenerne, dichiamo, 1000?

Manteniamo i picchi ed i valori rilevati nel benchmark esattamente come apparirebbero in un grafico con migliaia di punti rilevati con la minor perdita possibile. Il tutto è interpolato in modo preciso affinché la rappresentazione visiva coincida perfettamente.

Continua a pagina 2
AREE TEMATICHE
Vuoi ricevere aggiornamenti su #Schede video?
Iscriviti alla newsletter!