Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/03/2007, à 15:18

LaFouine1986

[RESOLU] C problème mesure de temps avec clock()

Bonjour à toutes et tous !

Voilà, j'essaie de mesurer le temps qui s'écoule lors de l'éxécution de mon programme. J'ai lu que la fonction clock() permettait les mesures.

int main(){
double temps;
clock_t start;
clock_t end;
	start=clock();
// instructions
end=clock();
temps=((double)end - (double)start)/CLOCKS_PER_SEC;
printf("temps execution %lf \n",temps);

Mais voilà, le problème c'est que ca m'affiche toujours pareil, à savoir 0.000000000

J'ai mis aussi un sleep(1) juste avant l'instruction end mais aucun changement.

Merci d'avance pour votre aide !

Dernière modification par LaFouine1986 (Le 21/03/2007, à 20:03)

Hors ligne

#2 Le 16/03/2007, à 15:33

Gari

Re : [RESOLU] C problème mesure de temps avec clock()

Pour gérer le temps d'exécution d'un programme, tu dois utiliser la fonction gettimeofday.
Un "man gettimeofday" te permettra d'obtenir toutes les infos que tu souhaites (le C est bien documenté, lui tongue).

Hors ligne

#3 Le 16/03/2007, à 16:08

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

Bonjour,

merci pour la rapidité de réponse !
j'ai cherché pour gettimeofday, ca semble correspondre en effet, par contre je ne comprends pas ses arguments... même dans le man francais.

Merci pour les éclaircissements,

Hors ligne

#4 Le 16/03/2007, à 21:15

foobar

Re : [RESOLU] C problème mesure de temps avec clock()

Le premier argument est un struct qui contient le temps en secondes et en microsecondes de depuis 1970, c'est la fonction qui va te mettre les bonnes valeurs. Pour le second tu mets toujours NULL. Je vois pas ce qu'il faut savoir de plus.

Pour ce qui est de clock (), d'apres le manuel c'est le temps processeur utilise. Donc si tu fais un sleep () entre les deux, c'est normal que ca reste a 0.

#5 Le 16/03/2007, à 22:12

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

oki, je comprends mieux l'histoire de clock...
Voici comment je fais pour gettimeofday(), (code exemple pris sur un site)

#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>

int
main()
struct timeval tv1,tv2;
struct timezone tz;
long long diff;
int i;
gettimeofday(, );
for (i=1;i<10000;i++) /* code à timer */
gettimeofday(, );
diff=(tv2.tv_sec-tv1.tv_sec) * 1000000L + par
(tv2.tv_usec-tv1.tv_usec);
printf("durée=%d usecn",diff);

et là il n'en veut pas, les arguments ne lui plaisent pas du tout...

Hors ligne

#6 Le 16/03/2007, à 22:34

abetsic

Re : [RESOLU] C problème mesure de temps avec clock()

Pour mesurer le temps d'execution de ton programme tu as d'autres possibilités comme l'utilisation de "time" :

time ton_programme

Pour aller un peu plus loin tu peux compiler en rajoutant un flag pour faire du profiling qui va t'indiquer quelles sont les fonctions le plus utilisées et le temps passé dans chaque fonction
l'option à passer à gcc est "-pg", tu lances ton programme puis tu utilises gprof pour voir les résultats :

gprof ton_programme

Hors ligne

#7 Le 16/03/2007, à 23:13

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

merci beaucoup pour l'info gprof, en effet, très pratique et plus complet que simplement time().
Malheureusement, en fait, j'ai un programme avec des threads qui représentent des clients qui passent des commandes, je vous passe les détails, et je dois mesurer, par exemple, le temps d'attente de chacun d'eux entre le moment où ils commandent et le moment où ils sont servis et repartent...

N'hésitez pas à donner des idées !

Hors ligne

#8 Le 16/03/2007, à 23:47

Gari

Re : [RESOLU] C problème mesure de temps avec clock()

LaFouine1986 a écrit :
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>

int
main()
struct timeval tv1,tv2;
struct timezone tz;
long long diff;
int i;
gettimeofday(, );
for (i=1;i<10000;i++) /* code à timer */
gettimeofday(, );
diff=(tv2.tv_sec-tv1.tv_sec) * 1000000L + par
(tv2.tv_usec-tv1.tv_usec);
printf("durée=%d usecn",diff);

et là il n'en veut pas, les arguments ne lui plaisent pas du tout...

Heu tu ne mets rien dans la fonction gettimeofday... C'est normal que ça ne fonctionne pas !
D'après le man, la structure tz est obsolète (tu peux donc la virer en la remplaçant par NULL)
Dans le gettimeofday, tu dois mettre l'adresse de la structure à passer, ici &tv1 ou &tv2 (je suis persuadé que c'était ça ton erreur : tu devais tenter de passer les variables et non leurs adresses).
Et quand tu dis "les arguments lui plaisent pas du tout", il serait judicieux qui est "lui" et d'indiquer les messages d'erreurs que "lui" dit.
Je n'ai pas vérifié ton calcul, mais je le trouve bizarre à vue de nez.

