IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

temps d'execution d'un programme


Sujet :

C

  1. #1
    Invité(e)
    Invité(e)
    Par défaut temps d'execution d'un programme
    Salut a tous,
    Je voudrais savoir comment on peut calculer le temps d'execution de mon programme,est ce qu'il y'a une fonction pour ça ?
    (un programme quelquonque)
    merci

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <time.h>
     
    int main (void)
    {
      time_t start, end;
     
      start = time (NULL);
      {
        /* Portion de code a chronometrer */
      }
      end = time (NULL);
      printf ("Temps en secondes : %ld\n", end - start);
      return 0;
    }
    Si le code dure moins d'une seconde (précision de la fonction time), vous pouvez effectuer plusieurs appels dans une boucle for sans oublier de diviser le temps d'exécution d'autant.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut dd
    si on veut que ça soit en 1/100;
    pour etre plus preci

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par brakeche
    si on veut que ça soit en 1/100;
    pour etre plus preci
    Pas en C standard, j'ai ça qui traine en utilisant la glib :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    GTimer timer = g_timer_new ();
     
    g_timer_start (timer);
    {
      /* Code à chronométrer */
    }
    g_timer_stop (timer);
    printf ("Temps ecoule : %f\n", g_timer_elapsed (timer, NULL));
    g_timer_destroy (timer);
    Avec une résolution de l'ordre de la microseconde (1/1000000 de seconde).

    En dernier recour il reste les fonctions spécifiques au système (il doit surement y avoir des posts à ce sujet qui traine sur le forum Recherche)

  5. #5
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Pour faire des benchs, j'utilise gettimeofday() dont la precision est la microseconde

    http://man.developpez.com/man2/gettimeofday.2.php

    1) Recuperation du temps
    2) Deroulement du programme
    3) Rerecuperation du temps et calcul de la difference. Pour se faire il faut d'abord convertir les 2 timeval en microsecondes.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gege2061
    time() mesure du temps horloge (wallclock). Pour du temps CPU, il faut utiliser clock() et CLOCKS_PER_SEC qui sont faits pour ça...
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre actif Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Points : 278
    Points
    278
    Par défaut
    vous pouvez utiliser ftime(struct timeb *) dans la bibliothèque <sys/timeb.h>
    timeb est une structure de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct timeb {
          long  time;
          short millitm;
          short timezone;
          short dstflag;
          };
    avec une precision en milliseconde.

    pour plus d'information voir : http://man.developpez.com/man3/ftime.3.php

    pour encore une meilleur précision tu peux regarder ce site.
    http://haypo.developpez.com/article/frequence_cpu/
    il faudras une peut d'imagination.

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    time() mesure du temps horloge (wallclock). Pour du temps CPU, il faut utiliser clock() et CLOCKS_PER_SEC qui sont faits pour ça...
    je n'avais pas pensé à ça, merci

    [edit]correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>
    #include <time.h>
     
    int main (void)
    {
      clock_t start, end;
     
      start = clock ();
      {
        /* Portion de code a chronometrer */
      }
      end = clock ();
      printf ("Temps en secondes : %f\n", (end - start) / (double)CLOCKS_PER_SEC);
      return 0;
    }
    Mais dans ce cas la précision est d'au moins 1 seconde. Sur mon PC elle est de l'ordre de la microseconde mais je pense que ce n'est pas standard ?
    [/edit]

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gege2061
    <clock()> Mais dans ce cas la précision est d'au moins 1 seconde.
    Non. La précision est définie pat l'implémentation (implementation-dependent).
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Temps d'execution d'un programme
    Par rutabagas dans le forum Lisp
    Réponses: 8
    Dernier message: 24/12/2007, 16h41
  2. Réponses: 6
    Dernier message: 27/07/2007, 18h38
  3. Temps D'execution D'un Programme
    Par hamska2 dans le forum C
    Réponses: 14
    Dernier message: 09/05/2007, 18h14
  4. temps d'execution d'un programme multithread
    Par La taupe dans le forum C
    Réponses: 2
    Dernier message: 10/01/2007, 17h44
  5. Réponses: 5
    Dernier message: 19/06/2006, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo