J'ai un programme avec pleins de fonctions inlines et de templates
imbriqués.
Il est essentiel que toutes (ou presque) les fonctions déclarées 'inline'
soit réellement inlinées dans l'exécutable afin que la vitesse d'exécution
soit correcte.
Je l'ai déjà compilé avec ICL (Intel Compiler) sous Visual 7.1, ça marche
bien, il est rapide. Et quand j'utilise '__forceinline' il est encore un peu
plus rapide.
Mais avec GCC 3.4 (Cygwin et Linux) ou ICC (Linux), il est environ 5 fois
plus lent que sous Windows.
L'option '-Winline' de GCC me montre que beaucoups de functions ne sont pas
inlinées comme il faudrait.
J'essaye de jouer sur les options de GCC, mais rien n'est satisfaisant pour
l'instant.
-finline-limit
--param large-function-growth
--param max-inline-insns-single
...
Quelqu'un a des suggestions pour forcer 'inline'? ou du moins augmenter
considérablement la limite que GCC et ICC se fixent.
Quelqu'un a des suggestions pour forcer 'inline'? ou du moins augmenter considérablement la limite que GCC et ICC se fixent.
Bonjour,
gcc 3.4 a effectivement l'air d'ignorer les inline sans option d'optimisation particulière.
Par contre, avec -O1 sur la ligne de commande, il semble les prendre d'avantage en considération...
Erwann ABALEA
Bonjour,
On Sat, 21 May 2005, tonio wrote:
Quelqu'un a des suggestions pour forcer 'inline'? ou du moins augmenter considérablement la limite que GCC et ICC se fixent.
gcc 3.4 a effectivement l'air d'ignorer les inline sans option d'optimisation particulière.
Par contre, avec -O1 sur la ligne de commande, il semble les prendre d'avantage en considération...
Sinon, pour forcer l'inline, on peut passer par l'attribut "always_inline":
info gcc --index-search="function attributes"
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- On Unix and Unix Hackers ``The problem here is that there is parent and child but no adult.'' Lynne Jolitz
Bonjour,
On Sat, 21 May 2005, tonio wrote:
Quelqu'un a des suggestions pour forcer 'inline'? ou du moins augmenter
considérablement la limite que GCC et ICC se fixent.
gcc 3.4 a effectivement l'air d'ignorer les inline sans option
d'optimisation particulière.
Par contre, avec -O1 sur la ligne de commande, il semble les prendre
d'avantage en considération...
Sinon, pour forcer l'inline, on peut passer par l'attribut
"always_inline":
info gcc --index-search="function attributes"
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
On Unix and Unix Hackers
``The problem here is that there is parent and child but no adult.''
Lynne Jolitz
Quelqu'un a des suggestions pour forcer 'inline'? ou du moins augmenter considérablement la limite que GCC et ICC se fixent.
gcc 3.4 a effectivement l'air d'ignorer les inline sans option d'optimisation particulière.
Par contre, avec -O1 sur la ligne de commande, il semble les prendre d'avantage en considération...
Sinon, pour forcer l'inline, on peut passer par l'attribut "always_inline":
info gcc --index-search="function attributes"
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- On Unix and Unix Hackers ``The problem here is that there is parent and child but no adult.'' Lynne Jolitz
Patrick Laurent
Merci pour vos réponses
Par contre, avec -O1 sur la ligne de commande, il semble les prendre d'avantage en considération... J'avais bien entendu déjà essayé depuis longtemps, même avec -O2 ou -O3
Sinon, pour forcer l'inline, on peut passer par l'attribut "always_inline": J'avais aussi essayé.
J'avais écris cette macro tout au début du programme: #define inline __attribute__((__always_inline__)). Mais l'option '-Winline' me montre que beaucoup trop de fonctions ne sont pas encore inlinées.
Il semblerait que cet attribut permette d'inliner une fonction plutôt qu'une autre. Mais si toutes les fonctions sont marquées 'always_inline', GCC ne les inline pas toutes si pour une quelconque raison (fonction trop volumineuse...) il estime qu'il ne faut pas l'inliner.
Et cerise sur le gâteau, il y a aussi des erreurs bizarres, GCC dit qu'il est "désolé"!. Par exemple: sorry, unimplemented: inlining failed in call to '...': function not inlinable sorry, unimplemented: called from here...
suggestions?
Merci pour vos réponses
Par contre, avec -O1 sur la ligne de commande, il semble les prendre
d'avantage en considération...
J'avais bien entendu déjà essayé depuis longtemps, même avec -O2 ou -O3
Sinon, pour forcer l'inline, on peut passer par l'attribut
"always_inline":
J'avais aussi essayé.
J'avais écris cette macro tout au début du programme: #define inline
__attribute__((__always_inline__)).
Mais l'option '-Winline' me montre que beaucoup trop de fonctions ne sont
pas encore inlinées.
Il semblerait que cet attribut permette d'inliner une fonction plutôt qu'une
autre.
Mais si toutes les fonctions sont marquées 'always_inline', GCC ne les
inline pas toutes si pour une quelconque raison (fonction trop
volumineuse...) il estime qu'il ne faut pas l'inliner.
Et cerise sur le gâteau, il y a aussi des erreurs bizarres, GCC dit qu'il
est "désolé"!. Par exemple:
sorry, unimplemented: inlining failed in call to '...': function not
inlinable
sorry, unimplemented: called from here...
Par contre, avec -O1 sur la ligne de commande, il semble les prendre d'avantage en considération... J'avais bien entendu déjà essayé depuis longtemps, même avec -O2 ou -O3
Sinon, pour forcer l'inline, on peut passer par l'attribut "always_inline": J'avais aussi essayé.
J'avais écris cette macro tout au début du programme: #define inline __attribute__((__always_inline__)). Mais l'option '-Winline' me montre que beaucoup trop de fonctions ne sont pas encore inlinées.
Il semblerait que cet attribut permette d'inliner une fonction plutôt qu'une autre. Mais si toutes les fonctions sont marquées 'always_inline', GCC ne les inline pas toutes si pour une quelconque raison (fonction trop volumineuse...) il estime qu'il ne faut pas l'inliner.
Et cerise sur le gâteau, il y a aussi des erreurs bizarres, GCC dit qu'il est "désolé"!. Par exemple: sorry, unimplemented: inlining failed in call to '...': function not inlinable sorry, unimplemented: called from here...