Tiens nous au courant smile

Hors ligne

#9 Le 17/03/2007, à 00:11

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

ok, "lui" n'est rien d'autre que mon cher terminal... C'est juste que débuter avec linux, et dans de la programmation, des fois on ne saisit plus trop ce qui est affiché comme message...

Sinon, alors j'ai fait comme tu m'as dit, en effet, j'ai mis NULL en second argument, et &tv1 et &tv2 en fonction de l'appel dans le programme. Pas d'erreur, par contre j'ai toujours 0.0000. Mais, je ne vois pas ce qu'est la fonction par, à mon avis il en manque un bout je l'ai donc enlevé sinon on a une erreur

référence indéfinie vers « par »
collect2: ld returned 1 exit status

mais cela explique le fait que l'affichage est à 0.0000

Merci d'avance pour votre aide et votre patience ^^

Hors ligne

#10 Le 17/03/2007, à 00:24

Gari

Re : [RESOLU] C problème mesure de temps avec clock()

Ton *TERMINAL* ? Tu veux dire, gcc ? Enfin, je suppose que tu utilises gcc. gcc affiche des informations dans le terminal, certes, mais ce qui est intéressant, c'est de savoir que ça vient de gcc smile

Et sinon pour ton problème : la fonction "par", je ne sais pas ce que c'est. C'est toi qui l'utilise, pas moi ! J'ai comme l'impression que tu utilises des trucs sans comprendre en fait :s...

Finalement, le fait que l'affichage soit toujours à 0.000, c'est normal : tu n'as toujours pas réussi à recompiler ton programme, puisqu'il y a des erreurs. Donc, celui que tu lances, c'est le vieux. (pour t'en convaincre, détruis l'exécutable : il ne sera régénérer que lorsque ta compilation ne fera plus d'erreur).

Une fois que ta compilation passe, si tu as toujours des problèmes redonne-nous :
- le source de ton programme (le code COMPLET, n'enlève pas des bouts !).
- la ligne de commande (gcc) utilisée pour le compiler.

Hors ligne

#11 Le 17/03/2007, à 00:56

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

bonsoir,

alors, je pense que j'ai enfin trouvé, ca venait du type des variables. Voici la solution que j'ai et qui semble marcher, je ferais des tests demain et je vous tiendrais au courant

int main(){
struct timeval tv1,tv2;
struct timezone tz;
int diff1,diff2;
gettimeofday(&tv1,NULL);
...//instructions
gettimeofday(&tv2,NULL);
diff1=(tv2.tv_sec-tv1.tv_sec);
diff2=(tv2.tv_usec-tv1.tv_usec)/1000;
printf("durée=%d sec %d usecn \n",diff1,diff2);

les résultats affichés semblent cohérents en tout cas...

merci beaucoup pour l'aide précieuse !

Hors ligne

#12 Le 21/03/2007, à 16:13

micrinfo

Re : [RESOLU] C problème mesure de temps avec clock()

salut

quand j'essaie ton programme, j'obtiens le message d'erreur suivant:
  [Linker error] undefined reference to `gettimeofday'

Pourquoi? (je suis débutant...:/)
J'ai remarqué que le gettimeofday n'était pas défini dans le sys\time.h
Où est-ce qu'il faut que je le définisse et comment?

Merci pour vos réponses!:rolleyes:

tchao

#13 Le 21/03/2007, à 20:01

LaFouine1986

Re : [RESOLU] C problème mesure de temps avec clock()

bonjour !

Alors, je ne sais pas pourquoi ca ne marche pas, peut etre le / pas dans le bon sens... car quand on fait  man gettimeofday il affiche bien
#include <sys/time.h>

bon courage !

Hors ligne