GNT sans publicité, site mobile, fonctionnalitées exclusives...

clock() temps écoulé et printf

Le
pere.noel
si je mesure le temps écoulé par :

clock_t start, stop;

[]
start = clock();
[]
printf();

stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %f", elapsed);

j'obtiens :
Temps écoulé : 0.030000

donc 30 ms.

MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.

donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?

question annexe :

j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?

j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)

--
une bévue
Lire les 12 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Maurette
Le #967518
si je mesure le temps écoulé par :

clock_t start, stop;

[...]
start = clock();
[...]
printf(...);

stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);

j'obtiens :
Temps écoulé : 0.030000

donc 30 ms.

MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.

donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?


Vous faites:

.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....

et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).

question annexe :

j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?

j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)


La norme ne définit que CLOCKS_PER_SEC dans ce domaine. Mais quel
serait l'intérêt ? Donner "par seconde" est plus précis. Après, vous
pouvez faire:
#define CLOCKS_PER_MILLISEC (CLOCKS_PER_SEC / 1000)
ou
#define FDCLOCKS_PER_MILLISEC ((double)CLOCKS_PER_SEC / 1000)

Chez moi, CLOCKS_PER_SEC vaut 1000.

--
Pierre Maurette

pere.noel
Le #967517
Pierre Maurette
Vous faites:

.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....

et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).



Ah mais je ne dis pas que ça ne marche pas, ce qu'il y a c'est qu'entre
mon "start = clock();" et mon "stop = clock();" il y a un printf dans
une boucle qui sort 689 lignes et, il me semble, que tout se passe comme
si les 689 printf étaient mis dans un buffer qui se débrouille tout seul
et donc que le temps total d'éxécution n'est pas le temps "percu" au
terminal.
question annexe :

j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?

j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)


La norme ne définit que CLOCKS_PER_SEC dans ce domaine.
ok, c'est bien ce que je sipputais...


--
une bévue


pere.noel
Le #967515
Pierre Maurette
Vous faites:

.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....

et vous compter 10 secondes.


bon j'ai mis la ligne de pause à :
system("sleep 10");

et j'obtiens bien 10 s de pause

MAIS le résultat est :
Temps écoulé : 0.010000
donc avec un facteur 1000 dans le nez )))

ça ne peut-être qu'un pb au niveau de la ligne :
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;

que je ne comprend pas très bien je dois dire car j'ai :
clock_t start, stop;
double elapsed;
ce que je ne comprends pas c'est le cast :

((double)stop - start)

est-ce qu'il caste la différence de stop - start ou seulement stop ?
j'ai piqué cette ligne sur developpez.

j'ai casté différemment :

elapsed = (double) (stop - start) / (double)CLOCKS_PER_SEC;

ça ne change rien au résultat...

par ailleurs j'ai :
CLOCKS_PER_SEC : 100.000000

mystère et boules de gomme ?
--
une bévue

Stéphane Goujet
Le #967514

clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);


Si elapsed est un double, il faut l'afficher avec %lf.


j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?


Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).

A+,
Stéphane.

pere.noel
Le #967513
Stéphane Goujet

Si elapsed est un double, il faut l'afficher avec %lf.


ah bon ?
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))

mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...


j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?


Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).


ah d'accord, et par exemple alors, quand je fais un printf c'est en
qqsorte du temps en *** dehors *** du prog ? ie un autre process
s'occupe de ça (je pense que oui sous *nix)...

j'essaire avec time, date ou equivalent.

merci, j'ai pigé qqc !
--
une bévue


Publicité
Suivre les réponses
Poster une réponse
Anonyme