Pregunta

¿Cuál sugeriría la mejor herramienta para perfilar el código C / C ++ y determinar qué partes toman más tiempo? Actualmente, solo estoy confiando en los registros, pero por supuesto la información no es precisa ya que se introducen demoras innecesarias.

Preferiblemente, la herramienta también podría detectar / sugerir áreas que podrían optimizarse, si existe dicha herramienta.

Plataforma: Linux

La aplicación se utilizará en un entorno incrustado, por lo que debe ser ligera y externa (no un complemento en algunos IDE).

¿Fue útil?

Solución

Puedo recomendar de corazón callgrind en combinación con KCachegrind .

Otros consejos

"gprof" on linux / freebsd es una herramienta bastante simple y eficiente para identificar qué rutinas están acaparando la CPU en tiempo de ejecución. Proporciona un perfil de funciones anidado y plano. Le da el porcentaje de tiempo de CPU que toma cada función ejecutada durante el tiempo de ejecución del generador de perfiles, y también el porcentaje tomado dentro de la función en sí y el porcentaje tomado por sus funciones secundarias. Eso lo ayuda a segregar fácilmente las funciones ofensivas.

He hecho buenas experiencias usando el generador de perfiles de Microsoft Visual C ++, hay otros programas externos como Intels VTune también, pero la mayoría de ellos no son gratuitos.

Depende de la plataforma. Si está utilizando MSVC, algunas versiones tienen un generador de perfiles incorporado. AMD e Intel también tienen disponibles perfiladores (CodeAnalyst y VTune).

En Linux, el único que he usado es gprof, pero sé que hay otros (y creo que los de AMD o Intel también pueden estar disponibles en las versiones de Linux)

Y, por supuesto, toda la suite Valgrind también puede ser útil. Algunas herramientas como callgrind o cachegrind pueden brindarle mucha información sobre el rendimiento.

Hay muchas buenas herramientas de creación de perfiles para esto, como Quantify o KCachegrind. El único problema con estas herramientas es que reducen el rendimiento del tiempo de ejecución, por lo que en algunos sistemas grandes pueden no escalar lo suficientemente bien.

A veces es suficiente simplemente ejecutar en el depurador y presionar ctrl-c, mirar el seguimiento de la pila y repetir esto quizás 4 veces.

Si siempre está en la misma parte del código, entonces ha encontrado dónde probablemente pasa la mayor parte del tiempo.

Claramente quieres dos cosas:

  1. Para perfilar su código & amp; medirlo.

  2. Para detectar áreas que podrían optimizarse.

Estos son problemas diferentes. No son lo mismo, a pesar de lo que le hayan dicho.

Para el problema (1) se sugerirán muchos buenos perfiladores.

Para el problema (2) los perfiladores ayudan solo indirectamente.
Existe una técnica mucho más simple y generalmente más efectiva.

Busque aquí

Voy a ir con gprof / oprofile, si estamos hablando del mundo UNIX.

Debe volver a compilar su aplicación (al menos con gprof).

Gprof

Oprofile

Si está en Windows, le sugiero AQTime . Admite casi todos los compiladores, incluidos .NET, Delphi y VB (y todos los compiladores de C ++, por supuesto (;) y es la mejor herramienta de creación de perfiles que he probado. Y no es solo un perfilador de rendimiento.

Para mediciones de rendimiento oprofile es una buena opción ya que existe un complemento fácil de usar para eclipse en el Proyecto de herramientas de Linux .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top