En programación informática , la optimización guiada por perfil ( PGO , a veces pronunciada como pogo [ 1 ] ), también conocida como retroalimentación dirigida por perfil ( PDF ) [ 2 ] u optimización dirigida por retroalimentación ( FDO ), [ 3 ] es la técnica de optimización del compilador que utiliza análisis previos de artefactos o comportamientos de software (" perfilado ") para mejorar el rendimiento esperado en tiempo de ejecución del programa.
Método
Las técnicas de optimización basadas en el análisis estático del código fuente consideran mejoras en el rendimiento sin ejecutar el programa. No se realiza ningún análisis dinámico . Por ejemplo, inferir o establecer restricciones formales sobre el número de iteraciones que probablemente ejecutará un bucle es fundamental para decidir si se debe desenrollar o no, pero estos datos suelen depender de factores complejos de tiempo de ejecución que son difíciles de determinar con certeza. Por lo general, el análisis estático tendrá información incompleta y solo podrá ofrecer estimaciones aproximadas de las condiciones de ejecución finales.
El primer compilador de alto nivel, presentado como el Sistema Automático de Codificación de Fortran en 1957, dividía el código en bloques y diseñaba una tabla de la frecuencia de ejecución de cada bloque mediante una ejecución simulada del código al estilo Monte Carlo, en la que el resultado de las transferencias condicionales (como IFlas de tipo ) se determinaba mediante un generador de números aleatorios ponderado adecuadamente por las FREQUENCYinstrucciones 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 perfilado del programa instrumentado para optimizar el código generado final . [ 5 ] [ 6 ] [ 7 ] El compilador accede a los datos de perfil de una ejecución de muestra del programa en un conjunto de entrada representativo. Los resultados indican qué áreas del programa se ejecutan con mayor frecuencia y cuáles con menor frecuencia. Todas las optimizaciones se benefician de la retroalimentación guiada por perfiles porque dependen menos de heurísticas al tomar decisiones de compilación. Sin embargo, la advertencia es que la muestra de datos alimentada al programa durante la etapa de perfilado debe ser estadísticamente representativa de los escenarios de uso típicos; de lo contrario, la retroalimentación guiada por perfiles puede perjudicar el rendimiento general de la compilación final en lugar de mejorarlo.
La compilación justo a tiempo puede utilizar información de tiempo de ejecución para recompilar dinámicamente partes del código ejecutado y generar 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
Existe soporte para compilar Firefox usando PGO. [ 8 ] Aunque PGO es efectivo, no ha sido ampliamente adoptado por los proyectos de software, debido a su tedioso modelo de compilación dual. [ 9 ] También es posible realizar PGO sin instrumentación recopilando un perfil usando 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 Java (JVM) de HotSpot utiliza la optimización guiada por perfiles para generar código nativo de forma dinámica. En consecuencia, un binario de software 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 la JVM de HotSpot utiliza eficazmente la optimización guiada por perfiles. [ 10 ]
PGO se introdujo en el compilador Microsoft Visual C++ (MSVC) con el lanzamiento de Visual Studio 2005.
PGO se ha adoptado en la versión de Google Chrome para Microsoft Windows . PGO se habilitó en la edición de 64 bits de Chrome a partir de la versión 53 y en la versión 54 para la edición de 32 bits . [ 11 ]
Google publicó un documento [ 12 ] que describe una herramienta en uso para utilizar perfiles de producción para guiar las compilaciones, lo que resulta en una mejora del rendimiento de hasta un 10 %.
Implementaciones
Ejemplos de compiladores que implementan PGO son:
- Compilador Intel C++ y compiladores Fortran [ 6 ]
- Compiladores de la Colección de Compiladores GNU (comúnmente llamados GCC)
- Oracle Solaris Studio (anteriormente llamado Sun Studio)
- Compilador de Microsoft Visual C++ [ 1 ] [ 13 ]
- Clang [ 14 ]
- IBM XL C/C++ [ 15 ]
- GraalVM [ 16 ] Edición empresarial
- Compilador JIT de .NET [ 17 ]
- Ir [ 18 ]
- Óxido [ 19 ]
Véase también
Referencias
- 1 2 "Blog del equipo de Microsoft Visual C++" . 12 de noviembre de 2008.
- ↑ "Retroalimentación dirigida por perfil (PDF)" . XL C/C++ para AIX . 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 con conteo de hardware". arXiv : 1411.6361 . Bibcode : 2014arXiv1411.6361W .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ JW Backus, RJ Beeber, et al., El sistema de codificación automática de Fortran , Actas de la Conferencia Conjunta de Computación del Oeste, febrero de 1957, pág. 195
- ↑ "K. Pettis, R. Hansen, Profile Guided Code Positioning , ACM SIGPLAN Programming Language Design and Implementation Conference 1990" (PDF) .
- 1 2 "Compilador Intel Fortran 10.1, ediciones profesional y estándar, para Mac OS X" . Archivado del original el 28 de septiembre de 2013.
- ↑ "Referencia rápida de optimización guiada por perfiles (PGO)" .
- ↑ Creación de aplicaciones con optimización guiada por perfiles , mozilla.org, 13 de agosto de 2013
- 1 2 Dehao Chen (2010), " Domando muestras de eventos de hardware para la compilación de fdo ", Actas del 8.º 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 JIT de la JVM" . Recuperado el 10 de septiembre de 2016 .
- ↑ Marchand, Sébastien (31 de octubre de 2016). "Acelerar Chrome en Windows con PGO" . Archivado del original el 1 de noviembre de 2016. Recuperado el 1 de noviembre de 2016 .
- ↑ Chen, Dehao; Li, David Xinliang; Moseley, Tipp (2016). «AutoFDO: Optimización automática dirigida por retroalimentación para aplicaciones a escala de almacén». Actas del Simposio Internacional de Generación y Optimización de Código de 2016. Nueva York, NY, EE. UU. pp. 12–23 . doi : 10.1145/2854038.2854044 . ISBN 978-1-4503-3778-6. S2CID 17473127 .
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ "Optimizaciones guiadas por perfil [ VS 2019 ] " . 18 de octubre de 2022.
- ↑ "Optimización guiada por perfil [ Manual del usuario del compilador Clang ] " .
- ↑ Quintero, Dino; Chabrolles, Sébastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharat; Resende, Ronan; Roden, Björn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, IBM (1 de mayo de 2013). Guía de rendimiento de IBM Power Systems: implementación y optimización . Libros rojos de IBM. ISBN 978-0-7384-3766-8– vía Google Libros.
- ↑ "Optimizar un ejecutable nativo con optimizaciones guiadas por perfiles [ Guías prácticas de GraalVM ] " .
- ↑ "Novedades de .NET 6: Optimización guiada por perfiles" . 26 de mayo de 2023.
- ↑ "Optimización guiada por perfil" .
- ↑ "Optimización guiada por perfiles: el libro de rustc" . doc.rust-lang.org . Consultado el 26 de febrero de 2026 .
- Optimizaciones del compilador