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 :

Calcul du temps d'exécution avec une grande précision en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Par défaut Calcul du temps d'exécution avec une grande précision en c++
    Salut à tous,

    Je réalise un programme en C++ sous windows 7 sur visual studio 2010 dans lequel j'ai besoin de calculer le temps d'éxécution avec une grande précision ( en millisecondes).

    J'ai trouvé une façon de faire qui est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        #include <ctime>
        ...
        temps_initial = clock ();
        . . .
                         /* Partie du code à évaluer */
        . . .
        temps_final = clock ();
        temps_cpu = (temps_final - temps_initial) / CLOCKS_PER_SEC * 1000; // millisecondes
    mais qui ne donne pas le temps exact pour des petites instances; et en faisant l'exécution plusieurs fois du meme code il ne donne pas le meme temps .
    Quelqu'un saurait-il s'il existe une autre manière en C++ de calculer le temps avec uen grande précision ?
    Merci d'avance de votre réponse.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Joe,

    J'utilise QueryPerformanceCounter.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    QueryPerformanceCounter + QueryPerformanceFrequency si on veut afficher une durée en s.
    Mais quoi qu'il arrive, que l'on ait des temps différents est normal, il y a tant de choses qui se passent sans cesse sur une machine...

    Généralement, pour faire des benchs, je répète un grand nombre de fois l'opération à mesurer, jusqu'à ce que le temps total soit visible à l’œil nu (quelques secondes au moins).

    En suite, je répète toutes mes mesures deux fois, et si je n'ai pas des valeurs suffisamment proches, je recommence tout, éventuellement en modifiant ce que je mesure.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Citation Envoyé par mathro Voir le message
    mais qui ne donne pas le temps exact pour des petites instances; et en faisant l'exécution plusieurs fois du meme code il ne donne pas le meme temps .
    Quelqu'un saurait-il s'il existe une autre manière en C++ de calculer le temps avec uen grande précision ?
    Je vais pas répondre à la question, mais j'ai une ou deux remarques...

    Que le temps d'exécution ne soit pas parfaitement identique si tu lances plusieurs fois ton application, c'est normal

    En conséquence, vouloir améliorer la précision des compteurs n'est pas forcement possible

    Tu veux faire quoi exactement ?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Je vais pas répondre à la question, mais j'ai une ou deux remarques...

    En conséquence, vouloir améliorer la précision des compteurs n'est pas forcement possible

    Tu veux faire quoi exactement ?
    Mon application s'exécute en 0.56 s mais le programme m'affice dès fois 3s des fois 4s des fois 2s je veux qu'il m'affiche 0:00:00.56

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    C'est vrai que ça fait beaucoup de variation. Mais le problème vient pas du compteur et encore moins de sa précision. Voir ton code, faire du profiling, etc

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    C'est vrai que ça fait beaucoup de variation. Mais le problème vient pas du compteur et encore moins de sa précision. Voir ton code, faire du profiling, etc
    Ou tout simplement la machine.
    Lancement d'un autre logiciel, scan d'un fichier, ...... pendant l'exécution.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ou tout simplement la machine.
    Lancement d'un autre logiciel, scan d'un fichier, ...... pendant l'exécution.
    quand j'exécute il ya que la fenetre de l'exécutable qui marche, mais là je trouve une grande déffirence de 0.56s à 3 -4 seconde, meme en faisant l'exécution à pluisuers reprise j'ai jamais eu quelque chose de 0.5 ou 0.9 s toujours plus de 2s, est ce que ya pas une façon de minimiser cette différence????

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ou tout simplement la machine.
    Lancement d'un autre logiciel, scan d'un fichier, ...... pendant l'exécution.
    En effet je dispose de deux exécutable, le miens et un autre, je fait l'éxécution en meme temps sur la meme machine, le mien se termine avant l'autre mais le temps d'exécution affiché par mon exécutable est 3.14 seconde et l'autre exécutable affiche 0.22 seconde!!!! donc voilà une grande différence
    PS: je dispose pas du code source de l'autre exécutable donc je peux pas voir qu'est ce qu'il a utiliser comme fonction pour le calcul du temps.

    Voilà ce que j'utilise actuellment pour calculer le temps
    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
     
    #include <windows.h>
    double PCFreq = 0.0;
    __int64 CounterStart = 0;
    void StartCounter()
    {
        LARGE_INTEGER li;
        if(!QueryPerformanceFrequency(&li))
    	cout << "QueryPerformanceFrequency failed!\n";
     
        PCFreq = double(li.QuadPart)/1000.0;
     
        QueryPerformanceCounter(&li);
        CounterStart = li.QuadPart;
    }
    double GetCounter()
    {
        LARGE_INTEGER li;
        QueryPerformanceCounter(&li);
        return double(li.QuadPart-CounterStart)/PCFreq;
    }
    void main()
    {
    StartCounter();
    .............
    temps=GetCounter();
    cout<<"Temps d'execution "<<temps<<" millisecondes"<<endl;
    }

Discussions similaires

  1. Calculer le temps d'exécution d'une fonction
    Par ZAYDOUN dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/07/2008, 14h45
  2. Calculer le temps d'exécution d'une procédure
    Par fring dans le forum Contribuez
    Réponses: 0
    Dernier message: 23/05/2008, 18h53
  3. Calculer le temps d'exécution d'une requête
    Par BRAUKRIS dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/03/2007, 12h59
  4. Réponses: 3
    Dernier message: 11/03/2006, 15h35

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