Condividi tramite


Analisi dei frame di grafica

È possibile usare l'analisi dei frame di grafica in Diagnostica grafica di Visual Studio per analizzare e ottimizzare le prestazioni di rendering del gioco o dell'app Direct3D.

Nota

A partire da Visual Studio 2013 Update 3, le finestre degli strumenti di diagnostica grafica sono ospitate in una copia indipendente della shell di Visual Studio.Questa shell personalizzata, denominata Analisi grafica, elimina le opzioni e i menu non necessari, ma a parte ciò l'analisi dei frame e il flusso di lavoro rimangono uguali a prima.Per altre informazioni su questa modifica, vedere Panoramica della diagnostica grafica.

Analisi dei frame

L'analisi dei frame usa le stesse informazioni acquisite in un file di registro elementi grafici per finalità diagnostiche, ma le usa per riepilogare invece le prestazioni del rendering. Le informazioni sulle prestazioni non sono registrate nel registro durante l'acquisizione. Queste informazioni sono invece generate in un secondo momento, durante l'analisi dei frame, tramite la misurazione della durata degli eventi e la raccolta di statistiche durante la riproduzione del frame. Questo approccio presenta numerosi vantaggi rispetto alla registrazione delle informazioni sulle prestazioni durante l'acquisizione:

  • L'analisi dei frame può usare i risultati di più riproduzioni dello stesso frame, in modo da assicurare la validità statistica del riepilogo delle prestazioni.

  • L'analisi dei frame può generare informazioni sulle prestazioni per configurazioni hardware e dispositivi diversi da quello in cui sono state acquisite le informazioni.

  • Grazie all'analisi dei frame è anche possibile generare nuovi riepiloghi delle prestazioni da informazioni acquisite in precedenza, ad esempio quando i driver GPU sono ottimizzati o quando espongono funzionalità di debug aggiuntive.

Oltre a questi vantaggi, è possibile usare l'analisi dei frame anche per modificare la modalità di esecuzione del rendering durante la riproduzione, in modo che sia possibile presentare informazioni sul possibile impatto delle modifiche sulle prestazioni di rendering di un'app. Queste informazioni permettono di scegliere tra potenziali strategie di ottimizzazione, senza doverle implementare tutte, e quindi di acquisire e confrontare tutti i risultati.

Anche se l'analisi dei frame è stata progettata principalmente per permettere di ottenere prestazioni di rendering migliori, può anche aiutare a ottenere una qualità visiva superiore per una destinazione di prestazioni specifica o a ridurre il consumo di energia della GPU.

Per una dimostrazione di quello che può fare l'analisi dei frame per l'app, è possibile guardare il video relativo all'analisi dei frame di grafica di Visual Studio su Channel 9.

Uso dell'analisi dei frame

Prima di potere usare l'analisi dei frame è necessario acquisire informazioni sugli elementi grafici dall'app durante l'esecuzione, esattamente come si farebbe con Diagnostica grafica. Selezionare quindi la scheda Analisi dei frame nella finestra del documento del registro elementi grafici (con estensione vsglog).

Selezionare la scheda Analisi dei frame.

Al termine dell'analisi saranno visualizzati i risultati. Nella parte superiore della scheda Analisi dei frame sono visualizzate la sequenza temporale e la tabella Riepilogo. Nella parte superiore sono disponibili le tabelle di dettaglio. Se durante la riproduzione sono stati generati errori o avvisi, il riepilogo corrispondente sarà disponibile sopra la sequenza temporale. Per ottenere altre informazioni su errori e avvisi, selezionare i collegamenti disponibili nel riepilogo.

Interpretazione dei risultati

L'interpretazione dei risultati di ogni variante permette di dedurre informazioni utili sulle prestazioni e sul comportamento di rendering dell'app. Per altre informazioni sulle varianti di rendering, vedere Variants più avanti in questo articolo.

