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 :

mesure le temps d'exécution d'un traitement


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut mesure le temps d'exécution d'un traitement
    Bonjour,
    Je voulais mesurer le temps d'exécution d'une partie donnée de mon programme C sous Visual Studio 2008.
    Mais, je ne voulais pas tenir compte d'une sous partie de cette partie donnée.

    Voici ma proposition :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include<time.h>
     
    int main()
    {
     double fin,debut,debut1,fin1;
     
    debut = clock();
     
    //Le traitement
    ...........
    ...........
    //le traitement à exclure
    debut1 = clock();
    ............
    ...............
    fin1=clock();
    //fin de traitement à exclure
    //suite de premier traitement 
    ...........
    ..............
    fin=clock();
    //fin de premier traitement
     
    fprintf(stderr, "temps : %f\n", (double)(fin-debut) / (double) CLOCKS_PER_SEC);
    fprintf(stderr, "temps : %f\n", (double)(fin1-debut1) / (double) CLOCKS_PER_SEC);
    fprintf(stderr, "temps : %f\n", ((double)(fin-debut) - (double)(fin1-debut1))/ (double) CLOCKS_PER_SEC);
     
    return 0;
    }
    il m'affiche :

    temps : 0.000000
    temps : 0.000000
    temps : 0.000000

    Que proposez vous ?

    Merci.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    La fonction clock ne renvoie pas un temps absolu, mais une durée d'utilisation processeur.

    Sous windows, on peut utiliser la fonction GetTickCount() qui renvoi le nombre de millisecondes écoulée depuis le démarrage.

  3. #3
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    La fonction clock() renvoie une valeur de type clock_t et non de type double.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    clock_t now = clock();
    /*traitement */
    fprintf(stderr,"\nTemps CPU : %.2f secondes \n",(double) (clock() - now) / CLOCKS_PER_SEC);


    Est ce que on ajoute (double) avant CLOCKS_PER_SEC ? Et pourquoi non ?

    Sous windows, on peut utiliser la fonction GetTickCount() qui renvoi le nombre de millisecondes écoulée depuis le démarrage.
    Quel démarrage ? Est ce que on peut démarrer dans une partie de programme ?

    Comment on utilise GetTickCount () dans le code au dessus de clock()?

    Avez vous un argument ou justification que la fonction clock() est moins ou plus précise que les autres ?

    Merci.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par siempre Voir le message
    Quel démarrage ? Est ce que on peut démarrer dans une partie de programme ?

    Comment on utilise GetTickCount () dans le code au dessus de clock()?

    Avez vous un argument ou justification que la fonction clock() est moins ou plus précise que les autres ?
    Le démarrage de l'ordinateur.

    Pour l'utiliser, c'est simple :

    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
    16
    17
    18
    #include <stdio.h>
    #include <windows.h>
    int main(void) 
    {
        DWORD start, end;
     
        start = GetTickCount();
     
        /* appel d'une fonction longue */
        ma_fonction();
     
        end = GetTickCount();
     
        /* affichage de temps mis par la fonction pour s'exécuter */
        printf("ma_fonction a mis %dms\n", end-start);
     
        return 0;
    }

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    - Le temps de GetTickCount() est en secondes ou millesecondes ?

    - Le résultat C'est un entier ou un float ?

    - GetTickCount mesure quel type de temps CPU ou autre temps ?

    Merci.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par msdn
    Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days. (link)
    Le résultat est un DWORD (entier non signé 32 bits) (0 à ~4x10^9)

    Le temps renvoyé est absolu. (il court même si la fonction n'utilise pas (ou très peu) le processeur)

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par siempre Voir le message
    Bonjour,

    - Le temps de GetTickCount() est en secondes ou millesecondes ?

    - Le résultat C'est un entier ou un float ?

    - GetTickCount mesure quel type de temps CPU ou autre temps ?

    Merci.
    Tout est dabs la doc de la fonction. Sinon, tu peux également utiliser les timers de la Glib.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    La fonction clock ne renvoie pas un temps absolu, mais une durée d'utilisation processeur.
    C'est quoi le temps absolu et le temps d'exécution ? Quelle est la différence entre les deux ?

    Je voulais mesurer le temps d'exécution donc quelle fonction de temps à utiliser pour nous donner un temps précise ?

    Merci.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2

Discussions similaires

  1. Mesurer temps d'exécution d'un traitement dans un script shell
    Par AJ_ing dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/07/2012, 14h59
  2. [TP] Mesure du temps d'exécution d'un algorithme
    Par williamdunord dans le forum Turbo Pascal
    Réponses: 19
    Dernier message: 18/05/2007, 06h47
  3. Mesurer le temps d'exécution d'un bout de code
    Par Floréal dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2007, 09h46
  4. mesurer le temps d'exécution d'une fonction
    Par Fonzy007 dans le forum C
    Réponses: 12
    Dernier message: 28/12/2006, 17h27
  5. Réponses: 6
    Dernier message: 22/09/2005, 16h59

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