Tutorial: Utilizar optimizaciones guiadas por perfil

Este tutorial muestra cómo utilizar la optimización guiada por perfileses (PGO, Profile-Guided Optimization) para diversos escenarios, que varían de implementaciones sencillas en las que se utilizan menús de generación de PGO en el entorno de desarrollo integrado (IDE) de Visual Studio a escenarios más avanzados que requieren configuraciones personalizadas. En el tutorial también se describen técnicas avanzadas que permiten utilizar herramientas de línea de comandos de PGO para personalizar el proceso de obtención y combinación de los datos de perfiles. Para obtener información general, vea Optimizaciones guiadas por perfiles.

Generar una aplicación con PGO

Este escenario de ejemplo muestra cómo generar una aplicación sencilla mediante PGO.

Generar con PGO en el IDE

Las optimizaciones basadas en perfiles se pueden aplicar en cualquier proyecto de Visual C++ nativo. Los procedimientos siguientes ilustran el uso de PGO con una aplicación Win32.

Para crear un proyecto Win32

  1. En el menú Archivo, seleccione Nuevo y, a continuación, elija Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  2. En el panel Tipos de proyecto, seleccione el nodo Visual C++ y, a continuación, en el panel Plantillas, seleccione Proyecto Win32.

  3. En el cuadro Nombre, escriba PGODemo.

  4. Haga clic en el botón Aceptar. Aparecerá el Asistente para aplicaciones Win32.

  5. Mantenga todos los valores de configuración predeterminados. Haga clic en el botón Finalizar.

Para generar el proyecto PGODemo con PGO

  1. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuración de solución y elija la configuración Liberación.

  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo del proyecto PGODemo. En el menú contextual del proyecto, seleccione Optimización guiada por perfileses y, a continuación, seleccione el elemento de menú Instrumentar.

  3. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo del proyecto PGODemo. En el menú contextual del proyecto, seleccione Optimización guiada por perfileses y, a continuación, Ejecutar aplicación instrumentada u optimizada para iniciar su aplicación.

    Nota

    También puede iniciar la aplicación instrumentada seleccionando Iniciar o Iniciar sin depurar en el menú Depurar.

  4. Repita el paso 3, para probar la aplicación instrumentada con escenarios diferentes. Cuando se cierra una aplicación instrumentada, se crea un archivo .PGC en el directorio de resultados del proyecto, que contiene los datos del perfil correspondientes a esa ejecución.

  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el nodo del proyecto PGODemo. En el menú contextual del proyecto, seleccione Optimización guiada por perfileses y, a continuación, Optimizar.

Generar con PGO en la línea de comandos

Suponga que desea generar una aplicación myapp.exe a partir de los archivos de código fuente S1, ..., Sn, utilizando la optimización PGO. El primer paso es asegurarse de que compila los archivos de código fuente S1, ..., Sn utilizando la opción del compilador /GL.

También hay que especificar las opciones de optimización adecuadas a sus necesidades, por ejemplo, supongamos que elige la opción /O2. Cabe mencionar que la compilación de una aplicación con PGO y sin opciones de optimización, es decir, mediante /Od, activará una advertencia y provocará que el compilador pase automáticamente a usar la opción LTCG de optimización completa. Desde la línea de comandos, el primer paso sería el siguiente:

Para compilar los archivos de código fuente con /GL

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

En el paso 2 se crea un archivo myapp.exe de imagen instrumentada con PGO y otro denominado myapp.pgd, que es el de la base de datos de perfiles que usará el compilador para compilar la aplicación myapp.exe final optimizada. El nombre predeterminado del archivo .pgd es el de la aplicación y la ruta de acceso predeterminada es la de resultados.

Puede utilizar la opción del vinculador /pgd en el paso anterior para cambiar el nombre predeterminado del archivo .pgd generado para la aplicación. Para utilizar /pgd de la siguiente forma:

Para crear una imagen instrumentada con /LTCG:PGI y /PGD

  • link /ltcg:pgi /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe

Ahora ya puede probar la aplicación myapp.exe instrumentada con sus escenarios de generación de perfiles. Cuando haya terminado de ejecutar los escenarios, observará que se ha creado un archivo .pgc por cada ejecución.

Nota

Si ejecuta más de una imagen de myapp.exe desde la misma ruta simultáneamente, sólo se creará un archivo .pgc para todas ellas y este archivo no se escribirá en el disco hasta que se hayan cerrado el resto de las instancias.

Nota