Alcuni risultati indicano direttamente il modo in cui la variante influisce sulle prestazioni di rendering:

  • Se la variante Filtraggio bilineare della trama ha mostrato miglioramenti nelle prestazioni, l'uso di questa variante nell'app permetterà di ottenere miglioramenti analoghi nelle prestazioni.

  • Se la variante relativa al riquadro di visualizzazione 1x1 ha mostrato miglioramenti nelle prestazioni, la riduzione delle dimensioni delle destinazioni di rendering nell'app permetterà di migliorarne le prestazioni a livello di rendering.

  • Se la variante Compressione di trama a blocchi ha mostrato miglioramenti nelle prestazioni, l'uso di questa variante nell'app permetterà di ottenere miglioramenti analoghi nelle prestazioni.

  • Se le prestazioni della variante 2xMSAA sono quasi uguali a quelle della variante 0xMSAA, è possibile abilitare la variante 2xMSAA nell'app per migliorare la qualità di rendering senza influire negativamente sulle prestazioni.

Altri risultati potrebbero suggerire implicazioni più profonde e complesse per le prestazioni dell'app:

  • Se la variante relativa al riquadro di visualizzazione 1x1 mostra miglioramenti notevoli nelle prestazioni, è possibile che l'app usi una quantità di velocità di riempimento superiore a quella disponibile. Se questa variante non mostra alcun miglioramento nelle prestazioni, è possibile che l'app stia elaborando una quantità eccessiva di vertici.

  • Se la variante Formato di destinazione di rendering 16bpp mostra miglioramenti notevoli nelle prestazioni, è possibile che l'app stia usando una larghezza di banda di memoria eccessiva.

  • Se la variante Dimensioni trama - Metà/Quarto mostra miglioramenti significativi delle prestazioni, è possibile che le trame occupino una quantità di memoria eccessiva, usino troppa larghezza di banda o usino in modo non efficace la cache delle trame. Se questa variante non mostra alcun cambiamento nelle prestazioni, è probabilmente possibile usare trame più grandi e più dettagliate senza impatti negativi sulle prestazioni.

Se sono disponibili contatori hardware, sarà possibile usarli per raccogliere informazioni molto dettagliate sulle possibili cause delle prestazioni di rendering negative dell'app. Tutti i dispositivi con livello di funzionalità 9.2 e superiore supportano le query relative all'occlusione di profondità (contatore di pixel bloccati) e i timestamp. È possibile che siano disponibili altri contatori hardware, a seconda se il fornitore di GPU ha implementato o meno i contatori hardware e li ha esposti nel proprio driver. Questi contatori possono essere usati per confermare la causa precisa dei risultati mostrati nella tabella Riepilogo. È ad esempio possibile determinare se il disegno eccessivo costituisce un problema esaminando la percentuale di pixel bloccati dal test di profondità.

Per impostazione predefinita, la sequenza temporale e la tabella Riepilogo sono visualizzate e le altre sezioni sono compresse.

Sequenza temporale

La sequenza temporale mostra una panoramica dei tempi reciproci di chiamata di disegno. Poiché le barre più larghe corrispondono a tempi di disegno più lunghi, è possibile usarla per individuare rapidamente le chiamate di disegno più dispendiose nel frame. Se il frame acquisito include un numero elevato di chiamate di disegno, più chiamate di disegno saranno combinate in un'unica barra, la cui lunghezza corrisponde alla somma delle chiamate di disegno specifiche.

La sequenza temporale mostra i costi delle chiamate di disegno.

È possibile posizionare il puntatore su una barra per verificare l'evento di chiamata di disegno a cui corrisponde la barra. Se si seleziona la barra, l'elenco di eventi sarà sincronizzato in base all'evento specifico.

Tabella

La tabella numerica sotto la sequenza temporale mostra le prestazioni relative di ogni variante di rendering per ogni chiamata di disegno rispetto al rendering predefinito dell'app. Ogni colonna mostra una diversa variante di rendering e ogni riga rappresenta una chiamata di disegno diversa, identificata nella colonna più a sinistra. È possibile seguire i collegamenti relativi a un evento per visualizzarlo nella finestra Elenco eventi grafici.

La tabella di riepilogo mostra diverse varianti.

