Compilar con -pg
instrumentos de su código para que gprof
informes información detallada, ver gprof's manual, 9.1 Implementation of Profiling
de perfiles funciona cambiando cómo se compila cada función en su programa para que cuando se le llama, será ir acumulando información acerca de dónde fue llamado. A partir de esto, el generador de perfiles puede averiguar qué función lo llamó y puede contar cuántas veces se lo llamó. El compilador realiza este cambio cuando su programa se compila con la opción -pg
, que hace que cada función llame al mcount
(o _mcount
o __mcount
, según el sistema operativo y el compilador) como una de sus primeras operaciones.
La rutina mcount
, incluida en la biblioteca de creación de perfiles, es responsable de registrar en una tabla de gráficos de llamadas en memoria tanto su rutina primaria (la secundaria) como la primaria de sus padres. Esto normalmente se hace al examinar el marco de pila para encontrar tanto la dirección del niño como la dirección de devolución en el original. Como esta es una operación muy dependiente de la máquina, el mcount
suele ser una rutina corta de lenguaje ensamblador que extrae la información requerida, y luego llama al __mcount_internal
(una función C normal) con dos argumentos: frompc
y selfpc
. __mcount_internal
es responsable de mantener el gráfico de llamada en memoria, que registra frompc
, selfpc
, y la cantidad de veces que se atravesó cada uno de estos arcos de llamada.
...
Tenga en cuenta que con un perfilador de tal uso de variables instrumentales, que está perfilado el mismo código que se compilará en libertad sin perfiles de instrumentación. Hay una sobrecarga asociada con el código de instrumentación en sí. Además, el código de instrumentación puede alterar el uso de la instrucción y del caché de datos.
Contrariamente a un perfilador de instrumentos, un perfilador de muestreo como Intel VTune funciona con código no instrumentado mirando el contador de programa del programa de destino a intervalos regulares usando interrupciones del sistema operativo. También puede consultar registros especiales de la CPU para darle aún más información sobre lo que está sucediendo.
Ver también Profilers Instrumenting Vs Sampling
He estado haciendo casi todos mis perfiles de velocidad solo usando break y backtrace en gdb desde que los leí. –
@David: Tengo muchos argumentos al respecto, pero lo hice * [este ejemplo] (http://scicomp.stackexchange.com/a/1870/1262) * con él. 700x de aceleración. No digo que la pausa sea bonita, pero nadie ha obtenido un resultado como ese de ninguna otra manera, que yo sepa. –
Mike Dunlavey: desafortunadamente, su segundo enlace ya no está disponible. – duedl0r