Compartir a través de


Análisis de fotogramas con capturas de GPU

Las capturas de GPU (o marco) registran todas las llamadas API de Direct3D 12 que realiza la aplicación, normalmente en un solo fotograma (consulte Captura de GPU). PIX puede reproducir esas llamadas de API para mostrar información sobre los parámetros de llamada de API, los estados de canalización y recursos, el contenido del recurso, etc.

Sugerencia

No siempre es posible que PIX tome correctamente una captura de GPU si un juego llama a Direct3D 12 de maneras no válidas. PIX hace todo lo posible para ser sólido incluso en el caso de patrones de uso incorrectos, pero esto inevitablemente es inevitablemente un caso de elementos no utilizados dentro y fuera de elementos no utilizados. Si tiene dificultades para tomar capturas de GPU, pruebe a usar la capa de depuración D3D12 y la validación basada en GPU para buscar y corregir las llamadas API incorrectas.

Tomar una captura de GPU

En la vista Conexión, inicie o conéctese al proceso deseado (asegurándose de que la opción correspondiente Para captura de GPU esté activada).

Configure las opciones de captura de GPU según sea necesario. Para tomar la captura, haga clic en el botón Tomar captura de GPU en PIX o pulse Alt+Imprimir pantalla (o F11, configurable en los ajustes de PIX). Verá una miniatura de la captura en la interfaz de usuario de PIX. En este momento, puede finalizar la aplicación si lo desea. Haga clic en la miniatura para abrir la captura.

Capturas mediante programación

Puede tomar una captura mediante programación mediante WinPixEventRuntime. Para obtener más información, consulte la entrada de blog Captura mediante programación.

Visualización de llamadas API con la vista de eventos

La vista Eventos muestra todas las llamadas API que se registraron en una captura de GPU. Hay una lista independiente para cada cola de Direct3D 12 (gráficos, proceso o copia) que usó el juego.

La lista de eventos se puede filtrar, opcionalmente mediante expresiones regulares (haga clic en el botón con la etiqueta .*). De forma predeterminada, muestra solo los eventos que dieron lugar a un trabajo de representación real para el hardware de GPU, en lugar de simplemente preparar el estado para su uso por operaciones posteriores. Para incluir eventos que no son de GPU, haga clic en el botón etiquetado !G.

Puede encontrar más información sobre cada evento, como el conjunto completo de parámetros de llamada API, en la vista Detalles del evento. Esa vista se incluye de forma predeterminada en la pestaña Canalización, pero también se puede agregar al diseño actual a través del botón Modo de diseño en la esquina superior derecha de la ventana principal de PIX.

Generación de perfiles de fotogramas

Con una captura de GPU abierta, cambie a la pestaña Información general. Aquí verá algunos detalles básicos sobre la captura.

Para iniciar la generación de perfiles, deberá recopilar datos de tiempo. Para ello, haga clic en el botón Recopilar datos de tiempo en la parte superior derecha de la vista Eventos, o haga clic en Haga clic aquí para iniciar el análisis y recopilar datos de tiempo en la vista Escala de tiempo. Esto reproduce el trabajo de GPU en la captura y recopila datos de tiempo básicos, como Duraciones de ejecución (anotadas con PixEvents, si la aplicación los tiene). Una vez finalizado, puede recopilar datos adicionales para gráficos en las carriles de escala de tiempo, como la información de ocupación y otros contadores específicos de GPU.

Sugerencia

Para obtener los mejores resultados, no interactúe con el equipo mientras PIX recopila datos de tiempo y cierre cualquier otra aplicación que pueda usar la GPU.

También puede ver los contadores desglosados por llamada API en la vista Eventos. Para habilitar o deshabilitar contadores, haga clic en el botón Contadores de lista de eventos (parte superior derecha de la vista Eventos).

Datos de tiempo

Hay dos orígenes de información de tiempo de GPU:

  1. Las marcas de tiempo de inicio de canalización informan cuando la GPU comienza a procesar cada parte de trabajo. Tenga en cuenta que estos datos solo están disponibles al ejecutar Windows 10, compilación 14393 (o superior) con un controlador de gráficos adecuado (consulte la entrada de blog Requisito). Los datos de tiempo tardan más tiempo en recopilarse si las marcas de tiempo de inicio de canalización no están disponibles.
  2. Las marcas de tiempo de fin de canalización (EOP) informan cuando la GPU ha terminado de procesar cada parte de trabajo.

