133 votes

Combien y a-t-il de niveaux d'optimisation du CCAG ?

Combien de CCG Les niveaux d'optimisation existent-ils ?

J'ai essayé gcc -O1, gcc -O2, gcc -O3, et gcc -O4.

Si j'utilise un très grand nombre, cela ne fonctionnera pas.

Cependant, j'ai essayé

gcc -O100

et il a compilé.

Combien y a-t-il de niveaux d'optimisation ?

13 votes

@minitech Quel est le FM que vous recherchez ? Même avec man gcc sur Cygwin (12000 lignes impaires), vous pouvez rechercher -O et trouver tout ce que les réponses ci-dessous indiquent, et même plus.

1 votes

@minmaxavg après avoir lu la source, je ne suis pas d'accord avec vous : tout ce qui est plus grand que 3 est identique à 3 (tant qu'il n'est pas int débordement). Voir aussi ma réponse .

2 votes

En fait, GCC dispose de nombreux autres drapeaux pour affiner les optimisations. -fomit-stack-pointer modifiera le code généré.

199voto

Glen Points 13521

Pour être pédant, il y a 8 options -O valides différentes que vous pouvez donner à gcc, bien qu'il y en ait qui signifient la même chose.

La version originale de cette réponse indiquait qu'il y avait 7 options. Le CCG a depuis ajouté -Og pour porter le total à 8.

A partir de la page de manuel :

  • -O (Identique à -O1 )
  • -O0 (pas d'optimisation, valeur par défaut si aucun niveau d'optimisation n'est spécifié)
  • -O1 (optimiser au minimum)
  • -O2 (optimiser plus)
  • -O3 (optimiser encore plus)
  • -Ofast (optimiser de manière très agressive au point d'enfreindre les normes de conformité)
  • -Og (Optimiser l'expérience de débogage. -Og active les optimisations qui n'interfèrent pas avec le débogage. Il devrait s'agir de l'option niveau d'optimisation de choix pour le cycle standard édition-compilation-débogage, offrant un niveau raisonnable d'optimisation tout en maintenant une compilation et un débogage rapides. tout en maintenant une compilation rapide et une bonne expérience de débogage).
  • -Os (Optimiser la taille. -Os permet à tous les -O2 des optimisations qui n'augmentent généralement pas la taille du code. Il effectue également d'autres optimisations destinées à réduire la taille du code. -Os désactive les options d'optimisation suivantes : -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version )

Il peut également y avoir des optimisations spécifiques à la plateforme, comme le note @pauldoo, OS X a -Oz .

31 votes

Si vous développez sur Mac OS X, il y a une fonction supplémentaire de -Oz qui consiste à "optimiser la taille de manière plus agressive que les -Os " : developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/

9 votes

Note : O3 n'est pas nécessairement meilleur que O2 même si le nom le suggère. Essayez les deux.

2 votes

@pauldoo 404 page, remplacer par archive.org

44voto

Demetri Points 715

Sept niveaux distincts :

  • -O0 (par défaut) : Pas d'optimisation.

  • -O ou -O1 (même chose) : Optimisez, mais ne passez pas trop de temps.

  • -O2 : Optimiser de manière plus agressive

  • -O3 : Optimiser de la manière la plus agressive

  • -Ofast : Équivalent à -O3 -ffast-math . -ffast-math déclenche des optimisations en virgule flottante non conformes aux normes. Cela permet au compilateur de prétendre que les nombres à virgule flottante sont infiniment précis et que l'algèbre sur ces nombres suit les règles standard de l'algèbre des nombres réels. Cela permet également au compilateur de demander au matériel d'effacer les dénormaux à zéro et de traiter les dénormaux comme des zéros, au moins sur certains processeurs, y compris x86 et x86-64. Les dénormaux déclenchent un chemin lent sur de nombreux FPU, et les traiter comme zéro (ce qui ne déclenche pas le chemin lent) peut être un gain de performance important.

  • -Os : Optimiser la taille du code. Cela peut en fait améliorer la vitesse dans certains cas, grâce à un meilleur comportement du I-cache.

  • -Og : Optimiser, mais ne pas interférer avec le débogage. Cela permet d'obtenir des performances non gênantes pour les constructions de débogage et est destiné à remplacer -O0 pour les versions de débogage.

Il existe également d'autres options qui ne sont activées par aucune d'entre elles et qui doivent être activées séparément. Il est également possible d'utiliser une option d'optimisation, mais de désactiver les drapeaux spécifiques activés par cette optimisation.

Pour plus d'informations, voir le site web du CCG.

0 votes

En effet, bien que pour être juste envers les autres réponses, ni -Ofast ni -Og n'existaient lorsque ces réponses ont été écrites.

0 votes

Alors pourquoi l -O100 compile alors ?

3 votes

@einpoklum parce que GCC traite tout ce qui est au-dessus de -O3 comme égal à -O3.

9voto

hirschhornsalz Points 16306

Cinq : -O0...-O3, et -Os.

Tout ce qui est supérieur à O3 est identique à O3, et notez que O3 ne produit pas toujours un code plus rapide que O2.

5voto

Konrad Rudolph Points 231505

Il y en a quatre : -O0 (pas d'optimisation) jusqu'à -O3 (maximum). Les nombres plus élevés sont identiques à -O3 .

3voto

Tom Points 12285

Quatre (0-3) : Voir le GCC 4.4.2 manuel . Tout ce qui est supérieur est juste -O3, mais à un moment donné, vous dépasserez la limite de la taille de la variable.

0 votes

J'ai exploré le code source dans ma réponse et je suis d'accord avec vous. De manière plus pédante, GCC semble s'appuyer sur atoi comportement non défini, suivi d'un 255 limite interne.

7 votes

Veuillez envisager de retirer votre réponse, car elle est (du moins aujourd'hui) incorrecte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X