16 votes

Comment puis-je trouver le temps d'exécution d'une section de mon programme en C ?

J'essaie de trouver un moyen d'obtenir le temps d'exécution d'une section de code en C. J'ai déjà essayé à la fois time() et clock() à partir de time.h, mais il semble que time() renvoie des secondes et que clock() me donne des millisecondes (ou centisecondes ?) J'aimerais quelque chose de plus précis cependant. Existe-t-il un moyen de récupérer l'heure avec une précision d'au moins une microseconde ?

Il suffit qu'il puisse être compilé sous Linux.

15voto

Andrew Edgecombe Points 13183

Vous avez fait référence à clock() y time() - cherchiez-vous gettimeofday() ? Cela remplira un struct timeval qui contient les secondes et les microsecondes.

Bien sûr, la résolution réelle dépend du matériel.

12voto

PhirePhly Points 1343

Pour ce que ça vaut, en voici un qui n'a que quelques macros :

#include <time.h>
clock_t startm, stopm;
#define START if ( (startm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define STOP if ( (stopm = clock()) == -1) {printf("Error calling clock");exit(1);}
#define PRINTTIME printf( "%6.3f seconds used by the processor.", ((double)stopm-startm)/CLOCKS_PER_SEC);

Ensuite, il suffit de l'utiliser avec :

main() {
  START;
  // Do stuff you want to time
  STOP;
  PRINTTIME;
}

En http://ctips.pbwiki.com/Timer

11voto

Thorsten79 Points 7975

Vous voulez un Profileur application.

Mots-clés de recherche chez SO et moteurs de recherche : profilage linux

3voto

ysth Points 54757

Jetez un coup d'œil à gettimeofday , clock_* ou get/setitimer .

2voto

Dark Shikari Points 6178

Essayez "bench.h" il vous permet de placer un START_TIMER ; et un STOP_TIMER("nom") ; dans votre code, ce qui vous permet d'étalonner arbitrairement n'importe quelle section de code (note : seulement recommandé pour les sections courtes, pas les choses qui prennent des dizaines de millisecondes ou plus). Il est précis au cycle d'horloge, bien que dans certains cas rares, il peut changer la façon dont le code entre les deux est compilé, dans ce cas vous êtes mieux avec un profileur (bien que les profileurs sont généralement plus d'effort à utiliser pour des sections spécifiques du code).

Il ne fonctionne que sur x86.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X