La ruta de acceso predeterminada para los archivos .pgc es la ruta del archivo ejecutable.Para cambiarla, puede configurar la variable de entorno VCPROFILE_PATH antes de ejecutar los escenarios de generación de perfiles,es decir,configurar VCPROFILE_PATH=<ruta de acceso> y, a continuación, ejecutar la imagen instrumentada myapp.exe.

Ahora ya puede generar el archivo myapp.exe optimizado mediante PGO.

Para crear una imagen optimizada con /LTCG:PGO y /PGD

  • link /ltcg:pgo /pgd:mypgd.pgd S1.obj … Sn.obj /out:myapp.exe

Nota

Antes del paso 1, es necesario haber creado todos los archivos .PGC durante el escenario de aprendizaje en la misma carpeta que el archivo de base de datos de perfiles (.PGD).

Combinación de datos de perfil personalizada

Supongamos que se dispone de dos escenarios de cliente principales para la aplicación. El primer escenario tiene el doble de importancia que el segundo (o los clientes lo llevan a cabo con más frecuencia).

En los siguientes pasos, aprenderá a utilizar el entorno de desarrollo de Visual Studio y las herramientas de línea de comandos para asignar mayor peso a algunos datos de perfil al combinarlos en el archivo .PGD.

Combinar datos de perfil en el IDE

Para crear un proyecto Win32

  1. En el menú Archivo, seleccione Nuevo y, a continuación, elija Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  2. En el panel Tipos de proyecto, seleccione el nodo Visual C++ y, a continuación, en el panel Plantillas, seleccione Proyecto Win32.

  3. En el cuadro Nombre, escriba PGODemo.

  4. Haga clic en el botón Aceptar. Aparecerá el Asistente para aplicaciones Win32.

  5. Mantenga todos los valores de configuración predeterminados. Haga clic en el botón Finalizar.

Para generar un proyecto PGODemo con datos de perfil combinados en el IDE

  1. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuración de solución y elija la configuración Liberación.

  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, en Instrumentar.

  3. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, en Ejecutar aplicación instrumentada. Así, se iniciará la aplicación. Observe que también puede iniciar la aplicación instrumentada utilizando Iniciar o Iniciar sin depurar en el menú Depurar, de la forma habitual.

  4. Repita el paso 3 dos veces, una para cada uno de los escenarios de cliente. Este paso creará dos archivos .PGC en el directorio de salida: PGODemo!1.pgc y PGODemo!2.pgc.

  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Propiedades. Aparecerá el cuadro de diálogo de páginas de propiedades de PGODemo.

  6. En Propiedades de configuración, haga clic en Eventos de compilación y, a continuación, en Evento anterior a la vinculación. En la línea de comandos, escriba el siguiente comando:

    "$(VCInstallDir)bin\pgomgr.exe" -merge:2 $(OutDir)\$(ProjectName)!1.pgc $(OutDir)\$(ProjectName).pgd

    Nota

    En este paso, se utilizará pgomgr.exe para combinar PGODemo!1.pgc en un paso independiente antes de iniciar el vinculador para generar la aplicación optimizada final.El vinculador llamará de nuevo a pgomgr.exe durante el paso siguiente para combinar el archivo PGODemo!2.pgc, pero con el peso predeterminado de 1.

  7. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Optimizar.

Combinar datos de perfil desde la línea de comandos

Puede utilizar las herramientas de línea de comandos para realizar combinaciones de datos de perfil personalizadas como se indica a continuación.

Para generar un perfil combinado desde la línea de comandos

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    Los dos pasos anteriores crearán la aplicación myapp.exe instrumentada.

  3. Si se prueba la aplicación myapp.exe instrumentada utilizando dos escenarios diferentes, se crearán dos archivos .PGC diferentes: myapp!1.pgc y myapp!2.pgc.

    Para dar al primer escenario un peso mayor, utilice la aplicación pgomgr.exe como se indica a continuación:

    Pgomgr –merge:2 myapp!1.pgc myapp.pgd

  4. Ejecute el comando de vínculo para crear la aplicación optimizada final como se indica a continuación.

    link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    Así, se combinará myapp!2.pgc con el peso predeterminado de 1.

Actualización de PGO

En los dos escenarios anteriores, utilizamos la opción /ltcg:pgo del vinculador para generar la aplicación final optimizada después de generar y probar la instrumentada. Cuando se utiliza la opción /ltcg:pgo, el vinculador efectúa algunas comprobaciones para asegurarse de que no se han producido cambios en los archivos de entrada (archivos objeto, bibliotecas, etc.) usados para generar la aplicación instrumentada. Dicho de otro modo, para utilizar /ltcg:pgo, todos los archivos de entrada que se pasan al vinculador deben ser los mismos que los utilizados en el paso en que se usó la opción /ltcg:pgi.

