Cómo configurar la optimización guiada por perfil en Visual Studio

La compatibilidad con la optimización guiada por perfil se introdujo en la versión 22.2.71 de AGDE.

Ubica la configuración de la PGO

Abre la configuración del proyecto desde Solution Explorer.

Menú de propiedades de Solution Explorer de Visual Studio para el proyecto actual

Figura 1: Ventana del Solution Explorer de Visual Studio

Asegúrate de que tu plataforma esté establecida en una configuración de Android (por ejemplo, Android-arm64-v8a).

En el panel izquierdo, selecciona Configuration Properties > General. Busca el grupo de propiedades llamado PGO.

El diálogo "Project properties" muestra las propiedades generales y la configuración de la PGO destacada

Figura 2: Diálogo "Project properties"

Cómo habilitar compilaciones instrumentadas de PGO en el proyecto

Agrega una nueva configuración a tu proyecto llamada Instrumented. Este proceso se basa en la configuración que usas durante el desarrollo para las pruebas, que debería ser tu compilación tradicional optimizada (también puedes tener funciones de depuración adicionales habilitadas siempre que conserves la configuración de optimización del compilador).

Haz clic en Configuration Manager… en el diálogo "Property page".

Parte superior del diálogo "Property page", en la que se muestran los menús desplegables Active Solution Configuration y Platform, y el botón Configuration Manager

Figura 3: Diálogo "Configuration Manager"

En el cuadro de diálogo "Configuration Manager", selecciona la lista desplegable Active solution configuration y elige <New…>.

Cuadro de diálogo &quot;Configuration Manager&quot;, con el menú desplegable &quot;Active Solution Configuration&quot; abierto y la opción &quot;New&quot; destacada

Figura 4: Creación de una nueva configuración de compilación

Crea una nueva configuración instrumentada de PGO.

Diálogo &quot;New Solution Configuration&quot;, donde se crea una nueva configuración de compilación instrumentada de PGO según la configuración de compilación existente de lanzamiento

Figura 5: Diálogo "New Solution Configuration"

Si quieres habilitar la compilación en modo de instrumentación de PGO, de modo que puedas generar un perfil para tu juego, selecciona Instrumented en la lista de opciones de Profile-Guided Optimization Mode.

Cuadro de diálogo &quot;Project Properties&quot;, abierto en &quot;General settings&quot;, que muestra la configuración de la PGO, y el modo de &quot;Profile Guided Optimization&quot; configurado como &quot;Instrumented&quot;

Figura 6: Diálogo "Project Properties", en el que se destaca la configuración de PGO

En la opción Profile Guided Optimization Profiles, ingresa la ruta de acceso a la carpeta en la que se escribirá el archivo de datos de perfil de salida sin procesar en tu dispositivo Android. Por lo general, este valor debe ser similar a /data/data/<package name>/cache/, en el que <package name> es el nombre completo del paquete del APK, por ejemplo, com.google.sample.tunnel.

Para obtener información más detallada sobre su funcionamiento, consulta la documentación de Clang.

Cómo escribir en tu dispositivo datos de perfiles instrumentados con PGO

Los datos de la PGO suelen escribirse en el dispositivo con el sistema de instrumentación de PGO cuando finaliza un proceso. En Android, las apps no se cierran, siempre finalizan. Esto significa que la función predeterminada de escritura en el disco nunca se activa, lo que requiere que tu app escriba datos de PGO de forma manual.

Tu app debe llamar explícitamente a __llvm_profile_write_file para escribir los datos del perfil. Este símbolo solo está disponible cuando se crea una compilación instrumentada con PGO. Para facilitar este proceso, te recomendamos que uses el siguiente patrón cuando declares __llvm_profile_write_file.

#ifdef PGO_INSTRUMENT
extern "C" int __llvm_profile_write_file(void);
#else
extern "C" int __llvm_profile_write_file(void) { return 0; }
#endif

Si llamas a esta función, se escriben los datos del perfil en la carpeta que especificaste con anterioridad.

Cómo ejecutar un perfil

Para generar el perfil, debes ejecutar tu APK compilado con la instrumentación de PGO en el dispositivo de destino. Una vez que hayas probado el código de manera satisfactoria y hayas activado la llamada a la función __llvm_profile_write_file, tu app escribirá los datos de perfil en el almacenamiento.

En este punto, vuelve a copiar los perfiles del dispositivo para que los use el compilador.

Cómo preparar los datos del perfil para que los use el compilador

Cuando se usa de forma aislada, la herramienta de línea de comandos llvm-profdata que se envía como parte de Clang/LLVM en el NDK de Android se usa para preparar archivos de datos de perfil con el objetivo de que los use el compilador durante la optimización guiada por perfil de una compilación.

AGDE realiza este paso automáticamente por medio de la combinación de cualquier archivo de datos de perfil que hayas agregado a tu proyecto y el consumo de estos cuando la configuración del modo de optimización guiada por el perfil en las páginas de propiedades del proyecto esté establecido como optimizado.

Cómo compilar tu proyecto con la optimización guiada por perfil habilitada

Ahora que capturaste tus perfiles y los agregaste a tu proyecto, el compilador puede usar esos datos para ajustar la optimización de la compilación.

Crea una configuración de proyecto nueva para tu compilación optimizada para PGO de modo que solo realices compilaciones en este modo cuando sea necesario.

Diálogo &quot;New Solution Configuration&quot; que crea una configuración de compilación basada en la compilación de lanzamiento, pero esta vez con &quot;optimizada para PGO&quot; como el nombre de la configuración de compilación nueva

Figura 7: Creación de una nueva configuración de compilación optimizada para PGO

Establece la configuración de Profile-Guided Optimization Mode en las páginas de propiedades del proyecto como Optimized.

El cuadro de diálogo &quot;Project Properties&quot;, abierto a la configuración general, con la configuración de PGO, y el modo de optimización guiada por perfil establecido en &quot;Optimized&quot;

Figura 8: Configuración del modo de optimización de PGO en "Optimized"

Copia los archivos del dispositivo y agrégalos a tu proyecto en el Solution Explorer. El compilador recogerá estos archivos de datos de perfil la próxima vez que compiles tu configuración optimizada para PGO y los usará para ajustar la forma en que el compilador optimiza tu código.

Puedes copiar los archivos de datos de perfil en tu proyecto desde el dispositivo con ADB o con el explorador de dispositivos Android.

Usa la optimización guiada por el perfil fuera de AGDE

Si usas un sistema de compilación que no es compatible con AGDE, es posible que debas editar tu compilación directamente. La documentación de Clang abarca los interruptores necesarios: -fprofile-generate y -fprofile-use.

Si usas un motor de middleware para tu juego, consulta la documentación de tu motor para ver cómo habilitar la PGO (si es compatible).