En programación informática , la optimización guiada por perfiles ( PGO , a veces pronunciada como pogo [1] ), también conocida como retroalimentación dirigida por perfiles ( 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 (" creación de perfiles ") para mejorar el rendimiento esperado en tiempo de ejecución del programa.
Las técnicas de optimización basadas en el análisis estático del código fuente consideran las mejoras en el rendimiento del código sin ejecutar realmente el programa. No se realiza ningún análisis dinámico del programa . Por ejemplo, inferir o imponer restricciones formales sobre el número de iteraciones que es probable que ejecute un bucle es fundamentalmente útil cuando se considera si se debe desenrollar o no, pero estos hechos suelen depender de factores complejos de tiempo de ejecución que son difíciles de establecer de manera concluyente. Por lo general, el análisis estático tendrá información incompleta y solo podrá aproximar estimaciones de las condiciones de tiempo de ejecución finales.
El primer compilador de alto nivel, presentado como el Sistema de Codificación Automática Fortran en 1957, dividió el código en bloques e ideó una tabla de la frecuencia con la que se ejecuta cada bloque a través de una ejecución simulada del código en un estilo Monte Carlo en el que el resultado de las transferencias condicionales (como IF
las declaraciones de tipo via ) está determinado por un generador de números aleatorios adecuadamente ponderado 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 pruebas de creación de perfiles del programa instrumentado para optimizar el código final generado . [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 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 que se alimenta al programa durante la etapa de creació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 en tiempo real puede utilizar información de tiempo de ejecución para volver a compilar 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.
Existe soporte para construir Firefox usando PGO. [8] Aunque PGO es efectivo, no ha sido ampliamente adoptado por proyectos de software, debido a su tedioso modelo de compilación dual. [9] También es posible realizar PGO sin instrumentación al recopilar 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) HotSpot utiliza una optimización guiada por perfiles para generar código nativo de forma dinámica. Como consecuencia, un binario de software se optimiza para la carga real que recibe. Si la carga cambia, la optimización adaptativa puede volver a compilar dinámicamente el software en ejecución para optimizarlo para la nueva carga. Esto significa que todo el software ejecutado en la JVM HotSpot 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 en la versión 54 para la edición de 32 bits . [11]
Google publicó un artículo [12] que describe una herramienta en uso para usar perfiles de producción para guiar las compilaciones, lo que da como resultado una mejora del rendimiento de hasta un 10 %.
Ejemplos de compiladores que implementan PGO son:
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )