2010-11-24 29 views
2

J'ai trouvé beaucoup d'options d'optimisation hereQuelles sont les options d'optimisation gcc les plus couramment utilisées?

En les parcourant, j'ai trouvé que certains d'entre eux avaient des effets secondaires (ce qui rend impossible le débogage). Dans mon expérience, j'ai trouvé le -O1 à -O3 et -Os le plus couramment utilisé. Mais, quelles sont les autres options couramment utilisées dans vos projets?

+0

http://stackoverflow.com/questions/3375697/useful-gcc-flags-for-c – karlphillip

Répondre

3

-ffast-math peut avoir un impact significatif sur les performances des logiciels intensifs à virgule flottante. De plus, la compilation spécifique au processeur cible en utilisant l'option -march= appropriée peut avoir un léger impact sur les performances, mais à proprement parler, il ne s'agit pas d'une option d'optimisation.

+0

Vous devriez noter que cette option brise terriblement la conformité à la norme IEEE 754 et ne devrait être utilisée que si vous êtes sûr que tout va bien. En pratique, cela signifie que vous pouvez utiliser si vous traitez des nombres à virgule flottante comme de mauvaises approximations aléatoires de nombres réels, mais pas si vous les utilisez de manière précise. –

+0

Non, pas son nouveau ;-) À mon avis, un logiciel qui repose sur les différences de l'implémentation IEEE754 de -fast-math et sans peut être considéré comme cassé. Parce qu'il repose sur la comparaison exacte des flotteurs. -fno-fast-math rendra votre programme en aucun cas plus "précis" ou les flotteurs ne seront plus "précis". Ce qu'il va faire, c'est changer le comportement de NaNs, et si votre logiciel en a beaucoup, vous avez de plus gros problèmes. Il y a une exception: un logiciel qui contient des fonctions IEEE754 comme isNaN() (qui ne sont en fait jamais utilisées, jamais), le plus souvent trouvé dans des interpréteurs comme python ou mysql. – hirschhornsalz

1

-march=native avec les versions récentes de gcc supprime tout le mal de tête de déterminer la plate-forme sur laquelle vous compilez.

+1

Malheureusement, pas _all_ le mal de tête. Sur ma machine, un core 2 de 45 nm, -march = natif ou même -march = core2 active toutes les choses nécessaires, y compris -msse3 et -mssse3, mais pas le jeu d'instructions -msse4_1, disponible sur ce processeur (mais pas sur le modèle 65 nm!). Certaines instructions SSE4.1 sont réellement générées et utilisées à partir du code C "normal" si -ftree-vectorize est activé (at -O3). La différence de performance est bien sûr à peine mesurable. – hirschhornsalz

+0

@drhirsch: +1 pour la dernière phrase de votre commentaire. :-) –