Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-39%
Le deal à ne pas rater :
Pack Home Cinéma Magnat Monitor : Ampli DENON AVR-X2800H, Enceinte ...
1190 € 1950 €
Voir le deal

recherche de temps d'éxécution du programme

2 participants

Aller en bas

recherche de temps d'éxécution du programme Empty recherche de temps d'éxécution du programme

Message  nouveau-programmeur Lun 23 Fév 2009 - 13:44

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.
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
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  -ed- Lun 23 Fév 2009 - 21:15

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");
}
Je rappelle que rien n'est exécuté après un return...

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;
}
donne
Code:

difference : 2.000000 secondes

Process returned 0 (0x0)  execution time : 2.031 s
Press any key to continue.
Mais je recommande plutôt l'usage de clock() pour les mesures de temps CPU.
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  nouveau-programmeur Mer 25 Fév 2009 - 22:32

merci
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
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  -ed- Jeu 26 Fév 2009 - 13:08

nouveau-programmeur a écrit:mais je n'ai pas trouvé dans le forum comment peut on la définir.
Définir quoi ?
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  nouveau-programmeur Ven 6 Mar 2009 - 1:25

Comment utiliser la fonction clock() svp ?
pourriez me fournir un exemple?

nouveau-programmeur
Bavard
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  -ed- Ven 6 Mar 2009 - 11:53

nouveau-programmeur a écrit:Comment utiliser la fonction clock() svp ?
pourriez me fournir un exemple?
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 :
Code:
clock_t start = clock();
puis après exécution :
Code:
clock_t stop = clock();
ensuite, on fait la différence :
Code:
clock_t nb_ticks = stop - start;
ce qui exprime la durée en nombre de ticks.

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;
Pour l'exprimer en milli-secondes, il suffit de multiplier par 1000 etc.

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).
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  nouveau-programmeur Jeu 12 Mar 2009 - 23:58

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

nouveau-programmeur
Bavard
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  -ed- Ven 13 Mar 2009 - 11:54

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
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...
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  nouveau-programmeur Ven 20 Mar 2009 - 0:07

-ed- a écrit:
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
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...
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 confused
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
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  -ed- Ven 20 Mar 2009 - 12:22

nouveau-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 confused
Normal, le format pour afficher un double n'est pas "%ld", mais "%e", "%f" ou "%g". D'autre part, si tu ne mets rien entre
Code:
    start = clock();
et
Code:
    end = clock();
je ne vois pas ce qu'on mesure...

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;
}
donne :
Code:

CPU = 1.677ms
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  nouveau-programmeur Ven 20 Mar 2009 - 13:15

merci beaucoup -ed- pour votre aide précieuse.
Encore merci

nouveau-programmeur
Bavard
Bavard

Messages : 30
Date d'inscription : 23/02/2009

Revenir en haut Aller en bas

recherche de temps d'éxécution du programme Empty Re: recherche de temps d'éxécution du programme

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser