web-dev-qa-db-fra.com

Compiler GNU / Linux avec optimisation -O3

Il est dit que compiler GNU outils et noyau Linux avec -O3 Option d'optimisation du GCC produira des bugs bizarres et funky. Est-ce vrai? Quelqu'un a-t-il essayé ou est-ce juste un canular?

18
uray

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

8
izaac

-O3 a plusieurs inconvénients:

  1. Tout d'abord, il produit souvent un code plus lent que -O2 ou -Os. Parfois, cela produit un code plus long en raison de la dérive de boucle, ce qui peut être plus lent en raison de pire performance de cache du code.
  2. Comme il a été dit, cela produit parfois un code incorrect. Il peut être dû à une erreur d'optimalisation ou d'erreur dans le code (comme ignorer un aliasing strict). Comme le code du noyau est parfois et qu'il faut parfois être "intelligent", je dirais qu'il est possible que certains développeurs de noyau apportent une erreur. J'ai vécu divers problèmes étranges, comme le collision des utilitaires de l'utilisateur, lorsque j'ai compilé le noyau avec GCC 4.5, ce qui était stable. J'utilise toujours GCC 4.4 pour le noyau et plusieurs utilitaires d'utilisateurs sélectionnés en raison de divers bugs. La même chose peut demander -O3.
  3. Je ne pense pas qu'il offre beaucoup d'avantages pour le noyau Linux. Le noyau ne fait pas de calculs lourds et dans des endroits, il est optimisé avec l'assemblage. -O3 Flag sera non modifier le coût du changement de contexte ou la vitesse des E/S. Je ne pense pas que quelque chose comme <0,1% de vitesse de performance globale en vaut la peine.
16
Maciej Piechotka

Au cours des 10 dernières années, j'ai exécuté plusieurs systèmes Gentoo avec 1000 packages en utilisant -O3 -march=native Globalement et je n'ai pas encore rencontré de ces problèmes de stabilité mythiques que -O3 Est censé avoir. Les critères de référence des applications intensives de la CPU (comme des applications mathématiques/science) montrent systématiquement -O3 Pour produire du code plus rapide, après tout ce serait inutile si ce serait inutile. Pour une majorité d'applications de bureau CFLAGS _ Peu importe de toute façon, car ils sont IO liés, mais cela compte beaucoup pour les trucs latéraux du serveur liés à la CPU.

5
Mark Pariente

-O3 utilise des optimisations agressives qui ne sont sûres que si certaines hypothèses sur le registre utilisent, comment les cadres de pile sont interagi avec et que la réentruisance de la fonction est vraie, et ces hypothèses ne sont pas garanties pour être vraies dans certains codes, comme le noyau, en particulier lorsque le noyau est en particulier lorsque l'assemblage en ligne est utilisé (comme dans certaines parties de niveau très bas du noyau et de ses modules de pilote).

3
David Spillett

Bien que vous puissiez vous échapper avec l'utilisation -O3 et d'autres boutons d'optimisation sur la plupart des applications (et celle-ci CAN Résultat à des améliorations de vitesse), j'hésiterais à utiliser de tels modifications le noyau lui-même ou sur la chaîne d'outils requise pour la construire (compilateur, binutils, etc.).

Pensez-y: est un gain de performance de 5% des sous-systèmes RAID et EXT3 d'une valeur de système de système ou de perte de données potentielle et/ou de corruption?

Tweak Tous les boutons à souhaiter pour ce port de séquence que vous jouez ou les codecs audio/vidéo que vous utilisez pour déchirer votre collection de DVD aux fichiers DivX. Vous verrez probablement une amélioration. Il suffit de ne pas gâcher le noyau que si vous avez le temps de perdre du temps et que vous pouvez supporter de perdre.

0
Geoff Fritz