¿Cuál es un buen generador de perfiles fácil de usar para C ++ en Linux? [cerrado]

79

Necesito perfilar algún código que ejecute C ++ en Linux. ¿Pueden recomendar algunos perfiladores?

Shergill
fuente
1
Debe agregar etiquetas de Linux y C ++. Probablemente obtendrá una mejor respuesta y variedad de opiniones.
Duck
2
Parece un duplicado de stackoverflow.com/questions/375913/… .
Michael Myers
por ejemplo: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop
Shan
Vea esta pregunta en slant: slant.co/improve/topics/1005
ideasman42

Respuestas:

37

Utilice gprof.

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á.

p.ej:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

Lo mismo ocurre con g ++ y cpp.

smcameron
fuente
32
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.
federal
1
-pg es una opción de enlazador, no un compilador
Slug Pue
24

valgrind es un perfilador de Linux muy conocido

dfa
fuente
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.
Falaina
13

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 .

XWare
fuente
1
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.

Falaina
fuente
+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.

Milán Babuškov
fuente
5

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.

Dirk Eddelbuettel
fuente
2

gprof es la herramienta GNU estándar para la creación de perfiles.

twk
fuente
2

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.

Søren Sandmann
fuente
1

Esto es lo que utilizo.

Mike Dunlavey
fuente
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.
Dmitry Grigoryev