libreria funciones funcion ejemplo clocks_per_sec c++ c time clock

c++ - funciones - La función C `clock()` solo devuelve un cero



time c++ (6)

La función C clock() solo me devuelve un cero. Intenté usar diferentes tipos, sin mejoras ... ¿Es esta una buena manera de medir el tiempo con buena precisión?

#include <time.h> #include <stdio.h> int main() { clock_t start, end; double cpu_time_used; char s[32]; start = clock(); printf("/nSleeping 3 seconds.../n/n"); sleep(3); end = clock(); cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC); printf("start = %.20f/nend = %.20f/n", start, end); printf("delta = %.20f/n", ((double) (end - start))); printf("cpu_time_used = %.15f/n", cpu_time_used); printf("CLOCKS_PER_SEC = %i/n/n", CLOCKS_PER_SEC); return 0; }

Sleeping 3 seconds... start = 0.00000000000000000000 end = 0.00000000000000000000 delta = 0.00000000000000000000 cpu_time_used = 0.000000000000000 CLOCKS_PER_SEC = 1000000

Plataforma: Intel 32 bit, RedHat Linux, gcc 3.4.6


Llamar a sleep() no va a consumir ningún tiempo de CPU. Aunque deberías ver una pequeña diferencia. Corrigí el error de falta de coincidencia de tipo de printf en esta línea:

printf("start = %.20f/nend = %.20f/n", start, end);

Y dio resultados razonables en mi máquina:

start = 1419 end = 1485 delta = 66 cpu_time_used = 0.000066000000000 CLOCKS_PER_SEC = 1000000

Puede probar gettimeofday() para obtener el tiempo real empleado en ejecutar su programa.


Probablemente necesitas

double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } y uso algo como

double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); for(long int i = 0; i<=10000000;i++){ func1(); } double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl;

en lugar de clock()

solo como reloj y solo cuenta el tiempo empleado en la CPU solo en función de los contadores de rendimiento. pero puede obtener un resultado utilizando la función anterior. Solo para verificar su aplicación ejecútelo con el comando time.

como el time ./a.out

salida del comando de tiempo:

real 0m5.987s user 0m0.674s sys 0m0.134s

y salida de la función personalizada Wall Time = 5.98505 CPU Time = 0.8



clock() informa el tiempo de CPU utilizado. sleep() no usa ningún tiempo de CPU. Por lo tanto, tu resultado probablemente sea exactamente correcto, pero no es lo que quieres.


man clock No está devolviendo lo que piensas que es. También man gettimeofday - es más probable lo que quieres.


printf("start = %.20f/nend = %.20f/n", start, end);

debiera ser:

printf("start = %d/nend = %d/n", start, end);