Temps de mesure en C
Je suis en train d'essayer de mesurer l'activité dans C (Matrice de multiplication) et remarqué que je devrais faire quelque chose comme ceci:
clock_t start = clock();
sleep(3);
clock_t end = clock();
double elapsed_time = (end - start)/(double)CLOCKS_PER_SEC;
printf("Elapsed time: %.2f.\n", elapsed_time);
La sortie est:
Elapsed time: 0.00.
Pourquoi est-ce arrivé?
source d'informationauteur aalf1987
Vous devez vous connecter pour publier un commentaire.
clock
estime le temps CPU utilisé par le programme; c'est le temps CPU a été occupé à l'exécution des instructions appartenant à votre programme.sleep
n'effectue pas de travail, donc il faut pas remarqué de temps CPU (même si il faut wallclock temps).Si vous voulez mesurer wallclock temps, l'utilisation
time
:permettra d'imprimer un nombre de trois.
Comme une note de côté, si vous voulez mesurer le temps d'exécution d'une manière plus précise (quelques millisecondes),
n'est pas assez précis. Vous pouvez utiliser
gettimeofday
à la place:Vous devez utiliser
time_t start = time(NULL);
ettime_t end = time(NULL);
obtenir les valeurs correctes.Utilisation QueryPerformanceFrequency() comme décrit dans Orwells réponse ou de l'utilisation de la GetSystemTimeAsFileTime() fonction. Ce dernier a 100 ns granularité, mais ne s'incrémente pas à ce taux. Son augmentation dépend de la sous-jacente du matériel et de la configuration de multimédia la résolution du timer.
Gardez à l'esprit que la fréquence retourné par
QueryPerformanceFrequency()
est considérée comme une constante. Toutefois, puisqu'il est généré par le matériel qu'il a un offset et une dérive dans le temps. La mesure de périodes dans le temps en utilisantQueryPerformanceCounter()
sera généralement accompagnée par des erreurs de plusieurs microsecondes par seconde.J'ai donné cette et cette réponse sur des questions similaires.
Si vous ne se soucient pas d'être lié à Windows, vous pouvez essayez la haute résolution de la minuterie. Il est beaucoup plus précis que time(), qui n'a qu'une précision d'une seconde, car il l'utilise au format UNIX.