Dado que las GPU son sistemas de procesamiento paralelo masivo y de canalización profunda, es habitual que se ejecute más de una tarea al mismo tiempo y que las operaciones adyacentes se solapen. PIX mide el tiempo de dos maneras diferentes que pueden ofrecer información sobre el modelo de ejecución en paralelo del hardware:

  1. La duración de la ejecución se mide desde el inicio de la canalización hasta la marca de tiempo de finalización de la canalización de cada fragmento de trabajo independiente. Cuando se mide de esta manera, los elementos de trabajo de GPU que se ejecutan en paralelo con elementos anteriores pueden aparecer más largos que si se ejecutaran de forma aislada, debido a la contención en la GPU.
  2. La duración de EOP se mide desde la marca de tiempo de finalización de canalización (EOP) del elemento anterior a la marca de tiempo de EOP de este elemento. Por lo tanto, los elementos de trabajo que se ejecutan en paralelo con elementos anteriores aparecerán más cortos que si se ejecutan de forma aislada, y algunos elementos pueden incluso notificarse como una duración cero si se completan completamente en paralelo con el elemento anterior.

La vista Escala de tiempo muestra uno o varios carriles que muestran el tiempo de cada operación de GPU. Hay un carril independiente que contiene datos de duración de EOP para cada cola (gráficos, proceso o copia) que usa el juego, además de un solo carril que muestra los datos de duración de ejecución (cuando están disponibles) combinados en todas las colas.

Información de tiempo en la vista Escala de tiempo de captura de GPU de PIX

Sugerencia

PIX en Windows no superpone actualmente el trabajo de GPU en diferentes colas mientras se analiza el tiempo en las capturas de GPU. Considere la posibilidad de tomar una captura de tiempo si desea ver datos de tiempo de proceso asincrónicos superpuestos. En Capturas de GPU, si un juego usa un proceso asincrónico para ejecutar la representación y el trabajo de proceso simultáneamente, PIX medirá primero uno y luego el otro. Esto puede dar lugar a duraciones notificadas más cortas para cada parte del trabajo en comparación con cómo se ejecutaría dentro del juego original (debido a una contención reducida en la GPU), pero un tiempo total más largo (debido a una paralelización reducida).

Contadores y ocupación de GPU

PIX expone contadores de rendimiento específicos del hardware proporcionados por IHV a través de un complemento de GPU. Estos contadores se pueden habilitar y recopilar en la vista Contadores de lista de eventos (botón para habilitar en la parte superior derecha de la vista Eventos) o en la vista Contadores de escala de tiempo (botón para habilitar en la parte superior derecha de la vista Escala de tiempo).

En algunas GPU, PIX también puede recopilar información de ocupación. Normalmente, las GPU se construyen como una jerarquía de bloques repetidos, donde cada nivel podría compartir un recurso. Por ejemplo, una GPU imaginaria podría estar estructurada como esta

Ilustración de bloque de GPU de ejemplo

Las GPU ejecutan sombreadores dividiendo el trabajo del sombreador en ondas (también se denominan distorsiones o frentes de onda). En el diagrama anterior, cada bloque azul es capaz de ejecutar una onda. Cada bloque verde podría ejecutar hasta cuatro ondas.

Como todos los bloques azules comparten un único conjunto de registros, si una carga de trabajo necesita todos los registros, solo se puede ejecutar una onda a la vez en el bloque verde. En ese caso, la ocupación del bloque verde sería 1, de una posible ocupación total de 4.

En cualquier momento, todos los bloques verdes podrían estar ejecutando un número diferente de ondas. De los cuatro bloques verdes de arriba, uno podría estar ejecutando 3 ondas, otro 2 ondas y la onda restante 1. PIX reduce todos esos datos a un único valor: la ocupación máxima, que sería 3 en este ejemplo.

Esto se presenta en PIX en el carril de Ocupación, que muestra la ocupación máxima, separada por la fase de sombreador. Es una indicación de cuánto trabajo puede realizar la GPU en paralelo: las barras superiores muestran un mejor uso de GPU.

Contadores de GPU en la vista Escala de tiempo de captura de GPU de PIX

Depuración de problemas de representación

Con una captura de GPU abierta, cambie a la pestaña Canalización. Esa pestaña contiene una vista Eventos, varias vistas de inspector de estado y de recursos y una vista de Canalización.

Al seleccionar un evento en la vista Eventos, se rellenan varias vistas, en particular la vista Canalización, que se puede usar para inspeccionar las firmas raíz y el estado de la canalización y los recursos enlazados. La vista Canalización también es el punto de entrada en la depuración del sombreador.

Sugerencia

Para realizar la mayoría de las características, deberá iniciar el análisis. El análisis es cómo PIX recopila datos de tiempo, información de estado y recursos. Hay muchas maneras de iniciar el análisis, pero la forma global es a través del botón Iniciar reproducción de análisis en la parte superior derecha de la aplicación. Asegúrese de que la GPU deseada esté seleccionada.

Visualización de objetos, parámetros y estado de Direct3D 12

Después de seleccionar un evento en la vista Eventos, las vistas Estado y Canalización (que se encuentran en la pestaña Canalización) muestran detalles del estado de Direct3D en el momento de ese evento. Allí puede ver qué recursos están enlazados a la canalización, el código del sombreador, las entradas, las salidas y los rendertargets enlazados actualmente.