Esto se debe a que los cambios involuntarios en los orígenes después de crear la aplicación instrumentada y el archivo .PGD pueden afectar considerablemente a la generación de código PGO y a las decisiones de optimización.

Supongamos que, después de generar la aplicación instrumentada, crear los datos de perfil y generar la aplicación optimizada mediante PGO, nos damos cuenta de que hemos olvidado actualizar el número de versión de la aplicación, o detectamos un error trivial que requiere una corrección muy pequeña que no afecta en gran medida al flujo de la aplicación. Para este caso, tenemos la opción /ltcg:pgu. Con esta opción, el vinculador no realizará las comprobaciones que hace al utilizar la opción /ltcg:pgo. Se pueden editar y volver a compilar los archivos o incluso agregar nuevos archivos a la aplicación entre generaciones de PGI y PGU.

En los siguientes pasos, aprenderá a utilizar el entorno de desarrollo de Visual Studio y las herramientas de línea de comandos para usar la opción /ltcg:pgu.

Actualizar en el IDE

Para generar PGODemo con /LTCG:PGU en el IDE

  1. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuración de solución y elija la configuración Liberación.

  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Instrumento.

  3. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Ejecutar aplicación instrumentada u optimizada. Así, se iniciará la aplicación. Observe que también puede iniciar la aplicación instrumentada de la forma habitual mediante las opciones Iniciar o Iniciar sin depurar del menú Depurar.

  4. En este paso, puede aplicar cualquier cambio a cualquier archivo de código fuente. Como se mencionó previamente, los cambios que afectan considerablemente al comportamiento de la aplicación pueden producir reducciones importantes en el rendimiento. En general, se realizarían cambios mínimos, como pequeñas correcciones de errores o cambios en los archivos de recursos.

  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Actualizar. De este modo, se volverán a compilar únicamente los archivos en que se hayan producido cambios desde la compilación anterior y, a continuación, se iniciará el vinculador con la opción /ltcg:pgu en lugar de /ltcg:pgo, permitiendo así los archivos modificados.

    Nota

    Recibirá advertencias por cada función nueva que no disponga de datos de perfil y cada función modificada de modo que haga perder la validez de los datos de perfil obtenidos durante el paso de aprendizaje.En la barra de herramientas estándar, haga clic en el cuadro combinado Configuración de solución y elija la configuración Liberación.

    Nota

    En el paso 5, si hace clic con el botón secundario del mouse en el archivo de código fuente de los cambios en el Explorador de soluciones y hace clic en Compilar, eliminará todos los archivos relacionados con PGO en la carpeta de salida porque el sistema del proyecto realiza una compilación limpia al cambiar de generación mediante PGO a generación normal.

Actualizar en la línea de comandos

Para utilizar las herramientas de la línea de comandos con el fin de realizar la actualización de PGO, siga estos pasos.

Para generar con /LTCG:PGU en la línea de comandos

  1. cl.exe /c /GL /O2 S1.cpp … Sn.cpp

  2. link /ltcg:pgi S1.obj … Sn.obj /out:myapp.exe

    Los dos pasos anteriores crearán la aplicación myapp.exe instrumentada.

  3. Pruebe la aplicación myapp.exe instrumentada

  4. link /ltcg:pgo /pgd:myapp.pgd /out:myapp.exe

    En el paso 4, se creará la aplicación myapp.exe optimizada. Suponga que observa un pequeño error en Sm.cpp. Puede aplicar las correcciones y compilar solo Sm.cpp como se indica a continuación.

  5. cl /c /GL /O2 Sm.cpp

    Después, utilice la opción /ltcg:pgu para generar la aplicación optimizada con los datos de perfil anteriores, creados en el paso 3.

  6. link /ltcg:pgu /pgd:myapp.pgd /out:myapp.exe

Configuraciones de PGO personalizadas

En este escenario, aprenderá a crear configuraciones de PGO personalizadas para generar soluciones con varios proyectos. En este escenario, vamos a agregar un archivo DLL a la solución y a vincularlo a la aplicación PGODemo. Vamos a crear dos configuraciones: PGIRelease y PGORelease, y a usarlas para generar la solución completa, en lugar de utilizar los elementos del menú Optimización guiada por perfileses con el fin de generar producto por producto.

