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 :

code plus lent si linké statiquement ?


Sujet :

Langage C++

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut code plus lent si linké statiquement ?
    Bonjour,

    je suis face à un problème qui défie ma logique.

    Je compile un bout de code directement dans mon application ou je compile le même bout de code dans une librairie statique que je link statiquement à mon application.

    L'exécution du bout de code en question est environ 4 fois plus long dans le 2ème cas.
    Les options de compil sont strictement les mêmes et il n'y pas de fonctions inline.

    Une idée de ce qui pourrait expliquer un tel comportement ?

    PS : je compil/link avec VS2008 et je parle pour une compil en O2

    Merci.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Je suppose que les 2 projets (Lib et Exe) sont compilés en O2 ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    ouaip tout est en O2

    j'ai essayé de jouer avec les dizaines d'options de link de VS, mais rien y fait.

    Serait-il capable de faire une optimization de plus dans le cas où le code est directement compilé avec l'exe ? Mais je ne vois vraiment pas où...

  4. #4
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    J'avance dans un univers étrange.

    La différence de vitesse ne concerne qu'une fonction critique (couteuse).
    Si je déplace uniquement le source de cette fonction, je note la différence.

    Le pire est que l'appel à cette fonction peut rester dans la librarie...

    Mais cette fonction n'a rien de spécial. C'est quoi ce bordel ?

  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
    Quelle version de visual C++ ? tu as regardé les options de link-time optimisation ?
    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 habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    VS 2008 + SP1

    En effet j'imagine que ca doit être un truc bizarre purement de chez Microsoft, mais j'ai joué avec toutes les options mais rien y fait, justement si quelqu'un maîtrise Visual Studio, une aide serait bienvenue.

    Il me reste l'option de linker /ltcg:pgoptimize que je n'ai pas encore fait fonctionner, à voir.

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 615
    Par défaut
    Je ne sais pas si c'est possible, mais peux-tu compiler avec un autre compilo voir ce que ça donne ?

  8. #8
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    malheureusement non, je n'ai pas de build system, juste les projets visual (je sais ca pue mais on ne choisit pas tout)
    et pas d'autres versions de visual non plus

  9. #9
    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
    Citation Envoyé par europiumallez Voir le message
    Il me reste l'option de linker /ltcg:pgoptimize que je n'ai pas encore fait fonctionner, à voir.
    Et /LTCG tout court, tu as essayé ? Tu as comparé avec sans cette option ? Il y avait des écarts ?
    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.

  10. #10
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    ouaip et pas de changements (notables)

  11. #11
    screetch
    Invité(e)
    Par défaut
    si c'est un code qui appelle beaucoup de méthode, il est possible que:
    1/ le compilateur n'arrive plus a faire du link-time optimization (/GL pour la compilation, /LTCG pour le linker)
    2/ tu franchisses souvent la barrière DLL/executable qui peut s'avérer être lente

    sans exemple de code, pas facile d'en dire plus.

  12. #12
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Citation Envoyé par screetch Voir le message
    si c'est un code qui appelle beaucoup de méthode, il est possible que:
    c'est clairement le cas

    1/ le compilateur n'arrive plus a faire du link-time optimization (/GL pour la compilation, /LTCG pour le linker)
    mais concrètement où peut se situer une différence entre le .lib ou les .o ?

    2/ tu franchisses souvent la barrière DLL/executable qui peut s'avérer être lente
    pas compris ! ok j'ai des dll mais que je passe par une lib statique ou pas, ca ne change pas les appels à ces dlls

    sans exemple de code, pas facile d'en dire plus.
    vu que je ne suis pas capable de comprendre ce qu'il se passe, je ne suis pas capable de faire une exemple minimaliste.

  13. #13
    screetch
    Invité(e)
    Par défaut
    ah oui pardon je croyais que tu avais une différence entre une DLL ou des objets inclus, j'avais mal lu le statique

    tu as coché le WHole Program Optimization dans le projet .lib aussi?

    si tu sais quelle fonction est vraiment plus lente tu peux avoir un coup d'oeil au code assembleur généré

  14. #14
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Citation Envoyé par screetch Voir le message
    tu as coché le WHole Program Optimization dans le projet .lib aussi?
    j'essayais plutot en 02 mais j'ai essayé en Ox (en fait j'ai essayé toutes les options!)

    si tu sais quelle fonction est vraiment plus lente tu peux avoir un coup d'oeil au code assembleur généré
    mouais, je vais forcément voir une différence, mais qu'en déduire ?

  15. #15
    screetch
    Invité(e)
    Par défaut
    on parle bien des propriétés du projet de la bibliothèque statique,
    onglet général,
    Whole Program Optimization?

    /O2 et /Ox n'ont rien a voir, c'est dans l'onglet général car ca s'applique a tout le projet

  16. #16
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Ah ouais je l'avais pas vu celle là ^^
    Merci.

    des "Utiliser Génération de code durant l'édition de liens" il y en a de partout.

    Malheureusement, ca ne fait pas l'affaire...

Discussions similaires

  1. Pourquoi mon code est plus lent que Arrays.sort
    Par alexis779 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2006, 12h44
  2. [MMX] Optimisation d'un code C++ -> plus lent
    Par Laurent Gomila dans le forum x86 32-bits / 64-bits
    Réponses: 12
    Dernier message: 17/05/2006, 18h47
  3. Code Asm plus lent que le C !!!
    Par themadmax dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 23/01/2006, 18h21
  4. [Firebird][Optimisation]Plus lent que le BDE!
    Par vincentj dans le forum Débuter
    Réponses: 3
    Dernier message: 07/02/2005, 15h48
  5. DBExpress est plus lent que BDE?
    Par palassou dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 08h39

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