La seconda colonna da sinistra nella tabella Riepilogo mostra il tempo di rendering di base, ovvero il tempo necessario per il completamento della chiamata di disegno da parte del rendering predefinito dell'app. Le colonne rimanenti mostrano le prestazioni relative di ogni variante di rendering sotto forma di percentuale del valore di base, in modo da permettere di individuare con facilità eventuali miglioramenti nelle prestazioni. Le percentuali superiori al 100% hanno richiesto un tempo superiore rispetto al valore di base, ovvero indicano un calo nelle prestazioni, mentre le percentuali inferiori al 100% hanno richiesto meno tempo, ovvero indicano un miglioramento nelle prestazioni.

I valori della durata assoluta del valore di base e la durata relativa delle varianti di rendering corrispondono in effetti alla media di più esecuzioni, 5 per impostazione predefinita. Il calcolo della media permette di assicurare che i dati relativi alla durata siano affidabili e coerenti. È possibile posizionare il puntatore su ogni cella della tabella per esaminare i valori di durata minima, massima, media e mediana osservati durante la generazione di risultati per la chiamata di disegno e la variante di rendering specifiche. È visualizzata anche la durata di base.

Chiamate di disegno "problematiche"

Per evidenziare le chiamate di disegno che consumano una proporzione maggiore del tempo di rendering complessivo o che potrebbero essere insolitamente lente per motivi evitabili, la riga che include queste chiamate di disegno "problematiche" avrà ombreggiatura di colore rosso quando la rispettiva durata di base supera di più di una deviazione standard la durata media di base di tutte le chiamate di disegno nel frame.

Questa chiamata a DrawIndexed contiene varianti a caldo e a freddo.

Rilevanza statistica

Per evidenziare le variazioni di rendering con rilevanza maggiore, l'analisi dei frame determina la rilevanza statistica di ogni variante di rendering e mostra in grassetto le varianti più significative. Le varianti che migliorano le prestazioni sono mostrate in verde, mentre quelle che le riducono sono mostrate in rosso. I risultati non significativi a livello statistico sono mostrati in testo normale.

Rilevanza statistica della variante per le chiamate di disegno

Per determinare la rilevanza statistica, l'analisi dei frame usa il test t di Student.

Tabella Dettagli

Sotto la tabella Riepilogo è disponibile la tabella Dettagli, compressa per impostazione predefinita. Il contenuto della tabella Dettagli dipende dalla piattaforma hardware della macchina di riproduzione. Per informazioni sulle piattaforme hardware supportate, vedere Hardware Support.

Piattaforme che non supportano i contatori hardware

La maggior parte delle piattaforme non offre il supporto completo per i contatori GPU hardware, incluse tutte le GPU attualmente fornite da Intel, AMD e nVidia. Se non sono presenti contatori hardware da raccogliere, sarà visualizzata solo una tabella Dettagli, che include la durata media assoluta di tutte le varianti.

Tabella dei dettagli e alcune varianti di riproduzione.

Piattaforme che supportano i contatori hardware

Per le piattaforme che supportano i contatori GPU hardware, ad esempio nVidia T40 SOC e tutti i SOC Qualcomm, sono visualizzate alcune tabelle Dettagli, una per ogni variante. Ogni contatore hardware disponibile è raccolto per ogni variante di rendering ed è visualizzato nella tabella Dettagli specifica.

I contatori hardware vengono visualizzati se supportati.

Le informazioni relative ai contatori hardware offrono una visualizzazione molto dettagliata del comportamento specifico della piattaforma hardware per ogni chiamata di disegno, che possono aiutare a identificare con grande precisione la causa dei colli di bottiglia relativi alle prestazioni.

Nota

Diverse piattaforme hardware supportano contatori diversi. Questo non è un comportamento standard.I contatori e ciò che rappresentano sono determinati esclusivamente da ogni produttore di GPU.

Aree di marcatori ed eventi

L'analisi dei frame supporta i marcatori di eventi definiti dagli utenti e i gruppi di eventi, visualizzati nella tabella Riepilogo e nelle tabelle Dettagli.

