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 du temps ecoulé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut mesure du temps ecoulé
    Bonsoir

    j'ai besoin de mesurer le temps CPU sous linux d'un morceau de code specifique d'un programme en C

    sous windows la fonction clock() marche bien sous cette forme

    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
    #include <stdio.h>
    #include <time.h>
     
     
    int main(void)
    {
        clock_t start, end;
        double elapsed;
     
     
        start = clock();                                  /* Lancement de la mesure */
     
     
        /* ... */                                         /* Faire quelque chose    */
     
     
        end = clock();                                    /* Arret de la mesure     */
     
     
        elapsed = ((double)end - start) / CLOCKS_PER_SEC; /* Conversion en seconde  */
     
     
        printf("%.2f secondes entre start et end.\n", elapsed);
     
     
        return 0;
    }
    mais sous linux le temps mesurer c'est 0.00000 secondes

    merci de m aider

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    clock() retourne un temps CPU en micro-secondes.

    Apres c'est une approximation , mais il est possible que ton code soit plutôt rapide.

    rajoute cela et tu verra des nombres =P

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i = 0;i <1000000;i++) printf("a");
    Par contre des 'int' suffit largement^^

  3. #3
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    je peux vous demander pourquoi cette boucle et que signifie 'a' merci bien

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Rien en soi.

    As-tu essayé de mesurer toi-même, de tête, la durée d'exécution de ton programme ? Parce que s'il s'exécute en moins d'une seconde, et que tu utilises des entiers pour les comptabiliser, c'est normal qu'il affiche « 0 » !

    La boucle en question est juste là pour faire travailler ton programme suffisamment longtemps pour voir si le calcul se fait quand même sur le long terme ou s'il y a un bug ailleurs.

  5. #5
    Membre actif
    Inscrit en
    Mars 2009
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 47
    Par défaut
    oui lorsque j'ajoute votre boucle la mesure du temps me donne qlq num
    mais j'ai essayé de modifier la ligne de calcule du temps par:

    elapsed = (((double)end - start)/CLOCKS_PER_SEC)*1000

    mais toujours j'obtient 0

    sinon le temps calculé manuellement c'est 3.275s

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    clock() renvoie un nombre en microsecondes, mais à en fait une précision bien inférieur. Ca dépend des systèmes, mais en général tu ne pourras pas mesurer des temps de moins de 10 millisecondes.

    Si tu veux des temps plus précis, tu peux utiliser gettimeofday() qui a une vraie précision d'une microseconde. Par contre ça renvoit le "wall clock time", donc tu aura le "vrai" temps écoulé mesuré comme avec un chronomètre, pas le temps CPU consommé par ton morceau de code.

  7. #7
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par rimie_rimie Voir le message
    oui lorsque j'ajoute votre boucle la mesure du temps me donne qlq num
    mais j'ai essayé de modifier la ligne de calcule du temps par:

    elapsed = (((double)end - start)/CLOCKS_PER_SEC)*1000

    mais toujours j'obtient 0

    sinon le temps calculé manuellement c'est 3.275s
    Je trouveque c'est un peu beaucoup 3.275s.

    M'enfin clock() comme je l'ai dit clock est une approximation.

    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
     
    int main()
    {
        int i;
        clock_t ta,tp;
     
     
        ta = clock();
        for(i = 0;i <1000000;i++) printf("a");
        tp= clock();
        printf("%d micro seconde\n",tp-ta);
        printf("durée= %lf sec\n",(double)(tp-ta)/(double)CLOCKS_PER_SEC);
     
        return 0;
    }
    Temps 0,140s
    Ce qui est un peu faux , si tu veux une plus grand precision regarde tous en bas de la page http://c.developpez.com/sources/?pag...DATE_get_clock

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Stratégie] Mesurer le temps d'exécution d'une requête
    Par nice dans le forum Général Java
    Réponses: 5
    Dernier message: 29/01/2006, 17h53
  2. Réponses: 6
    Dernier message: 22/09/2005, 16h59
  3. [Test][Perf]Mesure du temps d'execution différente 2 fois de suite
    Par debdev dans le forum Tests et Performance
    Réponses: 11
    Dernier message: 22/07/2005, 12h04
  4. [info] mesure du temps
    Par nicolas581 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 02/08/2004, 13h45
  5. Mesurer le temps des instructions
    Par luckylucke dans le forum Assembleur
    Réponses: 9
    Dernier message: 03/09/2003, 21h23

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