Condividi tramite


Analisi dei fotogrammi con acquisizioni GPU

Le acquisizioni GPU (o del frame) registrano tutte le chiamate API Direct3D 12 effettuate dall'applicazione, in genere in un singolo fotogramma (vedere Effettuare un'acquisizione GPU). PIX può riprodurre queste chiamate API per visualizzare informazioni sui parametri di chiamata API, gli stati della pipeline e delle risorse, il contenuto delle risorse e altro ancora.

Suggerimento

Non è sempre possibile che PIX acquisisca correttamente un'acquisizione GPU se un gioco chiama Direct3D 12 in modi non validi. PIX fa il massimo sforzo per essere robusto anche nel caso di modelli di utilizzo non corretti, ma questo è inevitabilmente un caso di garbage in, garbage out. Se si verificano difficoltà ad acquisire catture GPU, provate a usare correttamente il Livello di Debug D3D12 e la convalida basata su GPU per trovare e correggere eventuali chiamate API non corrette.

Acquisire una cattura GPU

Dalla Visualizzazione Connessione, avvia o collega il processo desiderato (verificando che sia selezionata l'opzione rilevante per l'acquisizione GPU).

Configurare le opzioni di acquisizione GPU in base alle esigenze. Per acquisire l'acquisizione, fare clic sul pulsante Acquisisci GPU in PIX o premere ALT+Stampa schermo (o F11, configurabile nelle impostazioni PIX). Verrà visualizzata un'anteprima dell'acquisizione nell'interfaccia utente PIX. A questo punto è possibile terminare l'applicazione, se necessario. Clicca sulla miniatura per aprire l'acquisizione.

Acquisizioni programmatiche

È possibile effettuare una cattura programmaticamente usando WinPixEventRuntime. Per informazioni dettagliate, vedere il post del blog Acquisizione programmatica.

Visualizzare le chiamate API con la visualizzazione degli eventi

La visualizzazione Eventi mostra tutte le chiamate API registrate in un'acquisizione GPU. Esiste un elenco separato per ogni coda Direct3D 12 (grafica, calcolo o copia) usata dal gioco.

L'elenco di eventi può essere filtrato, facoltativamente usando espressioni regolari (fare clic sul pulsante con etichetta .*). Per impostazione predefinita, mostra solo gli eventi che hanno comportato il lavoro di rendering effettivo per l'hardware GPU, invece di preparare semplicemente lo stato per l'uso da parte di operazioni successive. Per includere eventi non GPU, fare clic sul pulsante con etichetta ! G.

Altre informazioni su ogni evento, ad esempio il set completo di parametri di chiamata API, sono disponibili nella visualizzazione Dettagli evento. Tale visualizzazione è inclusa per impostazione predefinita nella scheda Pipeline, ma può anche essere aggiunta al layout corrente tramite il pulsante Modalità di progettazione del layout nell'angolo superiore destro della finestra principale di PIX.

Profilatura delle trame

Con un'acquisizione GPU aperta, passare alla scheda Panoramica. Qui verranno visualizzati alcuni dettagli di base sull'acquisizione.