Para crear configuraciones de PGO personalizadas

  1. En el menú Archivo, seleccione Nuevo y, a continuación, elija Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  2. En el panel Tipos de proyecto, seleccione el nodo Visual C++ y, a continuación, en el panel Plantillas, seleccione Proyecto Win32.

  3. En el cuadro Nombre, escriba PGODemo.

  4. Haga clic en el botón Aceptar. Aparecerá el Asistente para aplicaciones Win32.

  5. Mantenga todos los valores de configuración predeterminados. Haga clic en el botón Finalizar.

    Ahora tiene una solución y un proyecto denominados PGODemo. A continuación, cree un proyecto de archivo DLL.

  6. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la solución y seleccione Agregar. Y, a continuación, haga clic en Nuevo proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  7. En el panel Tipos de proyecto, seleccione el nodo Visual C++ y, a continuación, en el panel Plantillas, seleccione Proyecto Win32.

  8. En el cuadro Nombre, escriba PGODemoDLL.

  9. Haga clic en el botón Aceptar. Aparecerá el Asistente para aplicaciones Win32.

  10. En la página Configuración de la aplicación, elija el tipo Tipo de archivo DLL y haga clic en Finalizar.

    Ahora tiene un proyecto de archivo DLL denominado PGODemoDLL.

  11. En el Explorador de soluciones, haga doble clic en el proyecto PGODemoDLL, luego en PGODemoDLL.cpp y agregue el código siguiente:

    __declspec(dllexport) void HelloMessage(void)
    {
       MessageBox(NULL, L"hello", L"PGODemoDLL", MB_OK);
    }
    
  12. En el Explorador de soluciones, haga doble clic en el proyecto PGODemo, luego en PGODemo.cpp y agregue la declaración siguiente delante de la definición de la función _tWinMain:

    __declspec(dllimport) void HelloMessage(void);
    
  13. En _tWinMain, agregue el código siguiente antes del bucle principal de mensajes:

    HelloMessage();
    
  14. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la solución PDODemo y haga clic en Dependencias del proyecto. Aparecerá el cuadro de diálogo Dependencias del proyecto.

  15. En la página Dependencias, elija PGODemo en el cuadro combinado Proyectos. Seleccione PGODemoDLL en la lista Depende de.

    A continuación, va a crear las configuraciones PGIRelease y PGORelease.

  16. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la solución y haga clic en Administrador de configuración. Haga clic en el cuadro combinado Configuración correspondiente al proyecto PGODemo y haga clic en <Nueva...>. Aparecerá el cuadro de diálogo de configuración del nuevo proyecto.

    En el cuadro de edición del nombre de la configuración del proyecto, escriba PGIRelease y elija Liberar en el cuadro combinado Copiar configuración de. Compruebe que esté activada la casilla Crear nueva configuración de solución.

    Repita el mismo paso en el proyecto PGODemoDLL, así como para agregar la configuración PGIRelease a este proyecto. Compruebe que la casilla Crear nueva configuración de solución no esté activada en esta ocasión.

  17. Repita el paso 16 para ambos proyectos, para crear la configuración PGORelease. Asegúrese de que también se copian los valores de la configuración de Liberar. Cierre el cuadro de diálogo Administrador de configuración.

    Ya hemos creado dos configuraciones: PGIRelease y PGORelease.

  18. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo y, a continuación, haga clic en Propiedades. En el cuadro combinado Configuración, elija la configuración PGIRelease. En Propiedades de configuración, haga clic en General. Haga clic en el cuadro combinado Optimización del todo el programa y elija la opción Optimización guiada por perfileses - Instrumento. Haga clic en Aplicar para guardar los cambios.

  19. En el cuadro combinado Configuración, elija la configuración PGORelease. En Propiedades de configuración, haga clic en General. Haga clic en el cuadro combinado Optimización del todo el programa y elija la opción Optimización guiada por perfileses - Optimizar. Haga clic en Aplicar para guardar los cambios.

  20. Repita los pasos 18 y 19 en las configuraciones PGIRelease y PGORelease para el proyecto PGODemoDLL.

    Ahora, vamos a cambiar de Directorio intermedio para que la configuración PGORelease sea la misma que la del directorio Resultados correspondiente a la configuración PGIRelease de ambos proyectos.

  21. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo y, a continuación, haga clic en Propiedades. En el cuadro combinado Configuración, elija la configuración PGORelease. En las propiedades de Configuración, haga clic en General. En el Directorio Intermedio, escriba $(SolutionDir)PGIRelease. Haga clic en Aplicar y cierre el cuadro de diálogo.

  22. Repita el paso 21 para el proyecto PGODemoDLL.

    A continuación, vamos a agregar la ruta de acceso de PGODemoDLL.dll a la variable de entorno de la ruta de acceso de la aplicación PGODemo.

  23. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo y, a continuación, haga clic en Propiedades. En el cuadro combinado Configuración, elija la configuración PGIRelease. En Propiedades de configuración, haga clic en Depuración. En el Entorno, escriba lo siguiente y, a continuación, haga clic en Aplicar:

    path=%path%;$(SolutionDir)PGODemoDLL\PGIRelease

    En el cuadro combinado Configuración, elija la configuración PGORelease. En las propiedades de Configuración, haga clic en Depuración. En el cuadro Entorno, escriba lo siguiente:

    path=%path%;$(SolutionDir)PGODemoDLL\PGORelease

    A continuación, haga clic en Aplicar y luego en Aceptar para cerrar el cuadro de diálogo.

  24. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo y, a continuación, haga clic en Propiedades. En el cuadro combinado Configuración, elija la configuración PGORelease. En Propiedades de configuración, haga clic en Vinculador y, a continuación, en Optimización. En el cuadro de edición Base de datos guiada por perfileses, reemplace $(TargetDir) por $(IntDir)\.

    Repita este paso para el proyecto PGODemoDLL.

  25. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemoDLL y, a continuación, haga clic en Propiedades. En el cuadro combinado Configuración, elija la configuración PGORelease. En Propiedades de configuración, haga clic en Vinculador y, a continuación, en Avanzadas. En el cuadro de edición Biblioteca de importación, reemplace $(TargetDir) por $(IntDir)\.

  26. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuraciones de soluciones y elija la configuración PGIRelease. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la solución y haga clic en Generar solución.

    De esta forma, se generarán los bits instrumentados de ambos proyectos.

  27. Haga clic en el menú Depurar y, a continuación, en Iniciar depuración o Iniciar sin depurar. Así se iniciará PGODemo. Cuando se cierre la aplicación, se crearán dos archivos .PGC, uno en cada una de las dos carpetas de salida PGODemo\PGIRelease y PGODemoDLL\PGIRelease.

  28. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuraciones de soluciones y elija la configuración PGORelease. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la solución y haga clic en Generar solución.

    Ahora tiene imágenes optimizadas mediante PGO en las carpetas de la configuración PGORelease de ambos proyectos.

