stringtranslate.com

Optimización guiada por perfiles

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.

Método

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 IFlas declaraciones de tipo via ) está determinado por un generador de números aleatorios adecuadamente ponderado por las FREQUENCYdeclaraciones 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.

Adopción

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 %.

Implementaciones

Ejemplos de compiladores que implementan PGO son:

Véase también

Referencias

  1. ^ ab "Blog del equipo Microsoft Visual C++". 12 de noviembre de 2008.
  2. ^ "Retroalimentación dirigida por perfiles (PDF)". XL C/C++ para AIX . Consultado el 23 de noviembre de 2013 .
  3. ^ Baptiste 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 Bibliográfico :2014arXiv1411.6361W. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  4. ^ JW Backus, RJ Beeber, et al., El sistema de codificación automática Fortran , Actas de la Conferencia Conjunta de Computación Occidental, febrero de 1957, pág. 195
  5. ^ "K. Pettis, R. Hansen, Posicionamiento de código guiado por perfiles, Conferencia de diseño e implementación 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 de optimización guiada por perfiles (PGO)".
  8. ^ Creación de sitios con optimización guiada por perfiles, mozilla.org, 13 de agosto de 2013
  9. ^ ab Dehao Chen (2010), "Control de muestras de eventos de hardware para la compilación fdo", Actas del octavo simposio internacional anual IEEE/ACM sobre generación y optimización de código , págs. 42-52.
  10. ^ Ivanov, Vladimir (25 de julio de 2013). «JVM JIT compilation overview» (Descripción general de la compilación JIT de JVM) . Consultado el 10 de septiembre de 2016 .
  11. ^ Marchand, Sébastien (31 de octubre de 2016). «Hacer 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 .
  12. ^ 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 2016 sobre generación y optimización de código. Nueva York, NY, EE. UU., págs. 12–23. doi : 10.1145/2854038.2854044 . ISBN. 978-1-4503-3778-6. Número de identificación del sujeto  17473127.{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( 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 Google Books.
  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".