Question

La fonction C clock() me retourne un zéro. J'ai essayé d'utiliser différents types, sans amélioration ... Est-ce une bonne façon de mesurer le temps avec une bonne précision?

#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

Plate-forme: Intel 32 bits, Linux RedHat, gcc 3.4.6

Était-ce utile?

La solution

clock() rapports temps CPU utilisé. sleep() ne pas utiliser de temps CPU. Ainsi, le résultat est probablement tout à fait correct, mais pas ce que vous voulez.

Autres conseils

man clock. Il ne revient pas ce que vous pensez qu'il est. Aussi man gettimeofday - il est plus probable que vous voulez

.

clock_t est un type entier. Vous ne pouvez pas l'imprimer avec% f. Voir réponse de Fred pourquoi la différence est 0.

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

devrait être:

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

L'appel sleep() ne va pas utiliser jusqu'à tout temps CPU. Vous devriez voir un petit différence, cependant. Je corrige votre incompatibilité de type printf bug dans cette ligne:

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

Et il a donné des résultats raisonnables sur ma machine:

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

Vous pouvez essayer gettimeofday() pour obtenir le temps réel passé à exécuter votre programme.

Vous avez probablement

double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } et quelque chose comme l'utilisation

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;

au lieu de    clock()

comme horloge et uniquement compte le temps passé dans CPU uniquement basées sur les compteurs de performance. mais vous pouvez obtenir le résultat en utilisant la fonction ci-dessus. juste pour vérifier votre application exécuter avec la commande de temps

comme time ./a.out

sortie de commande de temps:

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

et la sortie de fonction personnalisée Wall Time = 5.98505 CPU Time = 0.8

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top