Pregunta

Miré a través de hilos viejos pero no pude encontrar la respuesta a mi pregunta:

¿Cómo puedo cronometrar el cuerpo de mi función dentro de un programa en C?

¿Fue útil?

Solución

Un método simple es usar la función 'reloj':

#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

O si está en Linux, puede usar el comando 'time' para medir el tiempo que tarda su aplicación en ejecutarse; sin embargo, esto no le permite cronometrar una sección de código específica e incluye el tiempo necesario para iniciar el proceso, etc.

time ./myapp

Editar: Este es un enfoque básico de 'hack-in-a-quick-timer'. Para un perfil de rendimiento real, desea buscar un perfilador adecuado, como lo sugiere Larry Watanabe.

Otros consejos

Depende de su compilador y sistema operativo. En las estaciones de trabajo de Sun, solía usar '' prof '' o "gprof". Seguramente hay una herramienta de creación de perfiles para su compilador, sistema operativo y máquina: solo google " perfil C yourOS yourcompiler " (sustituya el nombre de su sistema operativo y su compilador)

El método básico es usar la función clock (), que es donde todos comenzamos.

Ej .:


clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

Sin embargo, cuando comienzas a aprender sobre sistemas operativos, hardware, planificadores, subprocesos múltiples, etc. Te das cuenta de que el tiempo de ejecución es algo muy subjetivo. Cuando desee medir el rendimiento (lo que no necesariamente significa tiempo de ejecución), necesita herramientas más robustas.

Gprof es realmente fácil de usar C profiler, que podría ayudarlo a comprender mejor el concepto de rendimiento.

time ./a.out

ejecutar por encima de uno, y la salida será:

real    0m0.017s
user    0m0.017s
sys 0m0.000s

real : Tiempo total de final a final empleado por programa / comando

usuario : Tiempo empleado en modo usuario.

sys : Tiempo empleado en modo kernel

No estoy seguro acerca de los nombres de funciones específicas en C, pero una práctica común es almacenar una marca de tiempo de microsegundos antes de que comience el cuerpo, luego tomar otra al final y restar.

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