Estado de canalización de Direct3D

Visualización de la salida de VS en la vista Canalización

Depuración del sombreador

Después de seleccionar un evento adecuado y ejecutar el análisis, puede depurar los sombreadores. En la vista Canalización, hay varias maneras de iniciar la depuración del sombreador:

  1. Seleccione la entrada Sombreador en la fase de sombreador deseada y haga clic en el botón de reproducción verde. Antes de iniciar la sesión de depuración, asegúrese de configurar los parámetros de sombreador adecuados (por ejemplo, identificadores de vértices y vértices para sombreadores de vértices o coordenadas de píxeles para sombreadores de píxeles).
  2. Haga clic con el botón derecho en un visor de recursos (por ejemplo, Salida de VS o SRV/UAV/RTV) y seleccione la opción de depuración adecuada.
  3. Haga clic en el botón Depurar píxeles de la vista Detalles de píxel al ver un recurso adecuado (por ejemplo, SRV/UAV/RTV).

Sugerencia

Si no puede ver el origen del sombreador al depurar, es probable que falte información de depuración. Asegúrese de que está generando los PDB de sombreador para la aplicación y de que ha configurado PIX para cargar esos PDB.

Edición y continuación del sombreador

El código del sombreador HLSL se puede editar directamente dentro de PIX, lo que le permite ver inmediatamente el efecto de los cambios en los resultados o el rendimiento de la representación. Esto puede ser útil para crear prototipos y optimizar sombreadores, ya que puede reducir considerablemente el tiempo de solución al probar ideas diferentes.

Después de seleccionar un sombreador, puede editar su código, para ello, haga clic en Editar>Aplicar. Otras vistas (como OM RTV 0) se actualizarán para mostrar el efecto del cambio. Es posible que le resulte útil acoplar más de una instancia de la vista Canalización junto a la otra para ver los resultados rendertarget al mismo tiempo que editar el código del sombreador.

Si pierde el seguimiento de lo que cambió exactamente, haga clic con el botón derecho en el código del sombreador y elija Diferencias con original.

Sugerencia

PIX en Windows aún no permite guardar sombreadores modificados en el archivo de captura.

Visualizadores de depuración

Los visualizadores Rendertarget están disponibles en la vista Canalización al inspeccionar el contenido de un rendertarget. El visualizador de imágenes predeterminado solo muestra la imagen como normal y se puede cambiar seleccionando una visualización diferente en la vista Visualización.

Historial de píxeles

Para cualquier recurso similar a píxeles (por ejemplo, RTV, UMV o búferes de profundidad), puede ver todas las operaciones que afectaron a un píxel determinado mediante el Historial de píxeles. Para acceder a él, haga clic con el botón derecho en el píxel deseado y seleccione Mostrar historial de píxeles o haga clic en el botón Historial de píxeles de la vista Detalles de píxeles.

Advertencias y notas diversas

  • No siempre es posible que PIX tome correctamente una captura de GPU si un juego llama a Direct3D 12 de maneras no válidas. PIX hace todo lo posible para ser sólido incluso en el caso de patrones de uso incorrectos, pero esto inevitablemente es inevitablemente un caso de elementos no utilizados dentro y fuera de elementos no utilizados. Si tiene dificultades para tomar capturas de GPU, pruebe a usar la capa de depuración D3D12 y la validación basada en GPU para buscar y corregir las llamadas API incorrectas.
  • Las capturas de GPU de Windows no son, en general, portátiles en diferentes versiones de hardware y controlador de GPU. En la mayoría de los casos, una captura tomada en una máquina se reproducirá correctamente en otras GPU similares de la misma familia de hardware, y las capturas de algunos juegos pueden incluso funcionar en GPU de fabricantes completamente diferentes, pero también es posible que algo tan trivial como una actualización de controladores pudiera interrumpir la compatibilidad con capturas anteriores. PIX puede garantizar que la reproducción solo se realizará correctamente cuando la GPU y el controlador sean exactamente iguales, por lo que PIX advertirá antes de iniciar el análisis si no hay una coincidencia perfecta. Continúe después de esa advertencia bajo su propio riesgo.
  • PIX tiene compatibilidad limitada con varias GPU. Siempre reproducirá las capturas de GPU en un único adaptador, independientemente del número de adaptadores que usó la aplicación. PIX permite seleccionar el adaptador de reproducción en una prestación desplegable en la barra de herramientas de PIX. PIX intentará seleccionar automáticamente el adaptador de reproducción si la aplicación solo usó un adaptador.
  • En el caso de las cargas de trabajo ExecuteIndirect no deterministas, es posible que desee habilitar la opción Usar búferes de argumentos ExecuteIndirect en tiempo de reproducción.