Temps d'exécution
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Temps d'exécution



  1. #1
    narakphysics

    Temps d'exécution


    ------

    Bonjour à tous et à toutes
    Je désire calculer le temps d'exécution de mon programme lorsqu’il effectue un traitement.
    Le programme est codé en C++.
    Le compilateur utilisé est Qt creator.
    J'ai utilisé la méthode suivante :
    1-avant de commencer, je sauvegarde l'heure du systeme: heure:min:sec;
    2-à la fin, je fait la même astuce
    3-finalement je calcule la différence.
    Le problème c'est que la différence est toujours 0.
    car j'ai pas trouvé un moyen pour afficher les millisecondes!!

    Est ce qu'il y a un moyen pour calculer le temps d'exécution.
    Merci d'avance

    -----
    Dernière modification par narakphysics ; 27/04/2013 à 10h45.

  2. #2
    PA5CAL

    Re : Temps d'exécution

    Bonjour

    Deux solutions possibles :
    • soit exécuter un grand nombre de fois le programme entre les deux lectures de l'heure (par exemple 10000 fois, pour connaître le temps à 0,1 ms près),
    • soit utiliser une fonction qui donne le temps à la milliseconde ou à la microsecondes (certains systèmes le proposent).

    Dans chaque cas, il ne faut pas oublier de chronométrer par ailleurs un programme vide, afin de déterminer la durée à retrancher au résultat du fait du temps perdu dans l'exécution du test (boucle et lecture de l'heure).
    Dernière modification par PA5CAL ; 27/04/2013 à 10h55.

  3. #3
    narakphysics

    Re : Temps d'exécution

    Merci M. PASCAL de votre réponse
    Citation Envoyé par PA5CAL Voir le message
    Bonjour
    Deux solutions possibles :
    • soit exécuter un grand nombre de fois le programme entre les deux lectures de l'heure (par exemple 10000 fois, pour connaître le temps à 0,1 ms près),
    • soit utiliser une fonction qui donne le temps à la milliseconde ou à la microsecondes (certains systèmes le proposent).
    Dans chaque cas, il ne faut pas oublier de chronométrer par ailleurs un programme vide, afin de déterminer la durée à retrancher au résultat du fait du temps perdu dans l'exécution du test (boucle et lecture de l'heure).
    Pour la deuxième solution ça marche en utilisant la fonction : GetTickCount()
    Pour la 2ème solution, je l'ai pas bien saisi! Pourriez vous mieux l'expliquer ?
    Autre question: quelle est l'utilité de calculer les programmes vides?

  4. #4
    PA5CAL

    Re : Temps d'exécution

    La fonction GetTickCount() de Windows retourne le nombre de millisecondes écoulées depuis le démarrage de la machine, et constitue donc une indication plus fine que l'heure système à la seconde. Mais attention : sa précision n'est pas nécessairement de 1 milliseconde. Sur les systèmes où je l'ai utilisée, le temps retourné n'avançait que toutes les 16 ms environ.



    Concernant le chronométrage d'un programme vide, il est rendu nécessaire si le programme testé est très court, et que le temps d'exécution des boucles ou de lecture de l'heure ne peut plus être négligé.

    Si par exemple on exécute 10 fois un programme qui dure 1 µs, mais que par ailleurs chaque boucle rajoute 0,1 µs et la lecture de l'heure rajoute 1 µs, on mesure un total de 12 µs ( = {(0µs+1µs)x10+1µs}/10 ), qu'on pourrait interpréter à tort comme un temps d'exécution de 1,2 µs pour le programme. L'erreur de 0,2 µs peut être déterminés en reproduisant l'opération avec un programme vide ( {(0µs+0,1µs)x10+1µs}/10 ), puis soustraite au résultat précédent.

  5. A voir en vidéo sur Futura
  6. #5
    narakphysics

    Re : Temps d'exécution

    Merci encore une fois
    J'ai bien compris l'utilité des programmes vides
    la fonction GetTickCount() ne donne pas donc le résultat avec une meilleur précision!
    Y a-t-il une fonction prédéfinie qui calcule les ???

  7. #6
    PA5CAL

    Re : Temps d'exécution

    Si l'on utilise un programme A qui chronomètre un autre programme B, alors le temps d'exécution mesuré n'est pas celui du programme B seulement, mais également une partie du programme A, entre le moment où l'on déclenche le chronomètre et le moment où on l'arrête.

    Par exemple, l'exécution du programme A pourrait se dérouler de la façon suivante :
    1- demande de l'heure de départ au système
    2- stockage de l'heure de départ
    3- stockage de la valeur initiale du compteur de boucles
    4- test du nombre de boucle, et fin (->10) si c'est la dernière
    5- appel du programme B
    6- (exécution du programme B)
    7- retour du programme B
    8- décrémenter le nombre de boucle
    9- boucle suivante (->4)
    10- lecture de l'heure de fin
    11- demande de l'heure de fin au système
    12- calcul de la différence entre l'heure de fin et l'heure de départ
    13- affichage du résultat

    Le temps affiché va correspondre au temps d'exécution de toutes les étapes 1 à 10 (ou encore 2 à 11, ou quelque chose entre les deux, ce qui revient toujours au même). Or, c'est seulement de temps d'exécution de l'étape 6 (i.e. la durée du programme B) qu'on veut connaître.

    On doit donc refaire tourner le programme A en supprimant l'étape 6 (i.e. en utilisant un programme vide) afin de savoir combien de temps cela a pris d'exécuter les étapes 1 à 5 et 7 à 10.

    La différence des deux temps obtenus avec et sans le programme B correspond alors au temps d'exécution de ce dernier seul, qu'il suffit ensuite de diviser par le nombre de boucles effectuées pour connaître la durée recherchée.


    Sous les dernières version de Windows, on peut utiliser la fonction de l'API QueryPerformanceCounter() pour lire un chronomètre avec une résolution meilleure que la µs. Mais comme la période de ce chronomètre n'est pas la µs, il faut rapporter le résultat calculé à sa fréquence, qu'on obtient à l'aide de la fonction QueryPerformanceFrequency().
    Dernière modification par PA5CAL ; 27/04/2013 à 16h25.

  8. #7
    whoami

    Re : Temps d'exécution

    Bonjour,

    Sous Windows (désolé, je n'utilise pas Linux).

    Pour faire une mesure précise, il faut utiliser QueryPerformanceCounter :

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    Ou faire joujou avec l'assembleur, voir l'instruction rdtsc.


  9. #8
    narakphysics

    Re : Temps d'exécution

    Merci à vous tous

Discussions similaires

  1. temps d'exécution trés long d'une macro vba
    Par inviteeae1b5f3 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 14/06/2010, 10h54
  2. Temps d'execution d'une instruction d'un PIC
    Par invitea316b35d dans le forum Électronique
    Réponses: 8
    Dernier message: 03/04/2010, 20h01
  3. Comparaison de temps d'execution
    Par invite72c93427 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 01/04/2010, 22h23
  4. [Blanc] Lave linge Brandt WFH1477 temps d'exécution très long
    Par invitea31ad42e dans le forum Dépannage
    Réponses: 3
    Dernier message: 03/12/2009, 08h05
  5. Temps d'execution / Cout operations
    Par invitef7e135b4 dans le forum Électronique
    Réponses: 1
    Dernier message: 12/05/2009, 16h11