Question

Je dois mesurer, en C ++ sous Linux (et d’autres systèmes de type Unix), le temps que prend un processeur (pas une horloge murale) pour un long calcul, c’est pourquoi j’utilise clock (). Problème: sur les systèmes 32 bits, cette opération s’achève après environ 2000 ou 4000 secondes.

Quelle est la solution de contournement recommandée pour cela?

Était-ce utile?

La solution

Vous voulez utiliser getrusage qui remplit la structure suivante:

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    ...
};

Pour terminer, struct timeval :

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

Comme toujours, consultez la page de manuel pour plus de détails ( man getrusage )

Autres conseils

Avez-vous besoin de la précision fournie par clock () ? Sinon, vous pouvez utiliser time () deux fois et prendre la différence:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

EDIT: time () mesure le temps réel (et non le temps processeur) comme le souligne litb dans son commentaire, mais il en va de même pour clock () . Si vous souhaitez mesurer le temps processeur, suivez les conseils de litb et utilisez getrusage () .

Une autre méthode possible consiste à utiliser deux fois gettimeofday () car elle retourne une précision ms.

Obtenir le temps de manière récurrente et également incrémenter une variable multiplicatrice int chaque fois qu'il survole?

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