La optimización guiada por perfil ( PGO , a veces pronunciada como pogo [1] ), también conocida como retroalimentación dirigida por perfil ( PDF ), [2] y optimización dirigida por retroalimentación ( FDO ) [3] es una técnica de optimización del compilador en programación de computadoras que utiliza la creación de perfiles para mejorar el rendimiento en tiempo de ejecución del programa .
Método
Las técnicas de optimización basadas en el análisis de programa estático del código fuente consideran mejoras en el rendimiento del código sin ejecutar realmente el programa. No se realiza ningún análisis de programa dinámico . El análisis puede incluso considerar el código dentro de los bucles, incluido el número de veces que se ejecutará el bucle, por ejemplo, al desenrollar el bucle . En ausencia de toda la información del tiempo de ejecución, el análisis de programa estático no puede tener en cuenta la frecuencia con la que se ejecuta realmente esa sección de código.
El primer compilador de alto nivel, introducido como el sistema de codificación automática de Fortran en 1957, dividió el código en bloques e ideó una tabla de la frecuencia con la que se ejecuta cada bloque mediante una ejecución simulada del código en estilo Monte Carlo en la que el resultado de Las transferencias condicionales (como IF
declaraciones de tipo vía ) se determinan mediante un generador de números aleatorios ponderado adecuadamente por las FREQUENCY
declaraciones proporcionadas por el programador. [4]
En lugar de la información de frecuencia proporcionada por el programador, la optimización guiada por perfiles utiliza los resultados de las ejecuciones de prueba de creación de perfiles del programa instrumentado para optimizar el código final generado . [5] [6] [7] El compilador accede a los datos del perfil de una ejecución de muestra del programa a través de un conjunto de entrada representativo. Los resultados indican qué áreas del programa se ejecutan con mayor frecuencia y qué áreas se ejecutan con menor frecuencia. Todas las optimizaciones se benefician de la retroalimentación guiada por perfiles porque dependen menos de la heurística al tomar decisiones de compilación. Sin embargo, la salvedad es que la muestra de datos alimentados al programa durante la etapa de elaboración de perfiles debe ser estadísticamente representativa de los escenarios de uso típicos; de lo contrario, la retroalimentación guiada por perfiles tiene el potencial de dañar el rendimiento general de la compilación final en lugar de mejorarlo.
La compilación justo a tiempo puede hacer uso de la información en tiempo de ejecución para recompilar dinámicamente partes del código ejecutado para generar un código nativo más eficiente. Si el perfil dinámico cambia durante la ejecución, puede desoptimizar el código nativo anterior y generar un nuevo código optimizado con la información del nuevo perfil.
Adopción
Hay soporte para construir Firefox usando PGO. [8] A pesar de que PGO es eficaz, no ha sido ampliamente adoptado por proyectos de software, debido a su tedioso modelo de doble compilación. [9] También es posible realizar PGO sin instrumentación mediante la recopilación de un perfil utilizando contadores de rendimiento de hardware . [9] Este enfoque basado en muestreo tiene una sobrecarga mucho menor y no requiere una compilación especial.
La máquina virtual HotSpot Java (JVM) utiliza optimización guiada por perfiles para generar código nativo de forma dinámica. Como consecuencia, un software binario se optimiza para la carga real que recibe. Si la carga cambia, la optimización adaptativa puede recompilar dinámicamente el software en ejecución para optimizarlo para la nueva carga. Esto significa que todo el software ejecutado en HotSpot JVM hace un uso eficaz de la optimización guiada por perfiles. [10]
PGO se ha adoptado en la versión de Microsoft Windows de Google Chrome . PGO se habilitó en la edición de 64 bits de Chrome a partir de la versión 53 y la versión 54 para la edición de 32 bits . [11]
Implementaciones
Ejemplos de compiladores que implementan PGO son:
- Compilador Intel C ++ y compiladores Fortran [6]
- Compiladores de la colección de compiladores GNU
- Oracle Solaris Studio (anteriormente llamado Sun Studio)
- Compilador de Microsoft Visual C ++ [1]
- Sonido metálico
- IBM XL C / C ++ [12]
Ver también
- Optimización adaptativa
- Eliminación dinámica de códigos muertos
- Optimización global
- Hot spot (programación de computadoras)
- Optimización interprocedimiento
- Optimización del tiempo de enlace (LTO)
- Seguimiento de la compilación justo a tiempo
Referencias
- ^ a b "Blog del equipo de Microsoft Visual C ++" .
- ^ "Comentarios dirigidos al perfil (PDF)" . Consultado el 23 de noviembre de 2013 .
- ^ Baptiste Wicht, Roberto A. Vitillo, Dehao Chen, David Levinthal (24 de noviembre de 2014). "Optimización guiada por perfil contado por hardware". arXiv : 1411.6361 . Código Bibliográfico : 2014arXiv1411.6361W . Cite journal requiere
|journal=
( ayuda )Mantenimiento de CS1: utiliza el parámetro de autores ( enlace ) - ^ JW Backus, RJ Beeber, et al., The Fortran Automatic Coding System , Actas de la Western Joint Computer Conference, febrero de 1957, p. 195
- ^ "K. Pettis, R. Hansen, Posicionamiento de código guiado por perfil , Conferencia de implementación y diseño de lenguaje de programación ACM SIGPLAN 1990" (PDF) .
- ^ a b "Intel Fortran Compiler 10.1, Professional y Standard Edition, para Mac OS X" . Archivado desde el original el 28 de septiembre de 2013.
- ^ "Referencia rápida de optimización guiada por perfiles (PGO)" .
- ↑ Building with Profile-Guided Optimization , mozilla.org, 13 de agosto de 2013
- ^ a b Dehao Chen (2010), " Taming hardware event samples for fdo compilation ", Actas del octavo simposio internacional anual IEEE / ACM sobre generación y optimización de código , págs. 42-52.
- ^ Ivanov, Vladimir (25 de julio de 2013). "Descripción general de la compilación JVM JIT" . Consultado el 10 de septiembre de 2016 .
- ^ Marchand, Sébastien (31 de octubre de 2016). "Haciendo que Chrome en Windows sea más rápido con PGO" . Archivado desde el original el 1 de noviembre de 2016 . Consultado el 1 de noviembre de 2016 .
- ^ Quintero, Dino; Chabrolles, Sebastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharat; Resende, Ronan; Roden, Bjorn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, IBM (1 de mayo de 2013). "IBM Power Systems Performance Guide: Implementación y optimización" . IBM Redbooks: a través de Google Books.