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 :

[Profilage] Beaucoup de temps dans des modules inconnues


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut [Profilage] Modules inconnues | Pointeur de fonction vs Foncteur
    Bonjour,

    J'ai un soucis actuellement avec un programme en cours de développement.
    En effet, mon programme est assez long à l'exécution et pour savoir qu'est ce qui le ralentie, j'ai lancer un profilage avec l'outil fournit dans Visual Team Suite.

    Selon cette outils, les modules qui ont le pourcentages d'exemples exclusifs les plus élever sont : mscorwks.dll (32,84 %), MonExe.exe (24%) et ntdll.dll (18%).

    Je ne comprend pas du tout à quoi servent mscorwks.dll et ntdll.dll (d'après quelques recherches, c'est en rapport avec du .net, mais je n'en utilise pas).

    Avez vous une idée de ce qui fait que ces modules sont appelés si souvent ?

    Mon programme est constitué d'un exe (le main) et de deux .lib. Le code est beaucoup trop volumineux pour pouvoir etre posté, mais il ne me semble pas que j'utilise de fonction exotique (hormis quelques fonctions déclarer en inline).

    Merci pour votre aide car la, je suis vraiment perdu.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Ne te focalise pas trop sur les modules, c'est surement dû à des appels systèmes dans ton code, mais ce n'est pas le plus important à savoir pour optimiser une application.

    Ce qui est important c'est de savoir quelles sont les fonctions dans ton code qui prennent le plus de temps, pour savoir sur lesquelles concentrer ses efforts. Normalement un profiler doit donner cette info.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Lorsque je regarde les fonctions, ce sont encore les dll qui arrivent en tete.
    mscorwks.dll et ntd.dll conserve les memes % d'exemple exclusif (32% et 18%)

    Ma première fonction arrive à avec un pourcentage de 2,02% d'exemple exclusif. Ce qui est vraiment faible par rapport au DLL.

    Je suis vraiment perdu pour le coup.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Ça doit être parce que tu regarde le temps "exclusif" des fonctions, c'est-à-dire le temps passé dans chaque fonction à l'exclusion du temps passé dans ses sous-fonctions.

    Il est plus intéressant de regarder le temps total passé dans chaque fonction, il doit y avoir une option quelque part dans le profiler pour cela.

  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
    C'est à dire que tu dois passer plein de temps dans des appels systèmes (lecture de fichiers, allocation mémoire, lock de mutex...). Regarde donc quelle fonction à toi arrive en tête en temps non exclusif, tu y trouveras probablement ce genre d'appel.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Par défaut
    Alors, suivant vos conseils, je me suis intéressé au pourcentage inclusifs et non exclusif et oublié les dll.

    J'ai trouver une fonction au pourcentage "anormalement" élevé pour ce qu'elle fait et il semble que cela soit du à la présence d'un pointeur de fonction dans ce bout de code. En faisant des tests, j'ai fait sauter ce pointeur de fonction et j'améliore mon temps d'exécution en release d'un facteur 10.

    Il ne me reste plus qu'a trouver un moyen pour remplacer ce pointeur de fonctions, mais cela me semble mal partie car la généricité de mon code ce faisait à travers ce pointeur.

    Merci pour vos conseils

  7. #7
    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
    Bonjour

    En utilisant le pattern Stratégie, tu ne peux pas éviter les pointeurs de fonctions ?
    http://come-david.developpez.com/tut...trategie#LVIII

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    rassure moi, quand tu dis que ça va plus vite quand tu as enlevé le code, c'est ptet parce que ta fonction (pointée) n'était plus appelé? Et c'est ptet ce qu'il y a dans la fonction qui pose problème, et pas le fait que ça soit un pointeur?

    @gbdivers

    Plutôt que de partir sur du pattern strategy, autant mentioner les fonctions virtuelles pour commencer?

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

Discussions similaires

  1. Structures dans des modules
    Par HydroFire dans le forum Fortran
    Réponses: 2
    Dernier message: 18/01/2015, 16h11
  2. [Python 3.X] Import dans des modules? Comment faire et quelles sont les bonnes pratiques?
    Par Davjack dans le forum Général Python
    Réponses: 2
    Dernier message: 03/07/2014, 12h13
  3. Réponses: 3
    Dernier message: 06/01/2012, 11h32
  4. Réponses: 2
    Dernier message: 13/04/2007, 13h03
  5. Réponses: 9
    Dernier message: 06/06/2006, 22h05

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