Recolección de datos de perfil personalizada

El comportamiento predeterminado para la recolección de datos de perfil es guardar todos los datos que describan el comportamiento de la aplicación instrumentada desde que se inicia hasta que se cierra. PGO incluye una herramienta denominada PGOSWEEP que ayuda a personalizar la recolección de datos de perfil. Puede utilizar PGOSWEEP para obtener los datos del perfil para algún intervalo de tiempo concreto durante la ejecución de un escenario del perfil.

En los siguientes pasos, aprenderá a utilizar el entorno de desarrollo de Visual Studio y las herramientas de línea de comandos para controlar la recolección de datos de perfil.

Para crear un proyecto Win32

  1. En el menú Archivo, seleccione Nuevo y, a continuación, elija Proyecto. Aparecerá el cuadro de diálogo Nuevo proyecto.

  2. En el panel Tipos de proyecto, seleccione el nodo Proyectos de Visual C++ y, en el panel Plantillas, seleccione Proyecto Win32.

  3. En el cuadro Nombre, escriba PGODemo.

  4. Haga clic en el botón Aceptar. Aparecerá el Asistente para aplicaciones Win32.

  5. Mantenga todos los valores de configuración predeterminados. Haga clic en el botón Finalizar.

Para generar un proyecto PGODemo instrumentado en el IDE

  1. En la barra de herramientas estándar, haga clic en el cuadro combinado Configuración de solución y elija la configuración Liberación.

  2. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Instrumento.

  3. En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto PGODemo. Haga clic en Optimización guiada por perfileses en el menú contextual y, a continuación, haga clic en Ejecutar aplicación instrumentada u optimizada. Así, se iniciará la aplicación. Observe que también puede iniciar la aplicación instrumentada mediante las opciones Iniciar depuración o Iniciar sin depurar del menú Depurar de la forma habitual.

  4. En el menú Herramientas, haga clic en Herramientas externas. Aparece el cuadro de diálogo Herramientas externas. Haga clic en Agregar. En el cuadro de edición Título, escriba Pgosweep. Haga clic en el botón Examinar situado junto al cuadro de edición Comando y busque la ruta de acceso a la herramienta PGOSWEEP. PGOSWEEP debería estar instalada en la carpeta …\VC\bin donde se instaló Visual Studio. Active la casilla Solicitar argumentos y, a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo Herramientas externas.

  5. En el menú Herramientas, haga clic en Pgosweep. Aparecerá un cuadro de diálogo. En el cuadro de edición Argumentos, escriba:

    $(TargetPath) $(TargetDir)$(TargetName)_custom!1.pgc
    

    y haga clic en Aceptar.

  6. En la ventana principal de PGODemo, haga clic en Archivo y en Salir para finalizar la ejecución del proceso de recolección de datos de perfil.

  7. Ahora, si examina $(OutDir), encontrará dos archivos .PGC. PGODemo_custom!1.pgc es el que se creó mediante PGOSWEEP y contiene datos de perfil desde el inicio de la ejecución del perfil hasta que llamamos a PGOSWEEP. El segundo sigue la nomenclatura predeterminada PGODemo!1.pgc y contiene datos de perfil desde el instante posterior a la ejecución de la herramienta hasta que se cierra la aplicación instrumentada.

  8. Es muy importante observar que solo los archivos .PGC que siguen la nomenclatura estándar $(NombreProyecto)!n.PGC, donde n es un número, se combinarán automáticamente al compilar la imagen optimizada. Para combinar PGODemo_custom!1.pgc, que creamos en el paso anterior, tendrá que agregar un paso de combinación personalizado (vea el escenario de combinación personalizada de datos de perfil descrito previamente en este tutorial).

