Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 24 893 135

  • Nb. de membres 186
  • Nb. d'articles 1 269
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» GCC: Pourquoi l'option -O3 est un faux ami (optimisation)

GCC: Pourquoi l'option -O3 est un faux ami (optimisation)#1843

5Contributeur(s)
thellierAmiDARKsinisrusElwoodcorto
3 Modérateur(s)
K-LElwoodcorto
corto cortoicon_post
Normalement, le compilateur sait inliner (automatiquement) quand il faut. Il faudrait voir dans votre code quel facteur fait qu'il inline à outrance. L'inline sert pour les petites fonctions (qui n'en appellent pas d'autres) dont il applique le code directement dans le code des fonctions appelantes au lieu de le laisser dans une fonction dédiée : ça évite un saut, une éventuelle pénalité de cache, la gestion des paramètres, ...

Je ne compile jamais en -O3. Pas pour cette raison liée aux inlines mais surtout parce que en -O2 ... ça me va bien (et c'est moins long à compiler). L'optimisation : 1/ c'est une fois que ça marche bien 2/ ça demande toujours à être mesuré

Pour le groupement des fonctions afin d'améliorer la cachabilité ... je ne vois pas le gain puisque où que soit le code, s'il est exécuté souvent dans un temps réduit, il restera en cache.
Grouper des fonctions ça pourrait être valable pour éviter des fautes de TLB mais là encore ... il faut qu'il y ait manifestement un problème lié à ça et il faut donc le mesurer (un jour, avec Hieronymus ...).

Pour revenir aux inlines, si vous mettez "inline" explicitement, sachez qu'il y a aussi une option de warning dans gcc pour alerter s'il n'a pas pu inliner une fonction qui aurait dû l'être.
thellier thelliericon_post
Merci Corto pour ton expertise

>Normalement, le compilateur sait inliner (automatiquement) quand il faut
C'est ce que je pensais aussi ...

>Pour le groupement des fonctions afin d'améliorer la cachabilité ... je ne vois pas le gain puisque où que soit le code, s'il est exécuté souvent dans un temps réduit, il restera en cache.
Dans le cas où une fonction qui fais un gros traitement (donc se retrouve en cache) appelle une autre fonction souvent ... et donc se serait bien que les 2 soient dans le cache simultanément
Mais c'est purement spéculatif
Existe il un outil qui donne l'adresse des fonctions dans le binaire ? ainsi on connaittrais la position/taille des fonctions

>si vous mettez "inline" explicitement, sachez qu'il y a aussi une option de warning dans gcc
Oui je l'ai vu sur une fonction avec un nombre de paramétres variables = ca empéche d'inliner =normal
Ca m'a confirmé que les autres fonctions (que je voulais) avaient elles bien été inlinés

Alain
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme