2009-05-12 22 views
5

Tengo una aplicación que se reduce a alrededor de 10 fps. Lo perfilé con xperf, que mostró que mi aplicación usaba solo el 20% de la CPU, y ninguno de mis métodos utilizaba una cantidad mayor de la esperada de ese 20%.Perfiles de gráficos

Esto parece indicar que la gran caída de fps se debe a que la tarjeta gráfica tampoco capaz de mantenerse al día con la representación del marco, lo que resulta en mi parada programa mientras se pone al día ...

¿Hay alguna manera de ¿Qué es lo que la tarjeta gráfica está haciendo y determinar qué es lo que mi programa le está diciendo que haga, eso está ralentizándolo, de modo que pueda intentar mejorar la velocidad de cuadros?

Respuesta

0

¿Está desarrollando para Windows? De ser así, evite usar Video para Windows ya que esto lo limitará de la manera que usted describe. Use DirectX en su lugar.

+0

Uso Direct3D y tengo una tarjeta algo poderosa, así que sé que mi código hace que funcione lento de alguna manera ... –

+0

¿Transmite video desde un archivo? ¿También está incluyendo el componente de audio? – ChrisBD

7

Para la depuración/perfiles gráficos, pruebe Nvidia PerfHUD

NVIDIA PerfHUD es una herramienta de análisis de rendimiento en tiempo real de gran alcance para las aplicaciones Direct3D.

También hay una solución ATI, llamado 'GPU PerfStudio'

GPU PerfStudio es una herramienta de análisis de rendimiento en tiempo real que ha sido diseñado para ayudar a optimizar el rendimiento de gráficos de su DirectX 9, DirectX 10 y aplicaciones OpenGL. GPU PerfStudio muestra API en tiempo real, datos de controladores y hardware que se pueden visualizar utilizando gráficos extremadamente flexibles y gráficos de barras. La aplicación que se está perfilando puede ejecutarse local o remotamente a través de la red. GPU PerfStudio permite al desarrollador anular los estados de representación clave en tiempo real para una detección rápida de cuello de botella. Se puede usar una ventana de autoanálisis para identificar problemas de rendimiento en varias etapas de la canalización de gráficos. No se necesitan controladores especiales o modificaciones de código para usar GPU PerfStudio.

Puede encontrar más información y enlaces de descarga aquí:

+0

Tengo una tarjeta ATI, ¿hay alguna posibilidad de que funcione con tarjetas ATI de alguna manera o ATI tiene algo propio? –

+0

ok gracias, lo verificaré cuando llegue a casa, ya que la página de descarga parece ser https y mi red de universidades parece no permitir https :( –

1

hay necesidad de adivinar. Solo pause it a few times en el IDE, y le mostrará exactamente lo que está esperando.

+0

¿Cómo puedo saber qué área de gráficos está causando la desaceleración? Estoy bastante seguro de que todo métodos como DrawPrimitive y Unlock, etc regresan casi al instante, con directX/GPU sticking trabajo que necesita hacer en un buffer hasta allí listo para hacerlo. Con el programa entonces tener que esperar si trato de iniciar un nuevo marco antes de que hayan vaciado el buffer y terminó de hacer los comandos que contenía? –

+0

@Lancer: La forma en que funciona es simple. Suponiendo que es más lento de lo que podría ser, eso significa que está gastando una fracción de tiempo (50% decir) en estados que podrían eliminarse. El estado consiste principalmente en el contador de programa extendido, es decir, la pila de llamadas. Por lo tanto, si muestras la pila de llamadas una vez, la probabilidad de que no la veas haciendo algo innecesario es del 50%. muestra 10 veces, la posibilidad de que no lo veas es 1/1024. Lo verá en aproximadamente el 50% de las muestras. Ahora quizás no sea tan simple como eso, pero tal vez lo sea. Buena suerte. –

+0

... Si observa cada capa de la pila de llamadas, probablemente encontrará una llamada de función que aparece en varias muestras que nunca pensó que representaría durante mucho tiempo, pero lo hace. Si puede averiguar cómo evitar hacer esa llamada, el tiempo que ahorrará se aproximará por la fracción de muestras de pila que lo contenga. Dado que informa una gran lentitud, debería ser realmente obvio. –

4

Además, echa un vistazo a este artículo en FPS:

FPS vs Frame Time

Básicamente se habla sobre el hecho de que una gota de 200fps a 190fps es insignificante, mientras que una caída de 30 fps a 20 fps es mucho más importante . Para una mejor medición del rendimiento, debe calcular el tiempo de cuadro en lugar de FPS.

Nunca nos ha dicho cuáles son sus fps o qué está haciendo el programa, por lo que su "gran caída" podría no ser un gran problema.

Para DirectX, hay PIX para perfilar las operaciones de CPU y GPU. Puede dar información muy detallada, y puede valer la pena examinarla.

Espero que ayude!

+1

"Tengo una aplicación que cae a unos 10 cuadros por segundo" Creo que 10 cuadros por segundo en una computadora bastante alta es algo para hacer una gran cosa ... –

+0

No bajó POR 10 fps. Cayó A 10 fps. Definitivamente lento – Joe

1

Puede intentar usar dxprof (buscar en google). Es una aplicación liviana que dibuja barras en tiempo real, cada barra corresponde a un evento DirectX (como draw-call o copia de recursos). Puede congelar las barras y verificar la pila de llamadas para averiguar de dónde proviene la llamada de sorteo.