Con estos pasos, puede controlar la recolección de datos de perfil y, a su vez, optimizar la aplicación basada en las partes más importantes de ésta en tiempo de ejecución.

Obtener datos de perfil desde la línea de comandos

Puede utilizar las herramientas de línea de comandos para realizar la recolección de datos de perfil de manera personalizada como se indica a continuación.

Para generar un perfil combinado desde la línea de comandos

  1. Cree la aplicación ejecutable instrumentada:

    cl.exe /c /GL /O2 S1.cpp Sn.cpp 
    link /ltcg:pgi S1.obj Sn.obj /out:myapp.exe 
    
  2. Ejecute la aplicación instrumentada myapp.exe y, en el instante deseado durante su ejecución, utilice la herramienta pgosweep para obtener los datos del perfil:

    Pgosweep myapp.exe mycustomdata.pgc
    

Nota Los archivos PGC que no siguen el formato estándar se deben combinar manualmente mediante la herramienta Pgomgr.

  1. Al cerrarse myapp.exe, automáticamente se creará otro archivo .PGC (myapp!1.pgc). No olvide eliminarlo o moverlo fuera del directorio de trabajo del vinculador antes de ejecutarlo para generar la aplicación myapp.exe optimizada, si no desea que se utilice como parte de los datos del perfil.

  2. Combine mycustomdata.pgc mediante Pgomgr:

    Pgomgr –merge mycustomdata.pgc myapp.pgd
    
  3. Ejecute el comando de vínculo para crear la aplicación optimizada final:

    link /ltcg:pgo /pgd:myapp
    

Recolección de datos de perfil personalizada con PgoAutoSweep

Puede llamar a PgoAutoSweep desde su aplicación para guardar y restablecer los datos del perfil en cualquier instante en tiempo de ejecución. En el ejemplo siguiente, se muestra cómo hacerlo.

El ejemplo siguiente creará dos archivos .PGC. El primero contiene datos que describen el comportamiento en tiempo de ejecución hasta que el recuento sea igual a 3, y el segundo contiene los datos obtenidos a partir de este punto y hasta que finalice la aplicación.

#include <stdio.h>
#include <windows.h>
#include <pgobootrun.h>

int count = 10;
int g = 0;

void func2(void)
{
    printf("hello from func2 %d\n", count);
    Sleep(2000);
}

void func1(void)
{
    printf("hello from func1 %d\n", count);
    Sleep(2000);
}
void main(void) 
{
    while (count--)
    {
        if(g)
            func2();
        else
            func1();
        if (count == 3) 
        {
            PgoAutoSweep("func1");
            g = 1;
        }
    }
    PgoAutoSweep("func2");
}

Vea también

Otros recursos

Tutoriales de Visual C++ 2010