Chronométrer le code

Publié le par JJ

Bon autant l'avouer tout de suite j'ai la flemme de penser sérieusement aux sockets que je vous ai promis: c'est assez long et j'ai du mal à extraire la substantifique moelle pour faire quelque chose de lisible sur un blog. Voilà on en parlait l'autre jour je vous propose aujourd'hui un petit truc que j'emprunte à mes professeurs: des petites routines pour chronométrer.

Au passage la catégorie change de nom...

Bon qu'est ce qu'on peut faire avec ce bout de code? rien. on n'a pas une précision diabolique: la miniseconde. Cependant pour l'évaluation de la durée d'exécution de code sur des temps de calculs longs c'est amplement suffisant. En fait on peut facilement faire mieux surtout sous unix, il n'y a pas besoin de beaucoup creuser.


Pour les windowsiens qui ne pourront pas utiliser gettimeofday() je propose  GetTickCount() qui vous demandera d'inclure windows.h essayez et vous verrez!

voilà le code: les commentaires sont ouverts.


#include <sys/time.h>
#include <string.h>

struct timeval tim;
double t1, t2;

/* pour demarer le décompte on ajoute à son code  */
void  chrono_start(){
         gettimeofday(&tim, NULL);
         t1=tim.tv_sec+(tim.tv_usec/1000000.0);
}

/* pour arreter le décompte un sime appel à stop suffit */
double  chrono_stop(){
        gettimeofday(&tim, NULL);
        t2=tim.tv_sec+(tim.tv_usec/1000000.0);
        return t2 - t1;
}

Bon si je manque d'inspiration un jour je vous proposerais un exercice pour rendre le code réentrant  et portable  (c'est à dire utilisable en thread et sur windows);

apres il suffit de faire:
chrono_start();
ma_fonction(...);
duree = chrono_stop();

printf("Durée d'execution %f \n", duree);

C'est tout !

---
edit: correction de la fct stop qui avait un problème de valeur de retours. (un copier/coller malheureux)

Publié dans Divers

Commenter cet article

fantomas62 28/05/2006 09:38

Pour unix(et donc linux), tu peux utiliser la commandetime. Allez voir :[code]man time[/code]

JJ 13/12/2006 18:43

oui oui oui.time mesure la durée d'exécution d'un processus. pas seulement la fonction que tu souhaites...

djed 19/04/2006 14:54

et ta quoi a proposer pour les unixiens??

JJ 23/04/2006 12:03

Si unix-like te suffit (linux) gettimeofday() est parfais, je n'ai pas travaillé sur des systemes 100% unix. Je chercherai.