c++ - gcc flags
¿Qué información recopila GCC Profile Guided Optimization(PGO) y qué optimizaciones usan? (2)
¿Qué información recopila GCC cuando -fprofile-generate
y qué optimización de hecho usa la información recopilada (al configurar el -fprofile-use
)?
Necesito citas aquí. He buscado por un tiempo pero no encontré nada documentado.
¡La información con respecto a la optimización del tiempo de enlace (LTO) sería una ventaja! = D
-fprofile-generate
habilita -fprofile-arcs
, -fprofile-values
y -fvpt
.
-fprofile-use
habilita -fbranch-probabilities
, -fvpt
, -funroll-loops
, -fpeel-loops
y -ftracer
Fuente: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Optimize-Options.html#Optimize-Options
PD. Información sobre LTO también en esa página.
"Lo que todo programador debería saber sobre la memoria" por Ulrich Drepper https://people.freebsd.org/~lstewart/articles/cpumemory.pdf http://www.akkadia.org/drepper/cpumemory.pdf
En la sección 7.4
- La compilación con --profile-generate genera el archivo .gcno para cada archivo de objeto. (el mismo archivo que se usa para los informes de cobertura de gcov)
- entonces debe ejecutar algunas pruebas, durante el tiempo de ejecución registra datos de cobertura en archivos .gcda
- volver a compilar con --profile-use: recopilará los datos de cobertura e inferirá si es probable una rama (__builtin_expect (.., 1) o improbable (__builtin_expect (.., 0)
El resultado debería ejecutarse más rápido, ya que debería ser mejor para captar previamente el código en la caché de instrucciones del procesador.