2009-05-12 16 views
5

Ive ha un'applicazione che scende a circa 10 fps. L'ho profilata con xperf che mostrava che la mia app utilizzava solo il 20% della CPU, con nessuno dei miei metodi che utilizzava una quantità maggiore del previsto del 20%.Profilo grafico

Questo sembra indicare che la stragrande calo di fps è perché la scheda grafica è neanche in grado di tenere il passo con il rendering del telaio, con conseguente nel mio programma di sosta mentre si raggiunge ...

c'è qualche modo per profilo di cosa è la scheda grafica e capire cosa il mio programma sta dicendo di fare ciò che lo rallenta, in modo che possa provare a migliorare il frame rate?

risposta

0

Stai sviluppando per Windows? In tal caso, evita di utilizzare Video per Windows poiché ciò ti limiterà nel modo in cui descrivi. Utilizzare invece DirectX.

+0

Sto usando Direct3D e ho una scheda piuttosto potente, quindi so che il mio codice lo sta facendo rallentare in qualche modo ... –

+0

Sei in streaming video da un file. Stai includendo anche il componente audio? – ChrisBD

7

Per il debugging/profiling grafica, provare Nvidia PerfHUD

NVIDIA PerfHUD è un potente strumento di analisi delle prestazioni in tempo reale per le applicazioni Direct3D.

C'è anche una soluzione ATI, chiamato 'GPU PerfStudio'

GPU PerfStudio è uno strumento di analisi delle prestazioni in tempo reale, che è stato progettato per aiutare a ottimizzare le prestazioni grafiche del vostro DirectX 9, DirectX 10 e applicazioni OpenGL. GPU PerfStudio visualizza i dati dell'API, del driver e dell'hardware in tempo reale che possono essere visualizzati utilizzando diagrammi e diagrammi a barre estremamente flessibili. L'applicazione che viene profilata può essere eseguita localmente o in remoto sulla rete. GPU PerfStudio consente allo sviluppatore di sovrascrivere gli stati di rendering chiave in tempo reale per un rapido rilevamento dei colli di bottiglia. Una finestra di analisi automatica può essere utilizzata per identificare i problemi di prestazioni nelle varie fasi della pipeline grafica. Per utilizzare GPU PerfStudio non sono necessari driver speciali o modifiche al codice.

È possibile trovare ulteriori informazioni e scaricare link qui:

+0

Possiedo una scheda ATI, qualsiasi possibilità che funzioni con le schede ATI in qualche modo o ATI abbia una cosa propria? –

+0

ok grazie, lo controllerò quando tornerò a casa da quando la pagina di download sembra essere https e la mia rete di college sembra non consentire https :( –

1

Non c'è bisogno di indovinare. Solo pause it a few times sotto l'IDE, e ti mostrerà esattamente cosa sta aspettando.

+0

Come stabilire quale area grafica sta causando il rallentamento? metodi come DrawPrimitive e Unlock, etc restituiscono quasi istantaneamente, con DirectX/GPU che blocca il lavoro che deve essere eseguito in un buffer fino a quando non è pronto a farlo. Con il programma, quindi, attendere se provo ad avviare un nuovo frame prima di aver svuotato il buffer e finito di fare i comandi che conteneva? –

+0

@Lancer: Il modo in cui funziona è semplice. Supponendo che sia più lento di quanto potrebbe essere, significa che sta spendendo una frazione di tempo (il 50% dice) in stati che potrebbero essere eliminati. Lo stato è costituito principalmente dal contatore di programmi esteso, vale a dire lo stack di chiamate, quindi se assumi lo stack di chiamate una volta, la possibilità che non lo vedrai fare la cosa inutile è del 50%. prova 10 volte, la probabilità che non lo vedrai è 1/1024. Lo vedrai su circa il 50% dei campioni. Ora forse non è così semplice, ma forse lo è. Perciò buona fortuna. –

+0

... Se guardi ciascun livello dello stack di chiamate, probabilmente troverai una chiamata di funzione mostrata su più campioni che non avresti mai pensato avrebbero rappresentato per molto tempo, ma lo è. Se riesci a capire come evitare di fare quella chiamata, il tempo che salvi è approssimato dalla frazione di campioni di stack che lo contengono. Dal momento che segnali una lentezza, dovrebbe essere davvero ovvio. –

4

Inoltre, controllare questo articolo su FPS:

FPS vs Frame Time

Fondamentalmente si parla del fatto che una goccia da 200fps a 190fps è trascurabile, mentre una goccia da 30 fps a 20 fps è un affare molto più grande . Per una migliore misurazione delle prestazioni, dovresti calcolare il tempo fotogramma piuttosto che l'FPS.

Non ci hai mai detto cosa sono i tuoi fps o cosa sta facendo il programma, quindi la tua "vasta goccia" potrebbe non essere affatto un grosso problema.

Per DirectX, è disponibile il numero PIX per il profilo delle operazioni CPU e GPU. Può dare informazioni molto dettagliate e potrebbe valerne la pena.

Spero che questo aiuti!

+1

"Ive ha un'applicazione che scende a circa 10 fps" Penso che 10 fps su un computer di fascia alta sia qualcosa di importante da fare ... –

+0

Non è diminuito di 10 fps. È sceso a 10 fps. Decisamente lento. – Joe

1

Puoi provare a usare dxprof (cerca in google). È un'app leggera che disegna barre in tempo reale, ogni barra corrispondente a un evento DirectX (come chiamata a chiamata o copia di risorsa). Puoi bloccare le barre e controllare lo stack delle chiamate per scoprire da dove proviene la chiamata a draw.