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

Linux Discussion :

Temps d'execution d'un script c++ sous linux


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Temps d'execution d'un script c++ sous linux
    Salut!
    J'ai cherché pendant un bon moment je n'arrive pas à trouver réponse à ma question (j'ai trouvé pour windows mais bon ca m'avance pas ^^)

    Je cherche à faire un compteur de temps d'execution d'un programme sous environnement linux en millisecondes!! En secondes j'y arrive mais le soucis c'est que si le programme prends moins d'une seconde ca affiche 0. Enfin aucune précision quoi.

    Des idées? merci =)

    Note :

    Je pense que ma solution se trouve dans getitimer et setitimer (http://www710.univ-lyon1.fr/~jciehl/...titimer.2.html)

    Mais je ne comprends pas comment employer ces fonctions (niveau c++ = pas bon ^^)

  2. #2
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    C'est deja fait, la commande s'appelle time

    Sinon si tu veux coder, ta l'instruction localtime

    http://man.developpez.com/man3/localtime.3.php

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Oui mais ca c'est pour avoir en SECONDES, moi il me faut la précision au dessus!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        struct tm {
                int     tm_sec;         /* secondes           */
                int     tm_min;         /* minutes            */
                int     tm_hour;        /* heures             */
                int     tm_mday;        /* quantième du mois  */
                int     tm_mon;         /* mois (0 à 11 !)    */
                int     tm_year;        /* année              */
                int     tm_wday;        /* jour de la semaine */
                int     tm_yday;        /* jour de l'année    */
                int     tm_isdst;       /* décalage horaire   */
        };
    Quand à l'instruction systeme time, j'ai déjà testé genre time ls sous une console, mais aucune idée de comment l'implémenter en C++ en ne récupérant que la partie qui m'interesse.


    Voila la derniere chose que j'ai essayée sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct timeval tv;
    int ret = gettimeofday(&tv, 0);
    int script_start= tv.tv_usec;
    
    ret = gettimeofday(&tv, 0);
    int script_end= tv.tv_usec;
    
    printf("Temps d'execution : %f d e etc secondes\n",script_end-script_start);

  4. #4
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Peut etre avec ca alors

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


    La ta une structure de timeval avec un champs en seconde un autre en milliseconde

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Je pensait aussi (j'ai édité au dessus) mais je n'y arrive pas.

    Peut etre est ce mon printf qui est mauvais ?

    Quand je lance un time ./monprog (avec %d dans le printf)

    Temps d'execution : 23144 secondes

    real 0m0.062s
    user 0m0.008s
    sys 0m0.012s


    donc meme divisé par 10^6 ca ne donne pas 0.062s

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    J'ai testé :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct timeval tv;
    int ret = gettimeofday(&tv, 0);
    int script_start= tv.tv_usec;
     
    //monscript
     
    ret = gettimeofday(&tv, 0);
    int script_end= tv.tv_usec;
     
    printf("Temps d'execution : %f secondes\n", ( (double) script_end - (double) script_start ) / CLOCKS_PER_SEC );

    Ca donne des trucs plutot aléatoires, parfois négatifs

  7. #7
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    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
    #include <sys/time.h>
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        struct timeval tv;
        int ret = gettimeofday(&tv, 0);
        int script_start= tv.tv_usec;
     
        //monscript
     
        ret = gettimeofday(&tv, 0);
        int script_end= tv.tv_usec;
     
        //printf("Temps d'execution : %d secondes\n",script_end -  script_start );
        cout << "Temps d'execution :"<< script_end -  script_start<< " microsecondes"<<endl;
    }
    Ca fonctionne pas mal

    En C++ c'est du cout et pas du printf

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    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
     
     
    clock_t start = clock();
     
    struct timeval tv;
    int ret = gettimeofday(&tv, 0);
    int script_start= tv.tv_usec;
     
     
    //moncode
     
    ret = gettimeofday(&tv, 0);
    int script_end= tv.tv_usec;
     
    printf("Temps d'execution : %f secondes\n", ( (double) script_end - (double) script_start ) / CLOCKS_PER_SEC );
     printf("Time elapsed: %f\n", ((double)clock() - (double)start) / CLOCKS_PER_SEC);
     printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
     
    cout << "Temps d'execution :"<< script_end -  script_start<< " microsecondes"<<endl;
    Et voila l'une des sorties, j'en ai choisie une négative histoire de voir le problème.
    time ./monprog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Temps d'execution : -0.863935 secondes
    Time elapsed: 0.020000
    Time elapsed: 0.020000
    Temps d'execution :-863935 microsecondes
     
    real    0m0.153s
    user    0m0.012s
    sys     0m0.016s
    knoppix@1[q6]$

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Je suis d'accord avec tes clock() - et encore - si tu mets des cast corrects, de C++, pas de C - c'est comme pour printf qui n'existe plus -.
    usec retourne le nombre de ms, mais il faut sans doute compter les secondes aussi !
    Si tu commences à 0s999ms et que tu finis à 1s001ms, tu trouveras -998ms à la place des 2ms réelles.

  10. #10
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Hola bien vu le coup des secondes, quoique c'etait pas évident que le temps soit divisé, je veut dire il y aura très bien pu avoir le temps total en secondes ET le temps total en millisecondes, et non pas s+ms.

    Je regarde ca de suite

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bon voila je m'en sors avec une solution assez bancale à cause de mes lacunes ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct timeval tv;
    int ret = gettimeofday(&tv, 0);
    int script_start_time_s = tv.tv_sec ;
    int script_start_time_ms = tv.tv_usec/1000 ;
     
     
    //code
     
    ret = gettimeofday(&tv, 0);
    int script_end_time_s = tv.tv_sec ;
    int script_end_time_ms = tv.tv_usec/1000 ;
    cout << "Temps d'exécution du script : " << script_end_time_s - script_start_time_s << " sec " << script_end_time_ms - script_start_time_ms << " ms" << endl;

    J'ai essayé de faire des casts corrects du genre :

    float script_end_time = float(tv.tv_usec)/1000000;

    Ca marche pour récupérer les microsecondes, mais je n'arrive pas à y ajouter les secondes, à chaque fois je perds ce que j'avais après la virgule (et me retrouve avec des zéros).

    Du genre

    float script_end_time = float(tv.tv_usec)/1000000 + tv.tv_sec;
    ou avec divers casts placés tout est pareil, je perds ce que j'ai après la virgule

Discussions similaires

  1. Diminuer le temps d'execution d'un script perl
    Par Isabella83 dans le forum Langage
    Réponses: 16
    Dernier message: 24/02/2012, 11h46
  2. [MySQL] temps d'execution d'un script sur un serveur web
    Par cerco1 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/10/2011, 18h30
  3. execution d'un script shell sous php
    Par cosam dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 09/10/2009, 12h57
  4. temps d'execution d'un script
    Par kevin07 dans le forum Linux
    Réponses: 6
    Dernier message: 29/07/2009, 15h38
  5. Executer mes scriptes php sous linux
    Par soulbe dans le forum Linux
    Réponses: 1
    Dernier message: 17/08/2006, 18h39

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