Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Chronometrer une execution

10 réponses
Avatar
Fanny Chevalier
Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?

10 réponses

Avatar
Anthony
Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?



Salut, en C standard, pour le temps précis, ca va être difficile...
Ca dépend fortement de ton système d'exploitation qui te permettra sûrement
de le faire. Sous unix par exemple il y a time (man time) qui fera ce que tu
veux.

Sinon tu peux toujours tenter avec clock() ou difftime() en ayant fais deux
appels à time(), ces fonctions étant dans <time.h> mais question précision,
c'est pas trop ca.

--
Anthony

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Fanny Chevalier wrote:

Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?


clock() mesure le temps d'utilisation du CPU en ticks. La macro
CLOCKS_PER_SEC aide à la conversion en secondes.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-library: http://www.dinkumware.com/htm_cl/index.html
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Marc Boyer
In article , Fanny Chevalier wrote:
Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?


Quel est le but ?
Si tu veux mesurer ton code, optimiser, il existe des
outils faits pour (gprof par exemple).
Si tu veux juste pouvoir dire que cela prend "n ms",
il faut voir la doc de ton OS, des appels systemes
dont le nom contient clock ou time ou ticks (fr.comp.os.[ton os])

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Richard Delorme
Emmanuel Delahaye a écrit:

Rien ne dit que le type retourné par difftime() est double.


????? Pardon ?
Le prototype de difftime est :
double difftime (time_t time1, time_t time0);
^^^^^^

--
Richard

Avatar
Éric Lévénez
Le 27/06/03 17:58, dans , « AG » a
écrit :

t1=time((void *)0);
printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));



Rien ne dit que le type retourné par difftime() est double.

printf("temps écoulé pour la boucle : %f sn", (double) difftime(t1,t0));


Ben je dois avoir de la même m... dans les yeux parce que j'ai pourtant
l'impression que mon bouquin me donne :

difftime

double difftime(time_t t1, time_t t0);

The function returns the difference t1 - t0, in seconds, between the
calendar time t0 and the calendar time t1.

ça doit être du C99, mais quand même. J'ai rêvé là ou quoi ?


difftime est et a toujours retourné un double, que ce soit dans ISO/IEC
9899:1990 ou en 9899:1999.

--
Éric Lévénez -- <http://www.levenez.com>
Unix is not only an OS, it's a way of life.



Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', Emmanuel Delahaye wrote:

printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));


Rien ne dit que le type retourné par difftime() est double.


En fait si, la norme! Désolé pour cette fausse alerte.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-library: http://www.dinkumware.com/htm_cl/index.html
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/


Avatar
AG
Fanny Chevalier wrote:
Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?



La librairie standard t'offre plusieurs fonction de manipulation du
temps, pourvue que ton système d'exploitation sache le gérer (sur
certain OS embarqué, il n'y à par forcément de gestion de temps).

par exemple :

#incldue <time.h>
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
int i;
time_t t0;
time_t t1;

t0 = time((void *)0);
for(i=0;i<1000000;i++)
{
printf("%dn",i);
}
t1=time((void *)0);
printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));

return EXIT_SUCCESS;
}

Après tu peux faire plein de trucs compliqués avec d'autres fonctions. A
toi de regarder. Tu risques d'être confronté à certains problèmes de
précisions si tu veux mesurer des temps trés petits. Il faudra peut être
changer de bibliothèque, non standard...

Bon codage.

Alexandre.

Avatar
AG
t1=time((void *)0);
printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));



Rien ne dit que le type retourné par difftime() est double.

printf("temps écoulé pour la boucle : %f sn", (double) difftime(t1,t0));


Ben je dois avoir de la même m... dans les yeux parce que j'ai pourtant
l'impression que mon bouquin me donne :

difftime

double difftime(time_t t1, time_t t0);

The function returns the difference t1 - t0, in seconds, between the
calendar time t0 and the calendar time t1.

ça doit être du C99, mais quand même. J'ai rêvé là ou quoi ?



Le problème de time() est qu'il mesure un temps d'horloge (wall clock) et non
un temps CPU comme le fait clock(). Sur un système multitâche chargé, ça
risque de faire une différence notable.


Ben oui mais bon, chacun ses problèmes. Moi pour ce que je fais, ça me
va trés bien.


Manu au taquet, comme d'hab... ça fait plaisir. T'as moins de boulo en
ce moment ?


Avatar
Fanny Chevalier
Marc Boyer wrote:

In article , Fanny Chevalier wrote:


Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?




Quel est le but ?
Si tu veux mesurer ton code, optimiser, il existe des
outils faits pour (gprof par exemple).
Si tu veux juste pouvoir dire que cela prend "n ms",
il faut voir la doc de ton OS, des appels systemes
dont le nom contient clock ou time ou ticks (fr.comp.os.[ton os])

Marc Boyer


Ca serait plus pour mesurer mon code... Je vais essayer gprof...

Merci.


Avatar
NACIRI Youssouf
On Fri, 27 Jun 2003, AG wrote:

Fanny Chevalier wrote:
Je voudrais chronometrer le temps precis d'execution d'une application C.
Comment puis-je faire ?



La librairie standard t'offre plusieurs fonction de manipulation du
temps, pourvue que ton système d'exploitation sache le gérer (sur
certain OS embarqué, il n'y à par forcément de gestion de temps).

par exemple :

#incldue <time.h>
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
int i;
time_t t0;
time_t t1;

t0 = time((void *)0);
for(i=0;i<1000000;i++)
{
printf("%dn",i);
}
t1=time((void *)0);
printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));

return EXIT_SUCCESS;
}

Après tu peux faire plein de trucs compliqués avec d'autres fonctions . A
toi de regarder. Tu risques d'être confronté à certains problèmes de
précisions si tu veux mesurer des temps trés petits. Il faudra peut être
changer de bibliothèque, non standard...

Bon codage.

Alexandre.





C'est un peu complique pour rien, je prefere cette version :


#include <time.h>
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
int i;
time_t t0;
time_t t1;

time(&t0);
for(i=0;i<1000000;i++)
{
printf("%dn",i);
}
time(&t1);
printf("temps écoulé pour la boucle : %f sn",difftime(t1,t0));

return EXIT_SUCCESS;
}


Divide ut regnes.
Divise afin de regner

Youssouf