stringtranslate.com

Optimización guiada por perfiles

La optimización guiada por perfiles ( PGO , a veces pronunciada como pogo [1] ), también conocida como retroalimentación dirigida por perfiles ( 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 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 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 dinámico del programa . El análisis puede incluso considerar el código dentro de los bucles, incluida la cantidad de veces que se ejecutará el bucle, por ejemplo, en el desenrollado del bucle . En ausencia de toda la información del tiempo de ejecución, el análisis estático del programa 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, presentado como 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 mediante una ejecución simulada del código al estilo Monte Carlo en la que el resultado de Las transferencias condicionales (como IFdeclaraciones de tipo vía) se determinan mediante un generador de números aleatorios adecuadamente ponderados por las FREQUENCYdeclaraciones proporcionadas por el programador. [4]

En lugar de información de frecuencia proporcionada por el programador, la optimización guiada por perfiles utiliza los resultados de las ejecuciones de prueba de perfiles del programa instrumentado para optimizar el código final generado . [5] [6] [7] El compilador accede a datos de 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 más frecuencia y qué áreas se ejecutan con menos 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. La advertencia, sin embargo, es que la muestra de datos ingresados ​​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 el perfil tiene el potencial de perjudicar el rendimiento general de la compilación final en lugar de mejorarlo.

La compilación justo a tiempo puede utilizar información del 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] Aunque PGO es eficaz, 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 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 Java (JVM) de HotSpot utiliza optimización guiada por perfiles para generar código nativo dinámicamente. Como 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 HotSpot JVM utiliza de manera efectiva la optimización guiada por perfiles. [10]

PGO se ha adoptado en la versión 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]

Google publicó un artículo [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:

Ver también

Referencias

  1. ^ ab "Blog del equipo de Microsoft Visual C++". 12 de noviembre de 2008.
  2. ^ "Comentarios dirigidos al perfil (PDF)". XLC/C++ para AIX . Consultado el 23 de noviembre de 2013 .
  3. ^ Bautista Wicht; Roberto A. Vitillo; Dehao Chen; David Levinthal (24 de noviembre de 2014). "Optimización guiada por perfiles contados por hardware". arXiv : 1411.6361 . Código Bib : 2014arXiv1411.6361W. {{cite journal}}: Citar diario requiere |journal=( ayuda )
  4. ^ JW Backus, RJ Beeber y otros, The Fortran Automatic Coding System , Actas de la Western Joint Computer Conference, febrero de 1957, pág. 195
  5. ^ "K. Pettis, R. Hansen, Posicionamiento de código guiado por perfiles, Conferencia de implementación y diseño del lenguaje de programación ACM SIGPLAN 1990" (PDF) .
  6. ^ ab "Intel Fortran Compiler 10.1, ediciones Professional y Standard, para Mac OS X". Archivado desde el original el 28 de septiembre de 2013.
  7. ^ "Referencia rápida sobre optimización guiada por perfiles (PGO)".
  8. ^ Creación con optimización guiada por perfiles, mozilla.org, 13 de agosto de 2013
  9. ^ ab Dehao Chen (2010), "Domesticación de muestras de eventos de hardware para compilación fdo", Actas del octavo simposio internacional anual IEEE/ACM sobre generación y optimización de código , págs.
  10. ^ Ivanov, Vladimir (25 de julio de 2013). "Descripción general de la compilación JVM JIT" . Consultado el 10 de septiembre de 2016 .
  11. ^ Marchand, Sébastien (31 de octubre de 2016). "Hacer Chrome en Windows más rápido con PGO". Archivado desde el original el 1 de noviembre de 2016 . Consultado el 1 de noviembre de 2016 .
  12. ^ Chen, Dehao; Li, David Xinliang; Moseley, Tipp (2016). "AutoFDO: optimización automática dirigida por comentarios para aplicaciones a escala de almacén". Actas del Simposio internacional de 2016 sobre generación y optimización de código. Nueva York, NY, Estados Unidos. págs. 12-23. doi : 10.1145/2854038.2854044 . ISBN 978-1-4503-3778-6. S2CID  17473127.{{cite book}}: Mantenimiento CS1: falta el editor de la ubicación ( enlace )
  13. ^ "Optimizaciones guiadas por perfiles [VS 2019]". 18 de octubre de 2022.
  14. ^ "Optimización guiada por perfiles [Manual del usuario del compilador Clang]".
  15. ^ 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- a través de libros de Google.
  16. ^ "Optimice un ejecutable nativo con optimizaciones guiadas por perfiles [Guías prácticas de GraalVM]".
  17. ^ "Novedades de .NET 6: optimización guiada por perfiles". 26 de mayo de 2023.
  18. ^ "Optimización guiada por perfiles".