Chronométrer le code
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.
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:
C'est tout !
---
edit: correction de la fct stop qui avait un problème de valeur de retours. (un copier/coller malheureux)
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;
}
#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);
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)
Publicité