È possibile usare le API ID3DUserDefinedAnnotation o la famiglia legacy D3DPERF_ delle API per creare marcatori e gruppi. Quando si usa la famiglia D3DPERF_ delle API, è possibile assegnare a ogni marcatore e a ogni gruppo un colore, che sarà visualizzato dall'analisi dei frame come banda colorata nelle righe che includono il marcatore di eventi o i marcatori di inizio/fine dei gruppi di eventi e i rispettivi contenuti. Questa funzionalità può aiutare a identificare rapidamente gli eventi di rendering o i gruppi di eventi importanti.

Avvisi ed errori

Le operazioni di analisi dei frame sono a volte completate con avvisi o errori, che sono riepilogati sopra la sequenza temporale. Le informazioni dettagliate corrispondenti sono disponibili nella parte inferiore della scheda Analisi dei frame.

In genere, gli avvisi e gli errori sono solo a scopo informativo e non richiedono alcun intervento.

Gli avvisi indicano solitamente che il supporto hardware è carente ma sono disponibili soluzioni alternative, che non è possibile raccogliere i contatori hardware oppure che determinati dati sulle prestazioni potrebbero non essere attendibili, ad esempio se una soluzione alternativa influisce negativamente sulle prestazioni.

Gli errori indicano in genere che nell'implementazione dell'analisi dei frame sono presenti bug, che in un driver sono presenti bug, che il supporto hardware è carente e non sono possibili soluzioni alternative oppure che l'app prova a eseguire operazioni non supportate dalla riproduzione.

Nuovi tentativi

Se la GPU attraversa una transizione di stato di potenza durante l'analisi dei frame, eseguire di nuovo il passaggio di analisi interessato, poiché la velocità di clock della GPU ha subito modifiche e ha quindi reso non validi i risultati di durata relativa.

L'analisi dei frame limita il numero di nuovi tentativi a 10. Se le impostazioni di risparmio di energia o controllo del clock della piattaforma sono molto rigide, è possibile che l'analisi dei frame abbia esito negativo e che sia segnalato un errore a causa del superamento del limite di nuovi tentativi consentiti. Per ridurre questo problema, è possibile provare a modificare le impostazioni del risparmio energia e della limitazione della velocità del clock della piattaforma in modo che siano meno rigide, se la piattaforma lo permette.

Supporto hardware

Timestamp e query di occlusione

I timestamp sono supportati in tutte le piattaforme che supportano l'analisi dei frame. Le query di occlusione della profondità, necessarie per il contatore relativo ai pixel bloccati, sono supportate sulle piattaforme che supportano funzionalità di livello 9.2 o superiori.

Nota

Anche se i timestamp sono supportati su tutte le piattaforme che supportano l'analisi dei frame, la precisione e la coerenza dei timestamp variano a seconda della piattaforma usata.

Contatori della GPU

Il supporto per i contatori hardware della GPU dipende dall'hardware.

Poiché nessuna GPU di computer attualmente offerta da Intel, AMD, o nVidia supporta in modo affidabile i contatori hardware della GPU, l'analisi dei frame non raccoglie i contatori corrispondenti. L'analisi dei frame, tuttavia, raccoglie i contatori hardware da queste GPU, che li supportano in modo affidabile:

  • SOC Qualcomm (tutti quelli che supportano Windows Phone)

  • nVidia T40 (Tegra4).

Nessun'altra piattaforma che supporta l'analisi dei frame raccoglie i contatori hardware della GPU.

Nota

Poiché i contatori hardware GPU sono risorse hardware, è possibile che siano necessari più passaggi per raccogliere il set completo di contatori hardware per ogni variante di rendering.Di conseguenza, l'ordine in cui i contatori GPU vengono raccolti non è specificato.

Windows Phone

I timestamp, le query di occlusione e i contatori hardware della GPU sono supportati solo su dispositivi Windows Phone forniti originariamente con Windows Phone 8.1. Questi elementi sono necessari all'analisi dei frame per la riproduzione del file di registro elementi grafici. I dispositivi Windows Phone forniti originariamente con Windows Phone 8 non supportano l'analisi dei frame, anche nel caso dei dispositivi aggiornati a Windows Phone 8.1.

