Come posso profilare la velocità dei miei shader di vertici e frammenti separatamente?


11

Mi piacerebbe sapere come posso verificare se il mio vertice o il mio shader di frammento è un collo di bottiglia nella mia pipeline di rendering.

Ho letto sull'utilizzo glQueryCountercon il GL_TIMESTAMPtarget per ottenere checkpoint di clock tra i comandi OpenGL, ma questi non fanno distinzione tra diversi tipi di shader.

Ad esempio, se un fotogramma sulla GPU impiegava 8 ms per il rendering, posso dire che lo shader di vertice ha impiegato 7 ms e lo shader di frammenti ha impiegato 1 ms?

Risposte:


12

Gli shader di vertici e frammenti vengono eseguiti contemporaneamente, non in sequenza, e la GPU esegue automaticamente il bilanciamento del carico tra di loro, quindi non è possibile assegnare in modo significativo tempi specifici come 7 ms per uno e 1 ms per l'altro.

Tuttavia, puoi fare un semplice esperimento per misurare dove si trova il collo di bottiglia: imposta la matrice di proiezione della vista su tutti gli zeri per tutte le tue chiamate di disegno. Questo rende tutti i vertici in uscita zero per le loro posizioni e rende tutti i triangoli degeneri; pertanto cortocircuita tutta la rasterizzazione e l'ombreggiatura dei frammenti, pur mantenendo tutto il vertex shader funzionante (il compilatore di shader non può ottimizzare nulla, poiché non sa che la matrice verrà impostata su zero in fase di esecuzione).

Quando misurate le prestazioni con le matrici azzerate, vedrete la quantità di tempo necessaria per eseguire solo i vertex shader, senza alcun lavoro di rasterizzazione o ombreggiatura dei frammenti nella GPU. È quindi possibile confrontare questo con la quantità di tempo necessaria per il rendering ordinario per ogni passaggio. Se le due volte sono simili, il passaggio è probabilmente fortemente legato al vertice; se il rendering a matrice zero è significativamente più veloce, probabilmente è associato a pixel. È anche possibile ottenere un risultato intermedio, indicando che il lavoro è diviso equamente tra i due.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.