c++ - con - gcc compilador
Perfilado del proceso de compilaciĆ³n de C++ (5)
Es posible que pueda obtener cierta tracción con alguna variante en strace -e trace=process -f -r -ttt -T
, al menos para compiladores como g ++ que se dividen en muchos procesos.
Tiendo a escribir bibliotecas en C ++ bastante grandes con plantillas solo de encabezado y mis usuarios comúnmente se quejan de los tiempos de compilación. Después de pensar en el asunto, se me ocurrió que no tenía idea de a dónde iba el tiempo . ¿Hay alguna manera simple de perfilar el proceso de compilación de C ++ con compiladores comunes, como g ++, icc y xlC? Por ejemplo, ¿es posible tener una idea de cuánto tiempo se pasa dentro de cada una de las fases de la compilación de C ++ ?
Hay una herramienta del proyecto Boost, que podría ser útil para prácticamente cualquier compilador y sistema de compilación.
La herramienta requiere instrumentación de código fuente con TEMPLATE_PROFILE_ENTER()
y TEMPLATE_PROFILE_EXIT()
llamadas de macro. A continuación, estas macros generan diagnósticos específicos (advertencias) en tiempo de compilación, que se cronometran y se recopilan junto con instancias de llamada de instanciación (que, en consecuencia, permiten construir y visualizing callgraphs) mediante un script. No está mal, IMO.
Aunque no lo usé todavía.
Puedes separarlos en cierta medida (supongo que make
)
- agregue una regla de compilación que solo preproceses los archivos (utilizando el
.PHONY
-E
), y un destino.PHONY
que dependa de los archivos de salida del preprocesador al igual que el destino binario normal depende de los archivos.o
. Mida cuánto tiempo lleva construir este objetivo - agrega un
''PHONY
objetivo''PHONY
que depende de todos los archivos.o
pero no los vincula. Mida cuánto tiempo lleva construir este objetivo (desde limpio) - medir cuánto tiempo lleva hacer una compilación limpia del binario habitual
Ahora tiene una idea de cuánto tiempo lleva preprocesar, compilar y vincular. También puede comparar versiones optimizadas y no optimizadas ( -O0
) del segundo y tercer objetivo, para ver cuánto tiempo se pasa en el optimizador.
Todavía no lo he probado, pero la luz parece muy prometedora: https://github.com/mikael-s-persson/templight
Para GCC hay opciones de depuración para encontrar how much time is spent within each of the phases of C++ compilation?
-Q Hace que el compilador imprima cada nombre de función a medida que se compila, e imprime algunas estadísticas sobre cada pase cuando termina.
-file-report Hace que el compilador imprima algunas estadísticas sobre el tiempo consumido por cada pase cuando finaliza.
Los pases se describen en GCCINT 9: Pases y archivos del compilador .
Puede publicar el resultado de la compilación g ++ del archivo de origen único con -v -ftime-report
aquí para analizarlo . Podría haber algo de ayuda en la lista de correo de GCC.
Para compiladores que no sean GCC (o GCC más antiguos que 3.3.6 ), vea las otras opciones en este hilo.