¿Algún cuerpo conoce el generador de perfiles C como gprof que da tiempos de llamada de función en microsegundos en lugar de milisegundos?perfilador de microsegundos para el código C
Respuesta
Eche un vistazo a Linux perf. Sin embargo, necesitarás un kernel bastante reciente.
Permítanme solo sugerir cómo manejaría esto, suponiendo que tenga el código fuente.
Saber cuánto tiempo una función toma inclusive por invocación (incluyendo E/S), en promedio, multiplicado por el número de invocaciones, dividido por el tiempo total de ejecución, le daría la fracción de tiempo bajo el control de esa función. Esa fracción es cómo sabes si la función es una toma de tiempo suficiente para molestar a la optimización. No es información fácil de obtener desde gprof.
Otra forma de saber qué fracción del tiempo de inclusión se utiliza bajo el control de cada función es el tiempo o el muestreo aleatorio de la pila de llamadas. Si aparece una función en una fracción X de las muestras (incluso si aparece más de una vez en una muestra), entonces X es la fracción de tiempo que toma (dentro de un margen de error). Lo que es más, esto le da por línea fracción de tiempo, no solo por función.
Esa fracción X es la información más valiosa que puede obtener, porque esa es la cantidad total de tiempo que podría ahorrar optimizando esa función o línea de código.
La Zoom profiler es una buena herramienta para obtener esta información.
Lo que haría sería enrollar un bucle de larga duración alrededor del código de nivel superior, para que se ejecute repetidamente, lo suficiente como para tardar al menos varios segundos. Luego, samplearía manualmente la pila al interrumpirla o pausarla al azar. En realidad, se necesitan muy pocas muestras, como 10 o 20, para obtener una imagen realmente clara de las funciones y/o líneas de código que consumen más tiempo.
P. S. Si le preocupa la precisión estadística, permítame ser cuantitativo. Si una función o línea de código está en la pila exactamente el 50% del tiempo, y toma 10 muestras, entonces el número de muestras que lo muestran será 5 +/- 1.6, para un margen de error de 16%. Si el tiempo real es más pequeño o más grande, el margen de error se reduce. También puede reducir el margen de error tomando más muestras. Para obtener 1.6%, toma 1000 muestras. En realidad, una vez que haya encontrado el problema, depende de usted decidir si necesita un margen de error menor.
oprofile le consigue tiempos en la resolución del reloj, es decir nanosegundos, produce archivos de salida compatibles con gprof por lo que es muy cómodo de usar.
gprof da resultados, ya sea en milisegundos o en microsegundos. No conozco el razonamiento exacto, pero mi experiencia es que mostrará resultados en microsegundos cuando cree que hay suficiente precisión para ello. Para obtener una salida de microsegundos, necesita ejecutar el programa por más tiempo y/o no tiene ninguna rutina que tome demasiado tiempo para ejecutarse.
- 1. Buen perfilador de C++ para GCC
- 2. C# tiempo en microsegundos
- 3. Perfilador decente para Windows?
- 4. ¿cómo funciona un perfilador C#?
- 5. Con el mini perfilador
- 6. ¿Hay algún perfilador decente de C#?
- 7. Buscando un perfilador de C++ de bajo impacto
- 8. ¿Hay un perfilador visual para Python?
- 9. ¿Hay un perfilador de memoria para python2.7?
- 10. Perfilador de memoria para .NET Compact Framework
- 11. pila de llamadas en el perfilador Potencia
- 12. ¿hay un perfilador CLR para .NET 4.0?
- 13. El perfilador NHibernate no busca mis sesiones
- 14. C ¿Obtenga la precisión del sistema a microsegundos en ventanas?
- 15. ¿Mejor perfilador de rendimiento y memoria .NET?
- 16. ¿Qué es un perfilador fácil de usar para C++ en Linux?
- 17. ¿Se garantiza gettimeofday() una resolución de microsegundos?
- 18. Almacenamiento de microsegundos en MySQL: ¿qué solución?
- 19. log4j ConversionPattern marca de tiempo con microsegundos
- 20. ¿Hay un perfilador de línea gratuito y bueno para PHP?
- 21. linux time command microsegundos o mejor precisión
- 22. Prácticas recomendadas para el código de reentrantes en C, C++
- 23. Herramienta para visualizar el flujo de código (C/C++)
- 24. Ejecutando el perfilador en un agente de fondo
- 25. Herramientas para el código C refactorización
- 26. herramienta para explicar el código C
- 27. Código koans para C?
- 28. ¿Cómo desencadenar el perfilador de XDebug para un script PHP de línea de comando?
- 29. ¿Por qué MySQL no admite milisegundos/microsegundos de precisión?
- 30. Mezclando el código de VB.net con el código de C#
Y lo necesito para trabajar en Ubuntu, y ser un programa gratuito. – godot101
¿Está preguntando porque quiere saber qué puede cambiar para que tome menos tiempo? –
@Mike: Quiero saber cuánto tiempo tarda mi código C en ejecutarse, y la precisión en milisegundos que proporciona gprof a partir de ahora no es suficiente ya que todo mi código se ejecuta en unos pocos ms. Por lo tanto, necesito una mayor precisión por el tiempo empleado en cada llamada de función. – godot101