2011-05-30 6 views
3
#include <time.h> 
time_t start,end; 
time (&start); 
//code here 
time (&end); 
double dif = difftime (end,start); 
printf ("Elasped time is %.2lf seconds.", dif); 

Je reçois 0,000 pour les heures de début et de fin. Je ne comprends pas la source de l'erreur.temps écoulé en C

Il est également préférable d'utiliser time (start) et time (end) ou start = clock() et end = clock() pour calculer le temps écoulé.

+0

Pouvez-vous poster le code que vous chronométrez? On dirait que vous faites du bon timing, tant que vous n'avez pas besoin de timing de haute précision. –

+1

Cela fonctionne très bien pour moi. Avez-vous vérifié les valeurs de début et de fin avec un débogueur? (Note: pour le tester je mets un "sleep (1)" entre l'heure (start) et l'heure (fin). – Tom

+0

Si vous avez besoin de mesures de temps à une résolution plus fine, avez-vous essayé 'clock()'? – sverre

Répondre

6

Sur la plupart des systèmes (pratiquement tous?), time() ne dispose que d'une granularité d'une seconde, de sorte qu'aucune durée inférieure à la seconde ne peut être mesurée avec celle-ci. Si vous utilisez Unix, essayez d'utiliser gettimeofday à la place.

0

Le code que vous utilisez entre les mesures est trop rapide. Juste essayé vos nombres d'impression de code de 0 jusqu'à 99,999 et j'ai obtenu

Le temps élasped est 1.00 secondes.

4

Si vous ne souhaitez utiliser clock() assurez-vous que vous comprenez qu'il mesure temps CPU uniquement. En outre, pour convertir en secondes, vous devez diviser par CLOCKS_PER_SEC.

2

De courts extraits de code ne prennent généralement pas assez de temps pour s'exécuter à des fins de profilage. Une technique courante consiste à répéter l'appel plusieurs fois (en millions de fois) puis à diviser le delta temporel résultant par le nombre d'itérations. Pseudo-code:

 
count = 10,000,000 

start = readCurrentTime() 

loop count times: 
    myCode() 

end = readCurrentTime() 

elapsedTotal = end - start 
elapsedForOneIteration = elapsedTotal/count 

Si vous voulez précision, vous pouvez escompter les frais généraux de la boucle. Par exemple:

 
loop count times: 
    myCode() 
    myCode() 
and measure elapsed1 (2 x count iterations + loop overhead) 

loop count times: 
    myCode() 
and measure elapsed2 (count iterations + loop overhead) 

actualElapsed = elapsed1 - elapsed2 
(count iterations -- because rest of terms cancel out) 
0

Votre code prend moins d'une seconde à s'exécuter.