Scenari non supportati

Alcuni modi di usare l'analisi dei frame non sono supportati o non sono consigliati.

WARP

L'analisi dei frame deve essere usata per la profilatura e per il miglioramento delle prestazioni di rendering in hardware effettivo. L'esecuzione dell'analisi dei frame in dispositivi WARP è possibile, poiché l'emulatore di Windows Phone può essere eseguito su dispositivi WARP, ma non offre in genere risultati significativi, perché l'esecuzione di dispositivi WARP in una CPU di livello elevato è decisamente più lenta rispetto a quella delle GPU moderne meno efficienti. Le prestazioni dei dispositivi WARP, inoltre, possono presentare notevoli variazioni in base alla CPU specifica usata per l'esecuzione.

Riproduzione di acquisizioni con livello di funzionalità elevato su dispositivi di livello inferiore

Quando si riproduce in Diagnostica grafica un file di registro elementi grafici che usa un livello di funzionalità superiore rispetto a quello supportato dalla macchina di riproduzione, si verificherà automaticamente il fallback su WARP. In analisi dei frame non si verifica esplicitamente il fallback su WARP ed è generato un errore. WARP è utile per esaminare la correttezza di un'app Direct3D, ma non per esaminarne le prestazioni.

Nota

Anche se è importante tenere in considerazione le problematiche a livello di funzionalità, è possibile acquisire e riprodurre file di registro elementi grafici in diverse configurazioni e diversi dispositivi hardware.Ad esempio, è possibile acquisire informazioni sugli elementi grafici in un dispositivo Windows Phone e riprodurle in un computer desktop o viceversa.In entrambi i casi, il registro di elementi grafici non include API e non usa livelli di funzionalità non supportati nella macchina di riproduzione.

Direct3D 10 e versioni precedenti

L'analisi dei frame è supportata solo per l'API Direct3D 11. Se l'app chiama l'API Direct3D 10, l'analisi dei frame non sarà in grado di riconoscerla o di eseguirne la profilatura, anche se è riconosciuta e usata da Diagnostica grafica. Se l'app usa API di tipo Direct3D11 e Direct3D 10, la profilatura sarà eseguita solo per le chiamate a Direct3D 11.

Nota

Questa situazione è applicabile solo alle chiamate alle API Direct3D in uso, non ai livelli di funzionalità.Se si usano le API Direct3D 11, Direct3D 11.1 o Direct3D 11.2, sarà disponibile qualsiasi livello di funzionalità e sarà possibile usare l'analisi dei frame.

Varianti

Ogni modifica apportata dall'analisi dei frame al modo in cui è eseguito il rendering di un frame durante la riproduzione è definita variante. Le varianti esaminate dall'analisi dei frame corrispondono a modifiche comuni e relativamente semplici che possono essere apportate per migliorare le prestazioni di rendering o la qualità visiva dell'app, ad esempio riducendo la dimensione delle trame, usando la compressione della trame o abilitando tipi diversi di anti-aliasing. Le varianti eseguono l'override del contesto di rendering normale e dei parametri dell'app. Di seguito è disponibile un riepilogo:

Variante

Descrizione

Dimensione riquadro di visualizzazione 1x1

Riduce a 1x1 pixel le dimensioni del riquadro di visualizzazione in tutte le destinazioni di rendering.

Per altre informazioni, vedere Variante delle dimensioni del viewport 1x1.

0x MSAA

Disabilita l'anti-aliasing multicampione (MSAA, Multi-Sample Anti-Aliasing) in tutte le destinazioni di rendering.

Per altre informazioni, vedere Varianti di MSAA 0x/2x/4x.

2x MSAA

Abilita l'anti-aliasing multicampione (MSAA, Multi-Sample Anti-Aliasing) 2x in tutte le destinazioni di rendering.

Per altre informazioni, vedere Varianti di MSAA 0x/2x/4x.

