Compiler GNU / Linux avec l'optimisation -O3


Réponses:


8

Il est utilisé dans Gentoo, et je n'ai rien remarqué d'inhabituel.


8
Cependant, veuillez noter que -O3 est souvent filtré par les ebuilds.
Maciej Piechotka

17

-O3 présente plusieurs inconvénients:

  1. Tout d'abord, il produit souvent du code plus lent que -O2ou -Os. Parfois, il produit du code plus long en raison du déroulement de la boucle, qui peut en fait être plus lent en raison des performances de cache du code moins bonnes.
  2. Comme on l'a dit, cela produit parfois un code incorrect. Cela peut être dû à une erreur d'optimisation ou à une erreur de code (comme ignorer un aliasing strict). Comme le code du noyau est parfois et doit parfois être «intelligent», je dirais qu'il est possible qu'un développeur de noyau fasse une erreur. J'ai rencontré divers problèmes étranges, comme le plantage des utilitaires de l'espace utilisateur, lorsque j'ai compilé le noyau avec gcc 4.5 qui à ce moment était stable. J'utilise toujours gcc 4.4 pour le noyau et plusieurs utilitaires de l'espace utilisateur sélectionnés en raison de divers bugs. La même chose peut s'appliquer -O3.
  3. Je ne pense pas que cela offre beaucoup d'avantages pour le noyau Linux. Le noyau ne fait pas de calculs lourds et par endroits, il est optimisé avec l'assemblage. -O3L'indicateur ne changera pas le coût du changement de contexte ou la vitesse des E / S. Je ne pense pas que quelque chose comme <0,1% d'accélération des performances globales en vaille la peine.

6
Linux est compilé avec -fno-strict-aliasing car Linus pense que gcc est stupide et trop restrictif car il fait des choses stupides comme traiter les valeurs comme différentes même si elles ne le sont manifestement pas (c'est-à-dire que l'aliasing a été introduit dans une fonction et que le compilateur peut voir). voir mail-archive.com/linux-btrfs@vger.kernel.org/msg01647.html
Spudd86

@ Spudd86: Voulait-il dire qu'ils ne sont évidemment pas destinés à la lecture de code humain ou au compilateur? Comme je l'ai dit, le noyau doit parfois faire des choses intelligentes que les programmes de l'espace utilisateur ne devraient pas faire. Ce qui a du sens pour l'espace utilisateur (optimisation lourde dans certaines régions) peut ne pas avoir de sens pour le noyau (plus grande quantité de code intelligent + goulot d'étranglement à différents endroits).
Maciej Piechotka

1
Ce qu'il a dit ne s'applique pas non plus à l'espace utilisateur.
Spudd86

1
@ Spudd86: Je ne suis donc pas d'accord avec cela. Rendre le compilateur «assez intelligent» pour repérer de telles choses «évidentes» n'est pas anodin. Ainsi, la seule façon possible est a) de produire uniquement du code lent (euh) (ce qui est inacceptable pour certains cas d'utilisation dans, par exemple, HPC) et / ou de forcer les programmeurs à optimiser manuellement le code b) de rendre les règles plus strictes pour autoriser `` stupide '' compilateur pour faire l'optimisation - route prise par la norme C.
Maciej Piechotka

6

Notez que de gros morceaux de la chaîne d'outils (glibc en particulier) à plat ne se compilent pas si vous modifiez les niveaux d'optimisation. Le système de construction est configuré pour ignorer vos préférences -O pour ces sections sur la plupart des distributions sensées.

En termes simples, certaines fonctionnalités fondamentales de la bibliothèque et du système d'exploitation dépendent du fait que le code fait ce qu'il dit, et non de ce qui serait plus rapide dans de nombreux cas. -fgcse-after-reload en particulier (activé par -O3) peut provoquer des problèmes étranges.


5

Au cours des 10 dernières années, j'ai utilisé plusieurs systèmes Gentoo avec plus de 1000 packages à l' -O3 -march=nativeéchelle mondiale et je n'ai encore rencontré aucun de ces problèmes de stabilité mythiques qui -O3sont censés avoir. Les références des applications gourmandes en CPU (comme les applications mathématiques / scientifiques) se révèlent systématiquement -O3produire un code plus rapide, après tout, cela serait inutile si ce n'était pas le cas. Pour la majorité des applications de bureau CFLAGS, peu importe de toute façon, car elles sont liées aux E / S, mais cela compte beaucoup pour les choses côté serveur qui sont liées au processeur.


3

-O3 utilise des optimisations agressives qui ne sont sûres que si certaines hypothèses sur l'utilisation des registres, la façon dont les cadres de pile interagissent et la réentrance des fonctions sont vraies, et ces hypothèses ne sont pas garanties d'être vraies dans certains codes comme le noyau, en particulier lorsque l'assemblage en ligne est utilisé (comme c'est le cas dans certaines parties de bas niveau du noyau et de ses modules de pilote).


Sans oublier que ce n'est pas toujours plus rapide, vous devez en fait trouver des repères et le tester par rapport -O2à connaître la météo ou non, cela fait mal ou aide
Spudd86

0

Bien que vous puissiez vous en sortir en utilisant -O3 et d'autres boutons d'optimisation sur la plupart des applications (et peut entraîner des améliorations de vitesse), j'hésiterais à utiliser de tels ajustements le noyau lui-même ou sur la chaîne d'outils requise pour le construire (compilateur, binutils, etc.).

Pensez-y: un gain de performances de 5% des sous-systèmes raid et ext3 vaut-il un plantage du système ou une perte et / ou une corruption potentielle des données?

Ajustez tous les boutons pour le port Quake que vous jouez ou les codecs audio / vidéo que vous utilisez pour extraire votre collection de DVD en fichiers divx. Vous verrez probablement une amélioration. Ne gâchez pas le noyau, sauf si vous avez du temps à perdre et des données que vous pouvez supporter à perdre.


3
Je ne demande pas si cela vaut la peine ou non, sûr ou non, ou pourquoi nous ne devrions pas faire cela, ce que je demande, c'est le fait, cela produit-il vraiment des bogues dans une application réelle?, Cela s'est-il jamais produit?, est-ce prouvé?
uray
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.