Per avviare la profilazione, è necessario raccogliere i dati temporali. A tale scopo, fare clic sul pulsante Raccogli dati temporali in alto a destra nella visualizzazione Eventi, oppure fare clic sul testo Fare clic qui per avviare l'analisi e raccogliere i dati temporali nella visualizzazione Sequenza temporale. Che riproduce il lavoro della GPU nell'acquisizione e raccoglie dati di intervallo di base, ad esempio Durate di esecuzione (annotate con PixEvents, se l'applicazione li contiene). Al termine, è possibile raccogliere dati aggiuntivi per essere visualizzati nelle corsie della linea temporale, come informazioni sull'occupazione e altri contatori specifici della GPU.

Suggerimento

Per ottenere risultati ottimali, non interagire con il computer mentre PIX sta raccogliendo dati di intervallo; e chiudere tutte le altre applicazioni che potrebbero usare la GPU.

È anche possibile visualizzare i contatori suddivisi per chiamata API nella visualizzazione Eventi . Per abilitare/disabilitare i contatori, fare clic sul pulsante Contatori elenco eventi (in alto a destra nella visualizzazione Eventi ).

Dati di temporizzazione

Esistono due origini di informazioni sulla tempistica GPU:

  1. I timestamp di avvio del pipeline segnalano quando la GPU inizia l'elaborazione di ognun lavoro. Si noti che questi dati sono disponibili solo quando si esegue Windows 10, build 14393 (o versione successiva) con un driver di grafica appropriato (vedere il post di blog Requisiti). La raccolta dei dati temporali richiede più tempo se i timestamp di inizio tubo non sono disponibili.
  2. I timestamp "end-of-pipe" (EOP) riportano quando la GPU ha terminato l'elaborazione di ogni parte del lavoro.

Poiché le GPU sono molto parallele e con pipeline profonde, è comune che più di un componente di lavoro venga eseguito contemporaneamente e che le operazioni adiacenti si sovrappongano. PIX misura il tempo in due modi diversi che possono offrire informazioni dettagliate sul modello di esecuzione parallela dell'hardware:

  1. La durata dell'esecuzione viene misurata dall'inizio pipeline al timestamp fine pipeline di ogni singola parte di lavoro. Se misurato in questo modo, gli elementi di lavoro GPU eseguiti in parallelo con gli elementi precedenti potrebbero apparire più lunghi rispetto a quelli eseguiti in isolamento, a causa della contesa sulla GPU.
  2. La durata EOP viene misurata dal timestamp end-of-pipe (EOP) dell'elemento precedente fino al timestamp EOP di questo elemento. Gli elementi di lavoro eseguiti in parallelo con gli elementi precedenti verranno pertanto visualizzati più brevi rispetto a quelli eseguiti in isolamento e alcuni elementi potrebbero anche essere segnalati come durata zero se completati interamente in parallelo con l'elemento precedente.

La Sequenza temporale visualizza una o più corsie che mostrano la temporizzazione di ogni operazione GPU. Esiste una corsia separata contenente i dati di durata EOP per ogni coda (grafica, calcolo o copia) usata dal gioco, oltre a una singola corsia che mostra i dati della durata di esecuzione (se disponibili) combinati tra tutte le code.

Informazioni sulla tempistica nella visualizzazione Sequenza temporale di acquisizione GPU PIX

Suggerimento

PIX su Windows attualmente non sovrappone il lavoro della GPU su code differenti durante l'analisi della tempistica nelle acquisizioni della GPU. Si potrebbe prendere in considerazione un'acquisizione di temporizzazione se si vogliono visualizzare dati di temporizzazione di calcolo asincroni sovrapposti. In Acquisizioni GPU, se un gioco usa il calcolo asincrono per eseguire il rendering e il lavoro di calcolo contemporaneamente, PIX misurerà prima uno e poi l'altro. Questo può comportare durate segnalate più brevi per ogni parte del lavoro rispetto alla modalità di esecuzione all'interno del gioco originale (a causa di una contesa ridotta sulla GPU), ma un tempo totale più lungo (a causa della riduzione della parallelizzazione).

Contatori GPU e occupazione

PIX espone contatori delle prestazioni specifici dell'hardware forniti da IHV tramite un plug-in GPU. Questi contatori possono essere abilitati e raccolti nella visualizzazione Contatori elenco eventi (pulsante per abilitare in alto a destra della visualizzazione Eventi) o nella visualizzazione Contatori sequenza temporale (pulsante per abilitare in alto a destra della visualizzazione Sequenza temporale).

In alcune GPU, PIX può anche raccogliere informazioni sull'occupazione. Le GPU vengono in genere costruite come gerarchia di blocchi ripetuti, in cui ogni livello può condividere una risorsa. Ad esempio, una GPU immaginaria potrebbe essere strutturata come questa

Illustrazione del blocco GPU di esempio

Le GPU eseguono shader suddividendo il lavoro dello shader in onde (dette anche warp o fronti d'onda). Nel diagramma precedente ogni blocco blu è in grado di eseguire un'onda. Ogni blocco verde può eseguire fino a quattro onde.

Poiché tutti i blues condividono un singolo set di registri, se un carico di lavoro necessita di tutti i registri, è possibile eseguire solo un'onda alla volta nel blocco verde. In tal caso l'occupazione del blocco verde sarebbe 1, su un totale di occupazione possibile di 4.

In qualsiasi momento, tutti i blocchi verdi potrebbero eseguire un numero diverso di onde. Dei quattro blocchi verdi sopra, uno potrebbe eseguire 3 onde, un altro 2 onde e l'altro 1 onda. PIX riduce tutti i dati a un singolo valore, ovvero il numero massimo di occupazione, che in questo esempio sarebbe 3.

Questo è visualizzato in PIX nella corsia Occupancy, che mostra la massima occupazione, separata dallo stadio dello shader. Si tratta di un'indicazione della quantità di lavoro che la GPU è in grado di eseguire in parallelo. Le barre superiori mostrano un utilizzo migliore della GPU.

Contatori GPU nella Cronologia di acquisizione GPU di PIX

Debugging dei problemi di rendering

Con un'acquisizione GPU aperta, passare alla scheda Pipeline . Tale scheda contiene una visualizzazione Eventi , diverse viste di controllo dello stato e delle risorse e una visualizzazione Pipeline .

La selezione di un evento nella visualizzazione Eventi popola varie visualizzazioni, in particolare la visualizzazione Pipeline, che può essere utilizzata per esaminare le firme principali, lo stato della pipeline e le risorse associate. La visualizzazione Pipeline è anche il punto di ingresso nel debug dello shader.

Suggerimento

Per eseguire la maggior parte delle funzionalità, è necessario avviare l'analisi. L'analisi è il modo in cui PIX raccoglie dati di intervallo, informazioni sullo stato e risorse. Esistono molti modi per avviare l'analisi, ma il modo globale è tramite il pulsante Avvia analisi play in alto a destra dell'applicazione. Assicurarsi che la GPU desiderata sia selezionata.

Visualizzare oggetti, parametri e stato Direct3D 12

Dopo aver selezionato un evento nella visualizzazione Eventi, le visualizzazioni Stato e Pipeline (disponibili nella scheda Pipeline) mostrano i dettagli dello stato Direct3D al momento dell'evento. È possibile visualizzare le risorse associate alla pipeline, al codice dello shader, agli input, agli output e ai rendertarget attualmente associati.

Stato della pipeline Direct3D

Visualizzazione dell'output di Visual Studio nella visualizzazione Pipeline

Debug dello shader

Dopo aver selezionato un evento appropriato ed eseguire l'analisi, è possibile eseguire il debug degli shader. Nella visualizzazione Pipeline esistono diversi modi per avviare il debug dello shader:

  1. Selezionare la voce Shader sotto la fase dello shader desiderata e fare clic sul pulsante di riproduzione verde. Prima di avviare la sessione di debug, assicurarsi di configurare i parametri appropriati dello shader (ad esempio, gli ID di istanza e i vertici per i vertex shader o le coordinate dei pixel per i pixel shader).
  2. Fare clic con il pulsante destro del mouse in un visualizzatore di risorse, ad esempio Output VS o SRV/UAV/RTV, e selezionare l'opzione Debug appropriata.
  3. Fare clic sul pulsante Debug Pixel nella visualizzazione Dettagli Pixel quando si visualizza una risorsa appropriata, ad esempio SRV/UAV/RTV.

Suggerimento

Se non è possibile visualizzare l'origine dello shader durante il debug, è probabile che le informazioni di debug manchino. Assicurarsi di generare i PDB shader per l'applicazione e di aver configurato PIX per caricare tali PDB.

Modifica shader e continuazione

Il codice dello shader HLSL può essere modificato direttamente all'interno di PIX, consentendo di visualizzare immediatamente l'effetto delle modifiche sui risultati o sulle prestazioni di rendering. Ciò può essere utile per la creazione di prototipi e l'ottimizzazione degli shader, perché può ridurre notevolmente il tempo di turnaround quando si provano idee diverse.

Dopo aver selezionato uno shader, è possibile modificare il codice desiderato, quindi fare clic su Modifica>applica. Altre visualizzazioni (ad esempio OM RTV 0) verranno aggiornate per visualizzare l'effetto della modifica. Potrebbe risultare utile ancorare più istanze della visualizzazione Pipeline una accanto all'altra per visualizzare i risultati del target di rendering mentre si modifica il codice dello shader.

Se perdi traccia esattamente di ciò che hai cambiato, fai clic con il pulsante destro del mouse sul codice dello shader e scegli Diff con Originale.

Suggerimento

PIX in Windows non supporta ancora il salvataggio degli shader modificati nel file di acquisizione.

Visualizzatori di debug

I visualizzatori rendertarget sono disponibili nella visualizzazione Pipeline quando si esamina il contenuto di un oggetto rendertarget. Il visualizzatore di immagini predefinito mostra semplicemente l'immagine come di consueto e può essere modificata selezionando una visualizzazione diversa nella visualizzazione Visualizzazione .

Cronologia Pixel

Per qualsiasi risorsa simile a pixel (ad esempio, RTV, UAV o buffer di profondità), è possibile visualizzare tutte le operazioni che hanno interessato un determinato pixel usando La cronologia pixel. È possibile accedere facendo clic con il pulsante destro del mouse sul pixel desiderato e scegliendo Mostra cronologia pixel, oppure facendo clic sul pulsante Cronologia pixel nella visualizzazione Dettagli pixel.

Avvertenze e note varie

  • Non è sempre possibile per PIX acquisire correttamente una cattura della GPU se un gioco chiama Direct3D 12 in modi non validi. PIX fa il massimo sforzo per essere robusto anche in caso di modelli di utilizzo non corretti, ma questo è inevitabilmente un esempio del principio "rifiuti in ingresso, rifiuti in uscita." Se si verificano difficoltà nell'acquisire catture GPU, provare a utilizzare il livello di debug D3D12 e la convalida basata sulla GPU per individuare e correggere eventuali chiamate API non corrette.
  • Le acquisizioni GPU di Windows non sono, in generale, portabili tra diverse versioni di hardware e driver GPU. Nella maggior parte dei casi, un'acquisizione acquisita in un computer verrà riprodotta correttamente su altre GPU simili della stessa famiglia hardware e le acquisizioni di alcuni giochi possono anche funzionare tra GPU di produttori completamente diversi, ma è anche possibile che un aggiornamento del driver possa interrompere la compatibilità con le acquisizioni meno recenti. PIX può garantire che la riproduzione abbia esito positivo solo quando la GPU e il driver sono esattamente uguali, quindi PIX avvisa prima di iniziare l'analisi se non esiste una corrispondenza perfetta. Procedere oltre l'avviso a proprio rischio.
  • PIX ha un supporto limitato per più GPU. Verranno sempre riprodotte le acquisizioni GPU su un singolo adattatore, indipendentemente dal numero di adattatori usati dall'applicazione. PIX consente di selezionare l'adattatore di riproduzione da un menu a discesa nella barra degli strumenti PIX. PIX tenterà di selezionare automaticamente l'adattatore di riproduzione se l'applicazione usava una sola scheda.
  • Per i carichi di lavoro non deterministici di ExecuteIndirect, potrebbe essere utile abilitare l'impostazione Usa buffer degli argomenti ExecuteIndirect in fase di riproduzione.