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 :

optimisation par le compilateur


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Points : 144
    Points
    144
    Par défaut optimisation par le compilateur
    Bonjour,

    Est-ce que je peux compter sur le compilateur pour:
    1. Réécrire une boucle for itérant sur des indices et indexant les éléments d'un array par [i] en une boucle optimisée (probablement par arithmétique de pointeurs et déréférence). (Je préfère boucler sur des indices car c'est plus lisible à mon goût.)
    2. Compiler inline les petites fonctions utilitaires? (Même remarque, ces petites fonctions font office d'auto-documentation).
    3. Mettre en registre les données locales critiques, utilisées intensément, comme un accumulateur de boucle?


    J'aimerais savoir cela pour gcc en particulier, mais aussi pour les compilateurs C en général. J'ai lu plusieurs fois que nos (ridicules, triciales) tentatives d'optimisation "manuelles" sont souvent inutiles, voire nuisibles. Aussi, à quoi servent les annotations comme inline et register si de toute façon le compilateur fait le boulot tout seul. D'autre part, y a-t-il quelque part une doc sur les niveaux d'optimisation (commandés par arguments en ligne de commande), ce que gcc fait ou pas, précisément, à chaque niveau d'optim (ça, c'est pour la culture générale :-)? Enfin, quel niveau recommander en "rapport qualité-prix" ;-), je veux dire à partir de quel niveau l'augmentation de quantité de travail par le compilateur ne vaut-elle plus le coup?

    Le but, c'est d'avoir un code lisible, pas surchargé ni "distordu" pour gagner des micro-secondes à l'exécuition, et malgré tout une efficacité raisonnable.

    Merci,
    denis

  2. #2
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour denispir

    Ne compte jamais sur un compilateur pour optimiser ton code. Si tu veux être sur, fait lui générer l'assembleur et voit par toi même.

    Pour le moment, je n'ai pas vu de doc qui décrivent les optimisations faites par un compilateur.
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense que ce genre d'optimisation est "ridicule". Il est préférable d'améliorer un algorithme / de changer l'utilisation CPU / mémoire afin d'éviter de faire mille calculs inutile est répétitif et un tas de choses comme cela.

    Pour le reste, je fais "confiance" à mon compilateur (ils sont vraiment puissant de nos jours), comme cela je ne perd pas de temps sur des optimisation bien trop souvent inutiles (bien sur, j'active les options qui vont bien -DNDEBUG / -O3 ...).

    Après, si vraiment j'ai un problème de performance, je trace mon programme pour savoir quels sont les points faibles.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Pas mieux

    Avec une précision = -O2 marche bien dans la quasi-totalité des cas, -O5 nettement moins.

    Maintenant, la principale optimisation se situe entre la chaise et le clavier ..

    L'algorithmie est essentielle.

    Les inline ou autres ne sont vraiment à utiliser que lorsqu'on est déjà certain que l'algoriihme en tant que tel est optimisé, que les options des compilo ont été déjà utilisées, et que l'on a toujours un problème de performances.
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    pareil

    Les compilateurs optimisent le code obtenu souvent bien mieux qu'un humain, surtout si tu lui donnes des indications. Avec gcc tu peux indiquer quelles fonctions sont critiques (attribut hot) par exemple, lesquelles tu veux inliner, les pointeurs qui ne couvrent pas la même zone mémoire (restrict), si ton processeur accepte ou non des intructions vectorielles (réécriture de boucle) ... un seul mot : la doc gcc. Intel optimise aussi bien le code obtenu, là aussi il y a une doc faramineuse.
    Et finalement tu as une floppée d'outils d'aide à l'optimisation comme les profilers, gcc (et icc, je crois, pas sûr) permet aussi de recompiler après une phase de profilage pour profiter des données collectées. Tu peux pousser ça très loin, valgrind avec l'outil cachegrind te permet de profiler le cache par exemple.

  6. #6
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Salut,

    Je pense que les compilos de nos jours optimisent mieux le code que la grande majorité des programmeurs.

    Mais que cela était dit plus haut la meilleur des optimisation reste dans l'algo en lui même.

    Perso je regarde systématiquement le code généré par gcc par la commande:

    objdump -D monprogramme > monprogramme.dump

    Ca me permet de mieux comprendre comment fonctionne le compilo et donc la programmation en règle générale.

    @+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/05/2007, 08h14
  2. Optimisation par la (pré-)compilation
    Par femtosa dans le forum C
    Réponses: 4
    Dernier message: 02/05/2007, 11h25
  3. Algorithme d'optimisation par colonie de fourmis
    Par floopy dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 08/11/2006, 15h03
  4. Réponses: 14
    Dernier message: 03/07/2006, 16h55
  5. Réponses: 5
    Dernier message: 16/06/2006, 23h05

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