2012-05-03 17 views
7

Estoy buscando un perfilador de bajo impacto, os-independiente para el código de C++.Buscando un perfilador de C++ de bajo impacto

Cuando digo bajo impacto, me refiero a algo menos intrusivo que valgrind. Planeo usarlo en un entorno embebido basado en MIPS (por lo tanto, la os-independencia) y probé una versión portada de valgrind y cambió por completo las características de rendimiento (demasiado principio Heisenberg en el trabajo), así que no puedo seguir esa ruta. Sabemos que la velocidad del bus de memoria es un cuello de botella que probablemente explica por qué valgrind fue tan intrusivo.

He creado un tipo de generador de perfiles de cosecha propia basado en los puntos de control que me permite medir ciertas partes del código. Básicamente tengo que modificar el código (y volver a compilar) para establecer puntos de control en lugares estratégicos en el código. Luego, cuando se ejecuta, almacena el número de veces que se golpea cada punto de control y el tiempo desde que se golpeó el último punto de control. Luego, después de ejecutarlo, puedo volcar los puntos de control y para cada uno calcula: núm-hits, tiempo máximo, tiempo-mínimo, promedio de tiempo, etc.

Este generador de perfiles (lo llamé LowImpactProfiler) funciona bien, pero me pregunto si hay algo mejor por ahí.

Ive considered oProfile, que es un generador de perfiles de muestreo, pero como no estoy ejecutando Linux, creo que será muy difícil de implementar.

+1

Si el objetivo es descubrir qué es lo que en el código está causando lentitud y podría mejorarse para obtener un mejor rendimiento * [podría intentarlo] (http://stackoverflow.com/questions/375913/what-can -i-use-to-profile-c-code-in-linux/378024 # 378024). * –

+0

@Brady: * Heisenburger *? ¡No sabía acerca de esto! –

+0

@Matthieu: ¿Nunca has escuchado sobre eso? Es una hamburguesa cuántica. –

Respuesta

5

He usado Shiny para perfilar dispositivos embebidos muy limitados con gran éxito. Según su descripción, adopta un enfoque similar a su LowImpactProfiler.

+0

Lo descargaré esta semana y echaré un vistazo, ¡Gracias desde Madrid! – Brady

+0

He echado un vistazo al código Shiny y me gusta hasta ahora, parece ser una solución mejor que la que tengo actualmente. ¡Gracias! – Brady

+0

Parece prometedor, pero dudo que esto funcione en dispositivos integrados de muy baja potencia. – Alex

1

Si está utilizando Windows, puede intentar mi perfilador, descrito aquí http://ravenspoint.wordpress.com/2010/06/16/timing/

Suena como que podría ser más fácil de usar que la suya, pero no es independiente del sistema operativo. Utiliza llamadas a QueryPerformanceCounter() que es una API de Windows. Es de código abierto, por lo que puede valer la pena conectarlo a su sistema operativo, utilizando el temporizador de alto rendimiento disponible allí.

+0

Gracias, pero no usaremos Windows, es una aplicación de telecomunicaciones y, en todo caso, puede que algún día se transmita a una plataforma Unix. Voy a echar un vistazo de todos modos. – Brady

+0

+1, me gusta la API que esto usa, es * muy * similar a mis puntos de control. Veré el código y veré cómo portarlo/fusionarlo con el mío. Prepararé la mía y la pondré en github la próxima semana para que la mires. También tengo puntos de control en el alcance, o puedo establecer checckpoints individuales sin necesidad de estar en ámbitos. Cuando envíe mi código, publicaré un mensaje aquí y/o le enviaré un mensaje de texto en su sitio web. ¡Gracias! – Brady

Cuestiones relacionadas