Creación de una compilación instrumentada
El entrenamiento con PGO se basa en una compilación del título que contiene la instrumentación de PGO. PGO usa esta instrumentación para determinar qué rutas de código se ejecutan con más frecuencia. Lo único que necesita hacer para crear una compilación instrumentada es establecer dos propiedades de compilación en Visual Studio.Para crear una compilación instrumentada
- En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y, a continuación, seleccione Propiedades.
- En el cuadro de diálogo Páginas de propiedades, expanda los nodos Propiedades de configuración y C/C++.
- Seleccione la página de propiedades Optimización y, a continuación, establezca Optimización de todo el programa en Sí (figura 1). Figura 1. Establecimiento de la propiedad Optimización de todo el programa.

- Expanda el nodo Vinculador.
- Seleccione la página de propiedades Optimización y, a continuación, establezca Generación de código en tiempo de vínculo en Optimización guiada por perfiles - Instrumentar (figura 2). Figura 2. Establecimiento de la propiedad Generación de código en tiempo de vínculo para una compilación instrumentada.
[!NOTE] Las dos propiedades descritas en este procedimiento corresponden al modificador del compilador /GLy al modificador del vinculador/LTCG:PGInstrumenten MSBuild. - Compile e implemente la compilación instrumentada en la consola XBOX One. Con el título en ejecución, puede ver que los archivos de PGO se implementan como parte del título, de forma similar a la figura 3. Figura 3. Los archivos de PGO implementados por una compilación instrumentada.

Implementación de los archivos necesarios
El Microsoft Game Development Kit (GDK) incluye tres archivos que deben implementarse con el título para usar PGO. Un archivo, denominado psapi.dll, se instala en C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin. Los otros dos, denominados pgort140.dll y pgosweep.exe, provienen de la instalación de Visual Studio. Si usa MSBuild para compilar el título, estos archivos se copian automáticamente en el directorio Layout al crear una compilación instrumentada. Si usamakefiles para compilar el título, debe agregar manualmente estos tres archivos al directorio Layout para que se implementen con el título. En Visual Studio, agregar estos archivos al proyecto y excluirlos de la compilación es una forma cómoda de conseguir que los archivos se copien en el directorio Layout y se implementen con el título.
Para agregar los archivos necesarios al proyecto de Visual Studio
- En el Explorador de soluciones, haga clic con el botón derecho en el proyecto, seleccione Agregar y, a continuación, seleccione Elemento existente (figura 4). Figura 4. Adición de los archivos de PGO a un proyecto.

- Vaya a C:\Program Files (x86)\Microsoft GDK\edition\GXDK\bin, seleccione el archivo de PGO (psapi.dll) y, a continuación, seleccione Agregar para agregar el archivo al proyecto.
- Vaya a C:\Program Files (x86)\Microsoft Visual Studio\2019\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore -o bien- C:\Program Files\Microsoft Visual Studio\2022\edition\VC\Tools\MSVC\version\bin\Hostx64\x64\onecore según su conjunto de herramientas y seleccione los archivos de PGO (pgort140.dll y pgosweep.exe). A continuación, seleccione Agregar para agregar los archivos al proyecto.
- En el Explorador de soluciones, haga clic con el botón derecho en pgort140.dll y, a continuación, seleccione Propiedades.
- En el cuadro de diálogo Páginas de propiedades, expanda el nodo Propiedades de configuración y, a continuación, seleccione la página de propiedades General.
- Establezca Excluido de la compilación en Sí y, a continuación, establezca Tipo de elemento en No participa en la compilación (figura 5). Figura 5. Exclusión de un archivo de PGO de las compilaciones.

