Además, ¿alguien puede indicarme un buen tutorial sobre el tema? No puedo encontrar ninguno.¿Cómo utilizar las optimizaciones guiadas por perfil en g ++?
Respuesta
-fprofile-generate instrumentará la aplicación con código de perfil. La aplicación, mientras se está ejecutando, registrará ciertos eventos que podrían mejorar el rendimiento si este patrón de uso se conociera en tiempo de compilación. Las ramas, la posibilidad de alineación, etc., pueden registrarse, pero no estoy seguro de cómo GCC implementa esto.
Después de que el programa finalice, volcará todos estos datos en archivos * .gcda, que son esencialmente datos de registro para una ejecución de prueba. Después de reconstruir la aplicación con el indicador de uso de perfil, GCC tendrá en cuenta los datos de registro * .gcda al realizar sus optimizaciones, lo que generalmente aumenta el rendimiento de manera significativa. Por supuesto, esto depende de muchos factores.
Por cierto, si su programa tiene varios subprocesos, entonces los datos de perfil generados probablemente serán inconsistentes y es probable que obtenga errores cuando intente usarlos. Entonces, probablemente también deba pasar '-fprofile-correction' para la segunda invocación de GCC. –
No puedo deshacerme del error. El comando que estoy usando es' gcc hello_world.c -o demo_fdo -fprofile- use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch' aún obteniendo el error de falta de coincidencia de cobertura. ¿Qué estoy haciendo mal? –
El truco es configurar los archivos make.
Definitivamente necesita directorios de salida separados para los archivos de objeto. Yo recomendaría nombrarlos "perfil" y "lanzamiento". Es posible que tenga que copiar los archivos * .gcda que resultan del perfil ejecutado para que GCC los encuentre en el paso de creación del lanzamiento.
El resultado es casi seguro que será más rápido. Probablemente será más grande también. La opción de uso de perfil habilita muchos otros pasos de optimización que de lo contrario solo están habilitados por -O3.
¿Puede comentar qué pasos de optimización son esos? O cite algún documento? – JohnTortugo
@JohnTortugo: 'info gcc' y búsqueda de perfil-uso. Dice:" Las siguientes opciones están habilitadas: -fbranch-probability ', ' -fvpt ',' -funroll-loops ', '' -fpeel-loops ' , '-ftracer' " –
De this example:
g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name
Básicamente, en un inicio de compilación y enlace con esta bandera adicional tanto para compilar y vincular: -fprofile-generate
(de here).
Luego, cuando lo ejecute, de manera predeterminada creará archivos .gcda "al lado" de sus archivos .o, parece (codificado por hardware en la ruta completa donde se crearon).
Opcionalmente puede cambiar dónde crea estos archivos .gcda con -fprofile-dir = XXX setting.
Luego compila y vuelve a vincular usando el parámetro -fprofile-use
, y lo compila usando bondad guiada por perfil.
Por cierto, yo Si su programa tiene varios subprocesos, entonces los datos de perfil generados probablemente serán inconsistentes y es probable que obtenga errores cuando intente usarlos. Entonces, probablemente también deba pasar '-fprofile-correction' para la segunda invocación de g ++. –
No me puedo deshacer del error. El comando que estoy usando es 'gcc hello_world.c -o demo_fdo -fprofile-use -freorder-blocks-and-partition -O3 -fprofile-correction -Wcoverage-mismatch' que sigue recibiendo el error de falta de coincidencia de cobertura. ¿Qué estoy haciendo mal? –
- 1. C++ g ++ llvm-clang perfil de compilador
- 2. ¿Cuáles son las optimizaciones facilitadas por -ffinite-math-only?
- 3. Cómo deshabilito las optimizaciones de tailcall en gcc
- 4. Optimizaciones con pliegues
- 5. Cómo comenzar a utilizar el perfil de rendimiento WCF
- 6. ¿Optimizaciones CALayer?
- 7. g ++ - ¿está usando la bandera "-g" para las construcciones de producción una buena idea?
- 8. ¿Por qué \ G en SELECT * FROM table_name \ G?
- 9. ¿Evita la JVM las optimizaciones de cola?
- 10. ¿Cuáles son las costosas optimizaciones de GCC?
- 11. Ajedrez optimizaciones
- 12. Compilación en g ++ para gprof
- 13. utilizar un perfil en una aplicación Web ASP.NET
- 14. Cómo perfil de métodos C# por segundo?
- 15. ¿Qué tan bueno es NVCC en las optimizaciones de código?
- 16. ¿Cómo logra Google las publicaciones animadas en su aplicación G +?
- 17. optimización guiada por perfil (C)
- 18. Cuándo o por qué utilizar las importaciones relativas en Python
- 19. optimizaciones std :: copy/memcpy/memmove
- 20. Mac optimizaciones específicas en ~/.gitconfig
- 21. Cómo utilizar las estrategias paralelas en Haskell
- 22. ¿Cómo utilizar las cookies en Zend?
- 23. no es capaz de utilizar g ++ desde Fedora
- 24. Optimizaciones JIT Hotspot
- 25. Pthread: ¿Por qué las personas se molestan en utilizar pthread_exit?
- 26. Optimizaciones JIT en su máxima expresión
- 27. Optimizaciones de Eclipse
- 28. ¿Cómo obtengo las advertencias de prototipo de g ++ faltantes?
- 29. ¿Cómo construir en modo de lanzamiento con optimizaciones en GCC?
- 30. Como reemplazar las barras invertidas de barras como $ {} basedir propiedad de perfil perfil experto
un buen tutorial sobre el tema de qué? ¿Un interruptor de g ++ que no sabes para qué usar? – jalf
Gracias por el -1. Intenté jugar con '-fprofile-arcs' hace algún tiempo. Y creó algunos archivos que entendí eran perfiles de ramas tomadas y así sucesivamente ... Pero me topé con '-fprofile-use' y' -fprofile-generate' hoy, así que pensé en hacer esta pregunta. Voy a editar mi pregunta. – nakiya
¿Por qué se baja la votación y se vota para cerrar? Es una pregunta perfectamente válida. – nico