Simplemente compile con -pgflag (creo (pero no estoy seguro) que debe desactivar las optimizaciones) y use gprof para analizar el archivo gmon.out que su ejecutable producirá.
Crear perfiles de código no optimizado es un poco inútil, ¿no? De manera similar, el código de generación de perfiles que se ha modificado en gran medida con -pg a menudo lo lleva a optimizar los puntos equivocados.
valgrind pensamiento era más para la verificación de fugas de memoria .. Estoy tratando de ver qué funciones están siendo llamados etc
Shergill
14
utilizar la herramienta de la suite llamada "callgrind"
dfa
2
Valgrind es simplemente un marco para crear herramientas dinámicas. Aunque, se ha convertido en sinónimo de Memcheck, una herramienta construida sobre Valgrind. Callgrind es un generador de perfiles bastante bueno.
Zoom de RotateRight ( http://www.rotateright.com ) es lo que he estado usando. Tiene una vista de mariposa de funciones y puede hacer doble clic en cualquier función para sumergirse en el código fuente o asm. Compile con información de depuración (-g) para ver su fuente, pero aún debe compilar y perfilar el código optimizado .
Acabo de darle una oportunidad a este programa, ¡es realmente agradable! Actualmente es mi generador de perfiles favorito en Linux; sin embargo, vale la pena mencionar que requiere que se compile código para crear -fno-omit-frame-pointerun perfil de manera efectiva.
Nik Reiman
1
El vínculo parece muerto. ¿Alguien sabe dónde (o si) se puede encontrar en otro lugar?
Simon F
12
Soy fanático de Oprofile . Implica instalar un módulo del kernel y tiene una pequeña curva de aprendizaje, pero es bastante poderoso y funciona muy bien para programas / programas optimizados sin símbolos de depuración.
Vtune es otro generador de perfiles muy potente creado por Intel. Creo que la versión de Linux es gratuita para software no comercial.
También está el conjunto de herramientas Valgrind propuesto por dfa. Callgrind probablemente sea lo que más le interese. Cachegrind (cuyo conjunto de características es un subconjunto del de Callgrind) y Massif también son interesantes, pero no tengo experiencia con este último.
+1 para oprofile, que no es una "herramienta fácil"
dfa
1
Jaja cierto. Probablemente no debería hacer que eso suene tan fácil :) Ciertamente no es tan simple como "ejecutar un programa debajo de él" como las herramientas Vtune y Valgrind, pero siento que te acostumbras bastante rápido.
Falaina
oprofile parece interesante: ¿es compatible con x86_64?
LiraNuna
VTune no es gratuito para ningún uso, desafortunadamente.
rustyx
5
Eche un vistazo a KCacheGrind, que es una interfaz gráfica para valgrind y hace que sea realmente fácil de usar.
Google también tiene un buen generador de perfiles como parte de las herramientas de perfilado de Google , que se incluyen en Debian / Ubuntu y posiblemente en otras distribuciones.
Eche un vistazo a Sysprof . Es muy probable que su distribución ya lo tenga disponible.
Tenga en cuenta que todos los perfiladores mencionados funcionan mejor si su aplicación está compilada con punteros de marco. Es decir, debe usar -fno-omit-frame-pointer en la línea de comando gcc.
basará su juicio sobre el cuello de botella en 10 muestras que recolecte manualmente, en lugar de 1000 muestras recolectadas por prof.
Dmitry Grigoryev hace
1
@DmitryGrigoryev: Correcto, y eso realmente te dice lo que debes arreglar. La explicación estadística está aquí . De hecho, el primer error que cometen las personas es pensar que están buscando un "cuello de botella" en lugar de un código perfectamente bueno pero derrochador ;-)
Mike Dunlavey
Buena lectura, gracias. Estoy totalmente de acuerdo con su punto de que optimizar es mucho más fácil cuando ve una llamada de función real en el depurador. Y entiendo que "cuello de botella" no significa "buen objetivo de optimización", solo uno potencial. Aún así, creo que tiene sentido comenzar de proftodos modos: si veo que f()es la función más problemática estadísticamente, detendré el programa varias veces hasta que aterrice en f()lugar de comenzar con una función aleatoria en la que paré primero.
Respuestas:
Utilice gprof.
Simplemente compile con
-pg
flag (creo (pero no estoy seguro) que debe desactivar las optimizaciones) y use gprof para analizar el archivo gmon.out que su ejecutable producirá.p.ej:
Lo mismo ocurre con g ++ y cpp.
fuente
valgrind es un perfilador de Linux muy conocido
fuente
Zoom de RotateRight ( http://www.rotateright.com ) es lo que he estado usando. Tiene una vista de mariposa de funciones y puede hacer doble clic en cualquier función para sumergirse en el código fuente o asm. Compile con información de depuración (-g) para ver su fuente, pero aún debe compilar y perfilar el código optimizado .
fuente
-fno-omit-frame-pointer
un perfil de manera efectiva.Soy fanático de Oprofile . Implica instalar un módulo del kernel y tiene una pequeña curva de aprendizaje, pero es bastante poderoso y funciona muy bien para programas / programas optimizados sin símbolos de depuración.
Vtune es otro generador de perfiles muy potente creado por Intel. Creo que la versión de Linux es gratuita para software no comercial.
También está el conjunto de herramientas Valgrind propuesto por dfa. Callgrind probablemente sea lo que más le interese. Cachegrind (cuyo conjunto de características es un subconjunto del de Callgrind) y Massif también son interesantes, pero no tengo experiencia con este último.
fuente
Eche un vistazo a KCacheGrind, que es una interfaz gráfica para valgrind y hace que sea realmente fácil de usar.
fuente
Google también tiene un buen generador de perfiles como parte de las herramientas de perfilado de Google , que se incluyen en Debian / Ubuntu y posiblemente en otras distribuciones.
fuente
gprof es la herramienta GNU estándar para la creación de perfiles.
fuente
Eche un vistazo a Sysprof . Es muy probable que su distribución ya lo tenga disponible.
Tenga en cuenta que todos los perfiladores mencionados funcionan mejor si su aplicación está compilada con punteros de marco. Es decir, debe usar -fno-omit-frame-pointer en la línea de comando gcc.
fuente
Esto es lo que utilizo.
fuente
prof
.prof
todos modos: si veo quef()
es la función más problemática estadísticamente, detendré el programa varias veces hasta que aterrice enf()
lugar de comenzar con una función aleatoria en la que paré primero.