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

Langages de programmation Discussion :

[GCC] Option de compilation


Sujet :

Langages de programmation

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut [GCC] Option de compilation
    Bonjour a tous,


    voila je suis nouveau sur le forum mais cela fait deja plusieurs années que je parcours ces forums pour m'informer.

    Aujourd'hui j'aurais une question assez pointu (du moins pour moi) concernant les options de compilation a passer au compilateur.

    Je m'explique, je recher a recompiler a partir des sources plusieurs softs pour gagner un maximum de performance.

    j'ai donc regarder au niveau de gcc les options possibles et je suis tombé sur les options -O, -O2, -O3, -Ofast et -Os

    D'aprés la doc -O fast est ce qui se fait d emieux en performance mais peut poser de sproblèmes suivant le code donc je pense que pour un max de sécurité il vaut mieux que je m'arrete sur -O3.

    Ensuite j'ai vu sur la doc cette phrase:
    "If you use multiple -O options, with or without level numbers, the last such option is the one that is effective."

    Donc si je comprends bien seul le dernier paramètres ets pris en compte, il ne sert donc a rien de mettre -O3 -Os puisque seul -Os sera pris en compte.

    Enfin dernier point au cas ou j'aurais mal compris la phrase de dessus en terme de perf au niveau de la compilation, est ce que -O3 -Os et plus performant qu'un simple -O2 ou pas ?

    Et pour finir juste pour avoir une idée comme ca
    SI je recompile le serveur MySQL a partir des sources quel peut etre le gain de perf entre un -O et un -O3 ???

    Merci d'avance de votre aide.

    PS: désolé si je me suis trompé de section pour poster mais je ne savais pas trop ou poster

  2. #2
    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
    Citation Envoyé par everest31 Voir le message
    Donc si je comprends bien seul le dernier paramètres ets pris en compte, il ne sert donc a rien de mettre -O3 -Os puisque seul -Os sera pris en compte.
    Absolument. Un seul suffit.


    Citation Envoyé par everest31 Voir le message
    Enfin dernier point au cas ou j'aurais mal compris la phrase de dessus en terme de perf au niveau de la compilation, est ce que -O3 -Os et plus performant qu'un simple -O2 ou pas ?
    Oui, sauf que à partir de -O3 il y a des cas où l'optimisation est trop poussée et entraîne des erreurs si le programme est un tantinet complexe.

    Disons que pour être sûr -O2 est en bon flag.


    Maintenant, il y a d'autres options de compilation qui optimisent.. Mettre le bon flag d'architecture correspondant à la machine, éventuellement à sa version, par exemple (il y a toute une section d'aide là-dessus), plus éventuellement d'autres (sur les alignements de structures, etc etc)

    La mesure des gains dépend des programmes, de leur écriture, des données, des algos, des fonctionalités...
    "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

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    Maintenant, il y a d'autres options de compilation qui optimisent.. Mettre le bon flag d'architecture correspondant à la machine, éventuellement à sa version, par exemple (il y a toute une section d'aide là-dessus), plus éventuellement d'autres (sur les alignements de structures, etc etc)
    Aurais tu un lien direct sur les diverses possibilité ?

    Voici globalement ce que j'ai mis comme flags:

    -O3 -mfpmath=sse -msse3 -march=prescott -pipe -funroll-loops -ffast-math -fno-strict-aliasing -fexpensive-optimizations

    Sachant que voici les infos de mon proc:
    CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (3000.13-MHz 686-class CPU)
    Origin = "GenuineIntel" Id = 0xf41 Family = f Model = 4 Stepping = 1
    Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
    Features2=0x441d<SSE3,DTES64,MON,DS_CPL,CNXT-ID,xTPR>
    TSC: P-state invariant

    Au niveau des programmes que je tente d'optimiser c'est la recompilation a partir des sources du serveur Apache 2.2.x, php 5.3.x et MySQL 5.5.x

  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
    Regarde soit la doc ici ou le site officiel http://gcc.gnu.org/onlinedocs/, et cherche pour les paragraphes Spécifier la machine cible et la version du compilateur

    PAr exemple moi avec un ACER XP je mets :

    -march=athlon-xp -mwindows -DWINDOWS

    mais il y en a plein. A voir les bons flags dans la doc.

    De plus, je le répète, -O3 est dangereux..
    "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
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Si tu veux absolument que tes programmes soient le plus optimise possible, il faut prendre en compte le fait que GCC n'est pas le seul compilateur, et que donc il est possible qu'en en utilisant un autre, tu aies des gains (ou des pertes) de performance. A toi de faire les tests dans ton contexte.

    Sinon, vu l'etendue de ton questionnement, tu ne couperas pas a la lecture de la documentation.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    merci de votre aide

    Effectivement la question du compilateur peut se poser.

    Pour l'instant je suis entraind e faire des tests et effectiveemnt un -O3 ou -Ofast plante a la compilation de certaines parties du code.

    Pour l'instant le max que j'ai pu faire est avec ces arguments:
    -O2 -mfpmath=sse -msse3 -march=prescott -pipe -fno-strict-aliasing -fexpensive-optimizations

    Je suis entrain de faire les tests pour voir le gain par rapport a une compilation standard.

  7. #7
    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
    Citation Envoyé par everest31 Voir le message
    effectiveemnt un -O3 ou -Ofast plante a la compilation de certaines parties du code.
    Bizarre autant qu'étrange.. Ce n'est pas à la compilation que ça devrait planter, mais à l'éxécution...
    "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

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Ce n'est pas à la compilation que ça devrait planter, mais à l'éxécution...
    Ca depend de la qualite du code...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    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
    Citation Envoyé par gangsoleil Voir le message
    Ca depend de la qualite du code...
    ah ? que ça plante en compilant avec -O3 et pas -O2 ?

    Bon, je ne sais pas, hein, je pose la question..

    Je sais qu'ayant essayé avec des décodeurs/encodeurs MPEG, par exemple, ou des sockets asyncrhones avec une grosse structure de code et de pointeurs au dessus, et des interrupts, déjà -O2 est limite, et -O3 fait planter quasi-systématiquement quel que soit le système..

    Mais au runtime..

    Pour mon instruction et mon enrichissement, aurais-tu un exemple qui plante à la compil ?
    "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

  10. #10
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ah ? que ça plante en compilant avec -O3 et pas -O2 ?

    Bon, je ne sais pas, hein, je pose la question.
    Et tu as bien raison de la poser.

    Ce que je sais, c'est que -O2 permet de detecter des erreurs de programmation que ne permettent pas de detecter les options de compilation plus faibles, c'est d'ailleurs pour ca que -O2 est recommandee pour la compilation, et non pas -O0 ou -O1.
    Du coup, mais c'est vrai que je n'ai jamais vu le cas vu que je ne me suis jamais servi de -O3, j'ai imagine que cette couche d'optimisation supplementaire pouvait creer ou reveler des problemes lors de la compilation. Mais c'est une hypothese, rien de plus.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    en fait c'est pas le -O3 qui me fait planté la compilation mais l'instruction -mfpmath=sse qui me fait planter la compilation avec un message d'erreur indiquant que le jeu d'instruction SSE est desactivé et qu'il faut obligatoirement compilé en 387.

Discussions similaires

  1. [GCC] Options de compilation -m*
    Par Nanoc dans le forum C++
    Réponses: 3
    Dernier message: 19/08/2009, 00h55
  2. Options de compilation GCC
    Par oranoutan dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 14/07/2007, 04h10
  3. Gcc options de compilations
    Par moon93 dans le forum Linux
    Réponses: 1
    Dernier message: 15/05/2006, 16h43
  4. [Code::Blocks]Options de compilation de gcc
    Par Marco85 dans le forum Code::Blocks
    Réponses: 2
    Dernier message: 28/02/2006, 10h16
  5. Option de compilation gcc : sem.h
    Par Luther13 dans le forum Linux
    Réponses: 8
    Dernier message: 29/12/2004, 12h29

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