2011-04-22 23 views
8

Mi aplicación está en funcionamiento y ahora estoy buscando mejorar el rendimiento de la representación. Usando 'Instrumentos', he recogido algunos datos. Estoy trabajando con un viejo iPhone 3G como el peor de los casos.Descripción del Perfil de OpenGL para iPhone

Tiempo Profiler:

-30% CopyVertexElementsMultipleSequential 
-11% mach_msg_trap 
-4%  _semwait_signal 
-2%  ValidateState 

Sin embargo, utilizando el controlador Open GL ES, el sampler lee:

-70% _semwait_signal 
-24% CopyVertexElementsMultipleSequential 
-0.7% mach_msg_trap 

hurgando los documentos que no he sido capaz de llegar con lo cual es la diferencia entre OpenGL ES Sampler y Timer Profiler. ¿Alguien puede iluminarme?

Respuesta

11

Primero, eso es solo el instrumento Sampler que estás viendo. La plantilla de OpenGL ES Driver solo incluye el instrumento Sampler junto con el controlador OpenGL ES Driver. No tiene nada especial que ver con OpenGL ES.

El instrumento Sampler y el Time Profiler difieren en la forma en que recopilan datos. Desde el Instruments User Guide:

instrumento El Tiempo de perfiles y el instrumento Sampler son similares, pero hay algunas diferencias:

  • Tiempo de perfiles recopila datos backtrace de la misma manera como Tiburón, desde espacio del kernel Sampler, en la otra mano , recopila datos del espacio de usuario. En consecuencia, Time Profiler es más eficiente que Sampler en la recopilación de datos .

  • Nota: Tiempo de perfiles (y tiburón) puede producir datos inexactos backtrace si el proceso objetivo está optimizado para omitir punteros de marco.

  • Time Profiler puede recopilar datos de uno o todos los procesos. Sampler puede solo muestrear un solo proceso.

  • Time Profiler puede muestrear todos los estados de hilos o hilos de ejecución solamente. La muestra siempre muestrea todos los estados de de subprocesos. Generalmente, está interesado en ejecutar subprocesos. Cuando su aplicación está colgada, desea examinar todos los estados de subprocesos.

Yo prefiero usar Tiempo Profiler mismo, con la minería de datos apropiada como cobrar las bibliotecas o los métodos a sus interlocutores.

En lo que respecta al perfilado de una aplicación OpenGL ES, primero deberá consultar las diversas estadísticas que puede habilitar en el instrumento OpenGL ES Driver. Haga clic en i a la derecha del nombre del instrumento para que aparezca una ventana emergente, luego haga clic en Configurar para mostrar una lista de posibles estadísticas que puede registrar. En particular, mira las estadísticas Utilización de terrarios y Utilización de Renderizado. Habilite los que desee, regrese a la pantalla anterior y haga clic en las casillas de verificación para asegurarse de que estén registrados.

Si su aplicación maxes out the Tiler Utilization stat, está siendo limitado por el tamaño de su geometría. Haz lo que puedas para reducir eso (usando algunos de los consejos que menciono here) y verás un aumento significativo en el rendimiento. Por otro lado, si está alcanzando un Máximo de utilización del procesador, tiene un límite de capacidad de relleno y es posible que deba apagar el MSAA, sintonizar los sombreadores de fragmentos (si está en OpenGL ES 2.0) o reducir el tamaño del área. estás renderizando, entre otras cosas.

Más allá de eso, ejecute su aplicación en un dispositivo con iOS 4.0 y use el nuevo instrumento OpenGL ES Analyzer que viene con Xcode 4. Ese instrumento es ideal para sugerir puntos de acceso en su código de representación, o rendimiento desperdiciado de llamadas de estado redundantes , etc.

Al ver sus datos de seguimiento específicos, parece que está gastando muchísimo tiempo copiando geometría a la GPU. Me gustaría ver el uso de un objeto de búfer vértice (VBO) para reducir significativamente eso.

+0

Awesome answer +1 – Till

+0

Gracias por la respuesta. Ya ha ayudado mucho. Tenía otra pregunta, pero NEVERMIND :) – TurqMage

Cuestiones relacionadas