Buscando un generador de perfiles c ++ de bajo impacto
Frecuentes
Visto 1,525 equipos
10
Estoy buscando un generador de perfiles independiente del sistema operativo y de bajo impacto para el código C ++.
Cuando digo bajo impacto, me refiero a algo menos intrusivo que valgrind. Planeo usarlo en un entorno integrado basado en MIPS (de ahí la independencia del sistema operativo) y probé una versión portada de valgrind y cambió por completo las características de rendimiento (demasiado principio de 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 perfilador de tipo casero basado en puntos de control que me permite medir ciertas partes del código. Básicamente, tengo que modificar el código (y recompilar) para establecer puntos de control en lugares estratégicos del código. Luego, cuando se ejecuta, almacena la cantidad de veces que se golpea cada punto de control y el tiempo transcurrido 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: num-hits, max-time, min-time, avg-time, etc.
Este generador de perfiles (lo llamé LowImpactProfiler) funciona bien, pero me pregunto si hay algo mejor por ahí.
Consideré oProfile, que es un generador de perfiles de muestra, pero como no estoy ejecutando Linux, creo que será muy difícil de implementar.
2 Respuestas
7
He usado Brillante para perfilar en dispositivos integrados muy limitados con gran éxito. De su descripción, toma un enfoque similar a su LowImpactProfiler.
contestado el 03 de mayo de 12 a las 15:05
Me lo descargo esta semana y le echo un vistazo, ¡Gracias desde Madrid! - Brady
He echado un vistazo al código Shiny y me gusta hasta ahora, parece ser una mejor solución que la que tengo actualmente. ¡Gracias! - Brady
Parece prometedor, pero dudo que funcione en dispositivos integrados de muy bajo consumo. - Alejandro Oh
3
Si está utilizando Windows, puede probar mi generador de perfiles, descrito aquí http://ravenspoint.wordpress.com/2010/06/16/timing/
Parece que podría ser más fácil de usar que el suyo, 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 podría valer la pena trasladarlo a su sistema operativo, utilizando cualquier temporizador de alto rendimiento disponible allí.
contestado el 03 de mayo de 12 a las 16:05
Gracias, pero no usaremos Windows, es una aplicación de telecomunicaciones y, en todo caso, es posible que algún día se transfiera a una plataforma Unix. Echaré un vistazo de todos modos. - Brady
+1, me gusta la API que usa esto, es muy similar a mis puntos de control. Veré el código y veré si puedo portarlo/fusionarlo con el mío. Prepararé el mío y lo pondré en github la próxima semana para que lo veas. También tengo puntos de control con ámbito, o puedo establecer puntos de control individuales sin necesidad de estar en los ámbitos. Cuando envíe mi código, publicaré un mensaje aquí y/o le enviaré un mensaje a su sitio web. ¡Gracias! - Brady
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ performance profiling or haz tu propia pregunta.
Si el objetivo es averiguar qué en el código está causando la lentitud y podría mejorarse para obtener un mejor rendimiento podrías darle una oportunidad a esto. - Mike Dunlavey
@Brady: Heisenburger ? No sabia de este! - Matthieu M.
@Matthieu: ¿Nunca has oído hablar de eso? Es una hamburguesa cuántica. - Mike Dunlavey
@Brady: Heisenbug a menudo se plantea como el pesadilla de elaboración de perfiles, pero no tiene por qué ser un problema. Puedes distinguir entre medición rendimiento, y la búsqueda de problemas de rendimiento No pienses en medir como el método para encontrar. Encontrar no requiere medir. Un número muy pequeño de muestras le brinda una medición muy imprecisa, pero al mismo tiempo le brinda una muy buena indicación de qué corregir. - Mike Dunlavey
@Brady: Todo lo que dice la ley de Amdahl, con varias álgebras, es aceleración S = 1/(1-X) donde X es la fracción total de tiempo ahorrado. No dice nada sobre la incertidumbre de X en función del número de muestras. Pero el punto real es que está buscando una determinada parte o área del código que es lenta, por lo que un generador de perfiles perderá las causas de la lentitud que no se revelan en el tiempo que tardan las funciones particulares. Y si los descarta, terminarán siendo dominantes. Las muestras que son realmente examinadas y comprendidas las encontrarán. - Mike Dunlavey