recherche de temps d'éxécution du programme
2 participants
Page 1 sur 1
recherche de temps d'éxécution du programme
Bonjour,
je sollicite votre aide pour déterminer le temps d'exécution(CPU) d'un programme quelconque en langage c.
J'ai essayer ce code mais rien ne se passe.
Merci d'avance pour votre aide.
je sollicite votre aide pour déterminer le temps d'exécution(CPU) d'un programme quelconque en langage c.
J'ai essayer ce code mais rien ne se passe.
Merci d'avance pour votre aide.
- Code:
#include <stdio.h>
#include <time.h>
#include <unistd.h> /* sleep() */
main() {
time_t t1, t2;
t1 = time(NULL);
sleep(2); /* attente de 2 secondes */
t2 = time(NULL);
printf("difference : %lf secondes\n", difftime(t2, t1) );
return 0;
system("pause");
}
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Re: recherche de temps d'éxécution du programme
Je rappelle que rien n'est exécuté après un return...nouveau-programmeur a écrit:je sollicite votre aide pour déterminer le temps d'exécution(CPU) d'un programme quelconque en langage c.
J'ai essayer ce code mais rien ne se passe.
- Code:
<...>
return 0;
system("pause");
}
Avec Code::Blocks :
- Code:
/* http://delahaye.emmanuel.free.fr/clib */
#include "psleep/inc/psleep.h"
#include <stdio.h>
#include <time.h>
int main (void)
{
time_t t1, t2;
t1 = time (NULL);
msleep (2000); /* attente de 2 secondes */
t2 = time (NULL);
printf ("difference : %f secondes\n", difftime (t2, t1));
return 0;
}
- Code:
difference : 2.000000 secondes
Process returned 0 (0x0) execution time : 2.031 s
Press any key to continue.
Re: recherche de temps d'éxécution du programme
merci
mais je n'ai pas trouvé dans le forum comment peut on la définir.
Merci de m'indiquer l'url.
Merci encore
mais je n'ai pas trouvé dans le forum comment peut on la définir.
Merci de m'indiquer l'url.
Merci encore
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Re: recherche de temps d'éxécution du programme
Définir quoi ?nouveau-programmeur a écrit:mais je n'ai pas trouvé dans le forum comment peut on la définir.
Re: recherche de temps d'éxécution du programme
Comment utiliser la fonction clock() svp ?
pourriez me fournir un exemple?
pourriez me fournir un exemple?
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Re: recherche de temps d'éxécution du programme
clock() retourne un nombre de ticks d'horloge depuis le début de l'exécution du programme. Il suffit donc de noter la valeur avant exécution du code à tester :nouveau-programmeur a écrit:Comment utiliser la fonction clock() svp ?
pourriez me fournir un exemple?
- Code:
clock_t start = clock();
- Code:
clock_t stop = clock();
- Code:
clock_t nb_ticks = stop - start;
Ensuite, pour convertir en temps, on utilise la constante standard CLOCKS_PER_SEC définie dans <time.h> (pour être certain que la division soit réelle et non entière, on force un des membres en double) :
- Code:
double duree_sec = (double) nb_ticks / CLOCKS_PER_SEC;
Je te laisse faire les expérimentations nécessaires et en déduire le bon code. Attention la résolution (nombre de ticks par seconde) peut être faible. Il faut donc parfois multiplier le nombre de tests pour avoir un résultat significatif (sinon, on a systématiquement 0).
Re: recherche de temps d'éxécution du programme
en codeblocks le temps d'éxecution affiché sur le console correspond bien au cpu , non?
Pourquoi le cpu change d'un essai d'exécution à un autre malgé qu'on ne change rien dans le programme ?
Merci
Pourquoi le cpu change d'un essai d'exécution à un autre malgé qu'on ne change rien dans le programme ?
Merci
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Re: recherche de temps d'éxécution du programme
Probablement parce que la mesure est imprécise si la durée est courte. Pour être significative, il faut une durées > 1 seconde. Pour ça, on fait des boucles ... Si pour faire 1000 essais, il fallu 1.234 secondes, on en déduit que le code met 1.234 ms à s'effectuer...nouveau-programmeur a écrit:en codeblocks le temps d'éxecution affiché sur le console correspond bien au cpu , non?
Pourquoi le cpu change d'un essai d'exécution à un autre malgé qu'on ne change rien dans le programme ?
Merci
Re: recherche de temps d'éxécution du programme
Merci.-ed- a écrit:Probablement parce que la mesure est imprécise si la durée est courte. Pour être significative, il faut une durées > 1 seconde. Pour ça, on fait des boucles ... Si pour faire 1000 essais, il fallu 1.234 secondes, on en déduit que le code met 1.234 ms à s'effectuer...nouveau-programmeur a écrit:en codeblocks le temps d'éxecution affiché sur le console correspond bien au cpu , non?
Pourquoi le cpu change d'un essai d'exécution à un autre malgé qu'on ne change rien dans le programme ?
Merci
J'ai essayé avec l'exmple suivant. Le CPU affiché sur la console est 0.032s mais dans le fichier de sortie est 0.
C'est bizarre non? malgré que j'ai multiplié par 10000
- Code:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main()
{
clock_t start, end;
double cpu_time_used;
start = clock();
end = clock();
cpu_time_used = (((double) (end - start)) / CLOCKS_PER_SEC)*10000;
int a, b, c, d;
printf("donner les valeurs de a\n");
printf("donner les valeurs de b\n");
printf("donner les valeurs de c\n");
printf("donner les valeurs de d\n");
freopen ("fichier.txt", "r", stdin);
scanf("%d\n",&a);
scanf("%d\n",&b);
scanf("%d\n",&c);
scanf("%d\n",&d);
freopen("file.txt", "w", stdout);
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
printf("CPU=%ld\n", cpu_time_used);
return 0;
}
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Re: recherche de temps d'éxécution du programme
Normal, le format pour afficher un double n'est pas "%ld", mais "%e", "%f" ou "%g". D'autre part, si tu ne mets rien entrenouveau-programmeur a écrit:J'ai essayé avec l'exmple suivant. Le CPU affiché sur la console est 0.032s mais dans le fichier de sortie est 0.
C'est bizarre non? malgré que j'ai multiplié par 10000
- Code:
start = clock();
- Code:
end = clock();
Enfin, on ne met pas de '\n' dans un scanf(), la séquence de code est illogique ...
Ceci
- Code:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define ESSAIS 1000
int main (void)
{
int i;
clock_t start = clock ();
freopen ("in.txt", "r", stdin);
for (i = 0; i < ESSAIS; i++)
{
int a, b, c, d;
printf ("donner les valeurs de a\n");
scanf ("%d", &a);
printf ("donner les valeurs de b\n");
scanf ("%d", &b);
printf ("donner les valeurs de c\n");
scanf ("%d", &c);
printf ("donner les valeurs de d\n");
scanf ("%d", &d);
printf ("%d", a);
printf ("%d", b);
printf ("%d", c);
printf ("%d", d);
}
freopen ("out.txt", "w", stdout);
{
double cpu_time_used =
(((clock () - (double) start)) / CLOCKS_PER_SEC) * 1000;
printf ("CPU = %gms\n", cpu_time_used / ESSAIS);
}
return 0;
}
- Code:
CPU = 1.677ms
Re: recherche de temps d'éxécution du programme
merci beaucoup -ed- pour votre aide précieuse.
Encore merci
Encore merci
nouveau-programmeur- Bavard
- Messages : 30
Date d'inscription : 23/02/2009
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|