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 nombre de cycle horloge, mesure d'un temps très bref


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut mesure du nombre de cycle horloge, mesure d'un temps très bref
    Bonjour,

    J'ai croisé plusieurs sujets en parlant mais aucun n'a aboutit en pur C++ (ou C)... peut-on mesurer au cours d'un programme des intervalles de l'ordre de la milliseconde (et voir cycle horloge mais j'en doute). Un sorte de usleep inverse quoi.

    Merci d'avance.

  2. #2
    Expert confirmé

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

    Sous Windows, tu peux regarder QueryPerformanceCounter et fonctions associées.

    Je ne connais pas l'équivalent sous Linux, mais ça existe certainement.

  3. #3
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est quasiment impossible, même en utilisant QueryPerformanceCounter. Si un autre thread exécute ton code pendant ton programme, ta mesure sera fausse

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fie,
    Citation Envoyé par Matthieu Brucher Voir le message
    C'est quasiment impossible, même en utilisant QueryPerformanceCounter. Si un autre thread exécute ton code pendant ton programme, ta mesure sera fausse
    Bien sûr, ça fluctue toujours un peu, ne serait-ce que pour que l'OS fasse son travail. Mais en faisant une moyenne sur quelques mesures, on obtient une valeur assez stable (sous réserve évidemment d'éviter de faire tourner une (des) application(s) gourmande(s) en CPU en même temps que la mesure.
    On n'obtient pas la meilleure vitesse que le programme peut atteindre, mais celle qu'il atteindra en moyenne, qui, de fait, est celle qui est à prendre en compte pour être suffisamment réaliste.

  5. #5
    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
    Et en jouant sur la priorité du process, on augmente encore la stabilité (du temps d'exécution et de sa mesure). En pratique, des mesures statistiques de l'ordre de la ms sont tout à fait réalisables. De mémoire (ça fait longtemps que je n'en ai pas fait), on pouvait même obtenir de l'information exploitable (toujours statistiquement, bien entendu) pour des temps de l'ordre de quelques dizaines de ns.

    Par contre, la moyenne n'est pas forcément appropriée pour ce genre de mesure. Une moyenne en ayant viré les x% plus mauvais scores (qui représentent justement des moments où autre chose s'est passé) donne souvent des meilleurs résultats.
    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.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour mesurer sous Windows, il y a la fonction GetThreadTimes() qui peut être intéressante.
    Par contre, je ne connais pas sa résolution réelle (ex: Sleep() prend un argument en millisecondes, mais sa résolution réelle est de l'ordre de 15ms)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Compter le nombre de cycles horloges
    Par collect dans le forum Général Java
    Réponses: 3
    Dernier message: 26/05/2014, 18h55
  2. Réponses: 7
    Dernier message: 16/02/2011, 17h20
  3. nombre de cycles d'un algorithme
    Par jena dans le forum Signal
    Réponses: 1
    Dernier message: 03/09/2010, 15h36
  4. Réponses: 4
    Dernier message: 16/03/2010, 16h49
  5. Nombre d'unifications et mesure de la complexité
    Par Eusebius dans le forum Prolog
    Réponses: 3
    Dernier message: 11/11/2008, 10h03

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