Entrenamiento con la compilación instrumentada
El entrenamiento es la fase más importante de PGO. Las mejoras de rendimiento que obtenga con PGO son una función directa de lo bien que se entrene la aplicación. Para la fase de entrenamiento de PGO, ejercite los escenarios comunes centrados en el rendimiento con el título en ejecución. Después de ejercitar los escenarios de rendimiento comunes, inicie la recopilación de un archivo de artefacto de PGO (.pgc), que captura los datos de entrenamiento. Use pgosweep.exe para generar el archivo .pgc (figura 6). Figura 6. Ejecución de pgosweep.exe. En este ejemplo, creamos un archivo .pgc denominado Direct3DGame1!1.pgc. Al crear un archivo .pgc, normalmente usamos la convención titlename!#.pgc, donde titlename es el nombre del título en ejecución y # es 1 más el número de archivos titlename!#.pgc que haya creado anteriormente. Cada ejecución de pgosweep.exe crea un archivo .pgc independiente. Lo ideal es crear numerosos archivos .pgc que representen varios escenarios centrados en el rendimiento. Cuando termine de crear los archivos .pgc, puede verlos en el directorio D:\ de la consola (es decir, SystemScratch), de forma similar a la figura 7. Figura 7. Archivos .pgc con nombres secuenciales. A continuación, debe combinar los archivos .pgc en otro artefacto de PGO conocido como archivo .pgd. El compilador usa el archivo .pgd durante la última fase de PGO, la optimización. Antes de iniciar la optimización, copie los archivos .pgc de la consola de vuelta al equipo mediante xbcp.exe. Los archivos .pgc deben copiarse en el directorio de salida de la compilación. (En la figura 8, el directorio de salida de la compilación es C:\temp\Direct3DGame1\Gaming.Xbox.XboxOne.x64\Release.) Figura 8. Copia de los archivos .pgc en el directorio de salida de la compilación.Creación de la compilación optimizada
Para crear la compilación optimizada, establezca la propiedad Generación de código en tiempo de vínculo en Optimización guiada por perfiles - Actualizar (figura 9). Figura 9. Establecimiento de la propiedad Generación de código en tiempo de vínculo para una compilación optimizada.Esta propiedad corresponde al modificador del vinculador
/LTCG:PGOptimize en MSBuild.Recomendaciones de PGO para XBOX
Las instrucciones anteriores proporcionan información general para usar PGO en el Microsoft Game Development Kit (GDK) en XBOX mediante las propiedades de proyecto integradas de Visual Studio. Sin embargo, el compilador de Visual C++ ha dejado en desuso el uso de PGO a través de los modificadores/LTCG:PGInstrument, /LTCG:PGOptimize y /LTCG:PGUpdate, que son los que controlan las propiedades de proyecto de Visual Studio en Visual Studio 2019 y Visual Studio 2022.
Los reemplazos preferidos son los siguientes.
- Para el compilador de C/C++, use
/GL(propiedad Optimización de todo el programa establecida en Sí (/GL), como se mostró anteriormente en la figura 1). - Para el vinculador, use
/LTCG(propiedad Generación de código en tiempo de vínculo establecida en Usar generación de código en tiempo de vínculo (/LTCG), como se muestra en la figura 11). Figura 11. Establecimiento de la propiedad Generación de código en tiempo de vínculo.
/FASTGENPROFILEo/GENPROFILEpara generar un perfil de PGO (figura 12). Para obtener más información sobre estos modificadores, consulte /GENPROFILE, /FASTGENPROFILE (Generar compilación instrumentada para generación de perfiles) en Microsoft Docs. Figura 12. Establecimiento del modificador del vinculador para generar un perfil de PGO.
/USEPROFILEpara optimizar según un conjunto de perfiles de PGO (figura 13). Para obtener más información sobre este modificador, consulte /USEPROFILE (Ejecutar PGO en modo seguro para subprocesos) en Microsoft Docs. Figura 13. Establecimiento del modificador del vinculador para optimizar según un conjunto de perfiles de PGO.
Solución de problemas de PGO
Rendimiento en tiempo de ejecución
Al generar el perfil de una compilación instrumentada, las herramientas pueden causar problemas de rendimiento. Estos problemas pueden hacer que el título sea difícil de controlar. El modificador/FASTGENPROFILE es una buena opción para hacer que una compilación instrumentada sea más rápida al generar perfiles de sesiones de juego interactivas.
Dependencias
Si habilita la instrumentación de PGO y luego descubre que el título ya no se carga, compruebe que pgort140.dll y vcruntime140.dll estén en la misma carpeta que el archivo .exe del título. Si el intento de ejecutar pgosweep.exe produce un error (normalmente con un error STATUS_DLL_NOT_FOUND), compruebe que pgort140.dll, psapi.dll y vcruntime140.dll estén presentes en la misma carpeta que el archivo .exe del título. Asegúrese también de que está usando la versión x64 onecore de pgort140.dll y pgosweep.exe.Uso de memoria
PGO usa memoria para capturar el perfil, lo que puede ser un desafío para un título que usa una parte significativa de la memoria disponible. Para realizar PGO correctamente, es posible que necesite usar la configuración ExtraTitleMemory en xbconfig.exe, la función XMemTransferMemory, o ambas. Usar/FASTGENPROFILE en lugar de /LTCG:PGInstrument o /GENPROFILE produce una superficie de memoria menor con un resultado similar.
[!NOTE] La versión de PGO que se incluye en el GDK de junio de 2020 (y sus QFE) usa memoria del título. PGO se actualizará para usar correctamente la memoria de herramientas en una versión futura.
