Forum » » Création-Développement » » GCC: Pourquoi l'option -O3 est un faux ami (optimisation)
Posté : 07-04-2014 15:26
>ça mériterait de mettre ça en anglais et le poster sur os4coding.net
Sans moi : mon anglais est trop afffreux
En fait il faut bien voir les limites du système de l'inlining :
1) Si ça insére ( les instruction d' ) une fonction petite dans toutes les grosses fonctions qui s'en servent = c'est bien
2) Si ça insére ( les instruction d' ) une fonction grosse dans toutes les petites fonctions qui s'en servent = c'est pas bien
Par exemple si on a une petite fonction mathématique comme mon Normalize (qui donnera peut être 20 instructions ASM) alors autant l'insérer aux rares endroits où on s'en sert = là l'inlining est efficace
Par contre si chaque fonction qui utilise ma grosse fonction DrawObject() (qui elle doit faire des milliers d'instructions) commence à insérer tout ça alors là l'obésité du code menace = là l'inlining fait n'importe quoi
En plus certaines fonctions servent rarement (par exemple mon AddObject() qui sert qu'au moment du chargement de fichiers 3D) ==> est il utile de les rendre objectivement plus rapides mais aussi plus grosses ?
Bref si on y réfléchis les fonctions que l'on veut vraiment inliner sont:
1) Celles qui servent qu'à un endroit où on aurait d'ailleurs dû écrire le code mais qu'on a mis dans une fonction séparée pour faire plus propre
2) Celles qui servent souvent et/ou dans des boucles et sont petites (comme une fonction mathématique)
Normalement on en ferait des macros mais parfois c'est plus pratique à écrire sous forme de fonction
Par exemple la fonction Normalize aurait été chiante à écrire en macro à cause de la variable locale size
Pour ces fonctions il faut donc ajouter "inline"
comme ça
inline void Normalize(Vertex3D *c)
Alain
Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1843&forum=14