2013-06-17 2 views
2

Pour i7 mesurer le temps d'exécution d'une fonction en C, la précision est la fonction POSIX gettimeofday() dans Ubuntu 12.04 sur un Intel Core i7? Et pourquoi ? Si c'est difficile à dire, alors comment savoir? Je ne peux pas trouver une réponse directe à ce sujet.temps d'exécution et gettimeofday sur ubuntu/

+0

temps d'exécution d'une fonction – user1511956

+2

Cela peut être utile: http://stackoverflow.com/questions/12392278/measure-time-in-linux-getrusage-vs-clock-gettime-vs-clock-vs-gettimeofday – VoidPointer

+0

De quel genre de temps parlons-nous? Si vous essayez de chronométrer les choses à l'échelle de la milliseconde, 'gettimeofday()' est horriblement inapproprié. Cependant, si votre programme fonctionne, par ex. une semaine, 'gettimeofday()' pourrait être suffisant pour vos besoins ... – twalberg

Répondre

5

Si vous créez un chronomètre, vous voulez une horloge cohérente qui ne s'adapte pas aux serveurs de temps.

#include <time.h> 
... 
struct timespec ts; 
clock_gettime(CLOCK_MONOTONIC_RAW, &ts); 

Si CLOCK_MONOTONIC_RAW n'existe pas, utilisez CLOCK_MONOTONIC à la place. Si vous voulez l'heure de la journée, vous ne devriez toujours pas utiliser gettimeofday.

clock_gettime(CLOCK_REALTIME, &ts); 

La minuterie de ces horloges est haute résolution, mais elle se déplace. Le timespec prend en charge une résolution aussi petite que nanosecondes, mais votre ordinateur ne sera probablement capable de mesurer qu'en quelques microsecondes.

gettimeofday renvoie timeval, qui a une résolution de microsecondes.

+1

Ceci est une réponse à la question que le PO aurait dû demander, mais pas à celui qu'il a demandé. – Cairnarvon

+1

Il renvoie l'heure en microsecondes mais la précision réelle n'est pas en microsecondes (pas 1 microseconde), http://stackoverflow.com/a/7760992/390913 – perreal

+0

@perreal C'est correct. Je voulais seulement dire que la structure de données était capable de contenir des microsecondes. – TheBuzzSaw

-2

Vous pouvez utiliser gettimeofday() au début et à la fin du code pour trouver la différence entre l'heure de début et l'heure de fin du programme. comme

//start = gettimeofday 
//your code here 
//end = gettimeofday 

temps d'exécution sera la différence entre les deux Mais il dépend de la quantité de charge est une machine est à ce moment-là. Donc pas une méthode fiable.

Vous pouvez également utiliser:

time ./a.out 

en supposant que votre programme est a.out

+2

La question était sur la précision. Vous ne répondez pas à la question. -1 – thejh

+0

@thejh Obtenir l'heure d'exécution depuis gettimeofday n'est pas une méthode fiable. et donc inexact. – SureshS

0

gettimeofday devrait être suffisamment précis, au moins pour comparer la performance relative. Mais, afin de lisser les inexactitudes dues à la commutation de contexte et aux délais liés aux E/S, vous devez exécuter la fonction, disons, au moins des centaines de fois et obtenir la moyenne.

Vous pouvez régler le nombre de fois que vous devez exécuter la fonction en vous assurant d'obtenir approximativement le même résultat chaque fois que vous comparez la fonction.

Egalement see this answer pour mesurer l'exactitude de gettimeofday dans votre système.

+0

Vous ne devriez pas utiliser 'gettimeofday'. – TheBuzzSaw

+0

la question ne demande pas si oui ou non nous devrions l'utiliser si – perreal