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

Langage C++ Discussion :

Mesurer le temps CPU sur une machine multicoeurs


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut Mesurer le temps CPU sur une machine multicoeurs
    Bonjour,

    lorsque je travaillais en C, je mesurais le temps CPU consommé par mes algorithmes avec un bout de code ressemblant à peu de choses près à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <time.h>
     
         clock_t start, end;
         double cpu_time_used;
     
         start = clock();
         ... /* Do the work. */
         end = clock();
         cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    J'ai depuis acquis un calculateur à 4 coeurs et la valeur retournée à présent par ces lignes est excessivement élevée.
    Pour l'instant, j'ai réussi à contourner le problème en faisant appel à la routine Fortran CPU_TIME, qui elle fonctionne toujours de la même manière sur ma machine.
    Savez-vous comment mesurer le temps CPU en C++ sur des architectures parallèles (i.e. sans mixer avec du Fortran ou un autre langage)?

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjour,
    Pour ca j'utilise boost::timer, qui est portable, et bien plus précis que clock()

  3. #3
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Bonjour,

    merci pour ta réponse Nogane.
    Sais-tu si le temps écoulé mesuré avec boost::timer est du temps CPU?

  4. #4
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Tout compte fait il semblerais que boost::timer utilise std::clock, donc ce n'est pas une bonne piste.

  5. #5
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    regarde du coté de boost::chrono. Sinon gettimeofday/QueryPerformanceCoutner ou rdtsc

  6. #6
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Effectivement boost::timer est loin d'être le plus précis, boost::chrono semble être la bonne alternative mais n'est pas encore fini si j'ai bien compris.

    Concernant le jonglage de cpu, une des techniques pour s'assurer que le temps est correct est de forcer le code qui récupère le temps a se faire executer toujours par le même unit.
    Les gens de chez Ogre ont du code portable qui gère le cas des multi-core (parcequ'il y avait des sautes de timers quand le thread changeait de core d'execution).
    Voici les sources pour windows : http://bitbucket.org/hef/ogre/src/ti.../OgreTimer.cpp

    Si tu remontes dans l'arborescence tu verras les implementations pour divers autres OS donc Mac et Linux.

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

Discussions similaires

  1. Connaitre le cpu et la mémoire consommée sur une machine linux
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/06/2013, 10h54
  2. Réponses: 8
    Dernier message: 13/07/2004, 09h00
  3. Savoir quel OS est installer sur une machine
    Par batmat86 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 16h16
  4. Comment récupérer la liste des logiciels installés sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 19/09/2003, 17h41
  5. [Débutant] Connexion sur une machine distante protégée
    Par arthix dans le forum Développement
    Réponses: 3
    Dernier message: 28/08/2003, 09h46

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