¿Cómo puedo cronometrar mi programa C?
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?
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.