4x MSAA

Abilita l'anti-aliasing multicampione (MSAA, Multi-Sample Anti-Aliasing) 4x in tutte le destinazioni di rendering.

Per altre informazioni, vedere Varianti di MSAA 0x/2x/4x.

Filtraggio punti della trama

Imposta la modalità di filtraggio su DXD11_FILTER_MIN_MAG_MIP_POINT (filtraggio punti della trama) per tutti i campioni di trama appropriati.

Per altre informazioni, vedere Varianti del filtro della trama a punti, bilineare, trilineare e anisotropico.

Filtraggio bilineare della trama

Imposta la modalità di filtraggio su DXD11_FILTER_MIN_MAG_LINEAR_MIP_POINT (filtraggio bilineare della trama) per tutti i campioni di trama appropriati.

Per altre informazioni, vedere Varianti del filtro della trama a punti, bilineare, trilineare e anisotropico.

Filtraggio trilineare della trama

Imposta la modalità di filtraggio su DXD11_FILTER_MIN_MAG_MIP_LINEAR (filtraggio trilineare della trama) per tutti i campioni di trama appropriati.

Per altre informazioni, vedere Varianti del filtro della trama a punti, bilineare, trilineare e anisotropico.

Filtraggio anisotropo della trama

Imposta la modalità di filtraggio su DXD11_FILTER_ANISOTROPIC e MaxAnisotropy su 16 (filtraggio anisotropo della trama 16x) per tutti i campioni di trama appropriati.

Per altre informazioni, vedere Varianti del filtro della trama a punti, bilineare, trilineare e anisotropico.

Formato di destinazione di rendering 16bpp

Imposta il formato di pixel su DXGI_FORMAT_B5G6R5_UNORM (16bpp, formato 565) per tutte le destinazioni di rendering e i buffer nascosti.

Per altre informazioni, vedere Variante del formato di destinazione di rendering 16bpp.

Generazione di mappe MIP

Abilita le mappe MIP in tutte le trame che non corrispondono a destinazioni di rendering.

Per altre informazioni, vedere Variante di generazione di mappe MIP.

Dimensioni trama - Metà

Riduce le dimensioni di trama di tutte le trame che non corrispondono a destinazioni di rendering alla metà della dimensione originale in ogni dimensione. Ad esempio, una trama con dimensioni 256x128 è ridotta a 128x64 texel.

Per altre informazioni, vedere Variante delle dimensioni della trama ridotte a metà o un quarto.

Dimensioni trama - Quarto

Riduce le dimensioni di trama di tutte le trame che non corrispondono a destinazioni di rendering a un quarto della dimensione originale in ogni dimensione. Ad esempio, una trama con dimensioni 256x128 è ridotta a 64x32 texel.

Per altre informazioni, vedere Variante delle dimensioni della trama ridotte a metà o un quarto.

Compressione di trama a blocchi

Abilita la compressione a blocchi in tutte le trame con variante di formato di B8G8R8X8, B8G8R8A8 o R8G8B8A8 pixel. Le varianti di formato B8G8R8X8 sono compresse tramite BC1, mentre per le varianti di formato B8G8R8A8 e R8G8B8A8 si usa BC3.

Per altre informazioni, vedere Variante di compressione della trama BC.

Il risultato per la maggior parte delle varianti è prescrittivo, ovvero indica ad esempio che la riduzione delle dimensioni della trama a metà offre un incremento del 25 percento nella velocità o che l'abilitazione di 2x MSAA comporta un rallentamento pari solo al 2 percento. Per altre varianti potrebbe essere necessario interpretare i risultati. Se, a esempio la variante che modifica le dimensioni del riquadro di visualizzazioni in 1x1 mostra un miglioramento notevole delle prestazioni, ciò potrebbe indicare la presenza di un collo di bottiglia nel rendering causata da una bassa velocità di riempimento. In alternativa, se non sono rilevate modifiche significative nelle prestazioni, è possibile che il collo di bottiglia del rendering sia dovuto all'elaborazione dei vertici.