Optimización guiada por perfiles para aplicaciones de escritorio

La optimización guiada por perfiles (PGO) es una técnica de optimización del compilador que utiliza datos de perfilado en tiempo de ejecución para producir código nativo más eficiente. Cuando se usa PGO, el compilador reorganiza el código en función de cómo se ejecuta realmente la aplicación, lo que da lugar a un mejor uso de la caché de instrucciones, un tamaño de código más pequeño y una ejecución más rápida.

Importante

Las aplicaciones de SDK de Aplicaciones para Windows de escritorio usan el flujo de trabajo estándar de PGO de MSVC. A diferencia de las aplicaciones para UWP, las aplicaciones de escritorio no requieren copiar pgort140.dll manualmente en el paquete de la aplicación: la biblioteca en tiempo de ejecución de PGO está disponible a través del entorno de ejecución estándar de C/C++.

Funcionamiento de PGO

PGO es un proceso de tres pasos:

  1. Instrumentar — Compile tu aplicación con la instrumentación activada. El compilador inserta sondeos que registran cómo se ejecuta el código.
  2. Perfil : ejecute la aplicación instrumentada y realice sus escenarios más importantes. Los datos de generación de perfiles se guardan en .pgc archivos.
  3. Optimizar : recompile la aplicación mediante los datos de generación de perfiles. El compilador optimiza el diseño de código, la inserción y la bifurcación en función del comportamiento real del entorno de ejecución.

Guía paso a paso

1. Configurar para lanzamiento

Establezca la configuración de la solución en Release (u otra configuración que genere código optimizado). PGO no tiene ninguna ventaja cuando se aplica a las compilaciones de depuración.

2. Habilitar optimización completa del programa

En las propiedades del proyecto, vaya a Optimización de >y compruebe que la optimización de todo el programa (/GL) está habilitada.

3. Instrumentar la compilación

Vaya a Enlazador>Optimización y establezca Generación de código en tiempo de enlace en Optimización guiada por perfiles: instrumentación (/LTCG:PGInstrument).

Cree su solución. Se genera un .pgd archivo junto con la salida de la compilación.

4. Ejecutar la aplicación y recopilar datos de perfil

Ejecute la aplicación y ejecute los escenarios que desea optimizar: inicio, navegación, procesamiento de datos o cualquier flujo de trabajo crítico para el rendimiento. Mientras se ejecuta la aplicación, use la pgosweep.exe herramienta (incluida en el conjunto de herramientas de MSVC) para recopilar datos de generación de perfiles:

pgosweep.exe MyApp.exe MyApp!Scenario1.pgc

Puede recopilar varios .pgc archivos para diferentes escenarios.

5. Combinar datos de perfil (opcional)

De forma predeterminada, todos los .pgc archivos colocados junto con el .pgd archivo se combinan automáticamente durante el paso de optimización. Para ponderar determinados escenarios de forma diferente, use la pgomgr.exe herramienta :

pgomgr.exe -merge:3 MyApp!CoreScenario.pgc MyApp.pgd

Esto da a la ejecución CoreScenario una prioridad tres veces mayor que la de otras ejecuciones.

6. Optimización de la compilación

Vuelva a Enlazador>Optimización y establezca Generación de código en tiempo de vínculo en Optimización guiada por perfiles - Optimizar (/LTCG:PGOptimize).

Reconstruya la solución. El enlazador combina automáticamente todos los .pgc archivos y genera un binario optimizado basado en los datos de generación de perfiles.

Sugerencias para PGO eficaz

  • Analiza escenarios realistas. La calidad de la optimización PGO depende de lo representativas que sean las ejecuciones de perfilado. Pon a prueba los flujos de ejecución del código que realmente usarán tus usuarios.
  • Combine varias ejecuciones. Recopila datos de perfilado de varios escenarios de uso para cubrir una amplia gama de rutas de ejecución del código.
  • Vuelva a perfilar cuando el código cambie significativamente. Los datos de perfil se vuelven obsoletos cuando se realizan cambios importantes en el código base. Vuelva a instrumentar y volver a generar perfiles periódicamente.
  • Mida el impacto. Compare el tiempo de inicio, el rendimiento y el uso de memoria antes y después de PGO para comprobar que la optimización merece la pena.