Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2385 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Performances moins bonnes sous g++ 3.3

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Performances moins bonnes sous g++ 3.3

n°645747
Guismo45
Posté le 17-02-2004 à 17:01:29  profilanswer
 

Bonjour,
 
J'ai un programme qui donne des performances correctes sous g++-2.95. Quelqu'un saurait-il pourquoi ce même programme donne des performances (temps) nettement moins bonnes sous g++-3.3 ?
STL ou string aurait qqchose à voir la-dedans ?
 
Merci.

mood
Publicité
Posté le 17-02-2004 à 17:01:29  profilanswer
 

n°645807
Taz
bisounours-codeur
Posté le 17-02-2004 à 17:39:33  profilanswer
 

non. des chiffres, des résultats de profiler, etc on veut des infos

n°645836
Guismo45
Posté le 17-02-2004 à 18:03:49  profilanswer
 

OK.
 
Un chiffre comparatif mais le resultat est tjs le meme, 2.95 plus rapide que 3.3, quelques soient la taille des données fournies en entree. Exemple: qd ca prend 13sec sous 2.95, ca va mettre 17sec avec 3.3. Y en a d'autre mais c tjs pareil.
 
(Memes options de compilations -O3 -funroll-all-loops -fomit-frame-pointer...)
 
Avec gprof, la comparaison est difficile car les fonctions listées sont pas les mêmes. Certaines fonctions de bases C++ ne semblent pas etre comptabilisees.  
Pour G++3.3 et le meme exemple, il renvoie un temps total de 12.58s, et pour 2.95, ca donne 12.38s. Mais par contre dans le listing gprof pour 2.95, il y a les basic-string qui apparaissent. Elles sont pas dans le listing gprof obtenu avec 3.3.
 
Avec gcov, ca donne la meme chose pour les deux versions, ce qui est logique, mais bon je donne l'info quand même.
 
kess kil fo comme chiffres, je peux pas tout mettre... c un peu long...
 
Je mets ici les premierres lignes de chaque listing obtenu. D'abord avec g++ 2.95, puis avec g++ 3.3.
 
time   seconds   seconds    calls   s/call   s/call  name    
 35.29      4.44     4.44        1     4.44    12.55  Etape(int, bool **)
 18.60      6.78     2.34 14499822     0.00     0.00  basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >::replace(unsigned int, unsigned int, char const *, unsigned int)
 10.73      8.13     1.35 22536057     0.00     0.00  fusionneBitTabStatic(unsigned char **, unsigned char *)
  7.47      9.07     0.94 14499786     0.00     0.00  basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> >::replace(unsigned int, unsigned int, basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> > const &, unsigned int, unsigned int)
  5.41      9.75     0.68 22533640     0.00     0.00  fusionneBitTab(unsigned char **, unsigned char *)
  4.69     10.34     0.59  1513696     0.00     0.00  _List_base<Occurrence, allocator<Occurrence> >::clear(void)
  3.42     10.77     0.43 12825272     0.00     0.00  Node::getLabelEnd(void)
  2.94     11.14     0.37 12731122     0.00     0.00  Node::getLabelLength(void)
  2.54     11.46     0.32 20911004     0.00     0.00  Profil::E(void)
  2.38     11.76     0.30 22536057     0.00     0.00  Node::getSequences(void)
  2.38     12.06     0.30 14572592     0.00     0.00  Node::getLabelBeginning(void)
  1.67     12.27     0.21 14537633     0.00     0.00  Data::The_One_Sequence(void)
  1.11     12.41     0.14  5658558     0.00     0.00  Node::getChild(int)
  0.95     12.53     0.12   380842     0.00     0.00  nbSequenceInBitTabStatic(unsigned char *)
  0.24     12.56     0.03   378424     0.00     0.00  ReinitBitTab(unsigned char **)
  0.08     12.57     0.01     8015     0.00     0.00  extension(int, int, Node *, int *, int *)
  0.08     12.58     0.01        1     0.01     0.02  elagage_all(Node *, int *, int, bool)
  0.00     12.58     0.00   378424     0.00     0.00  Profil::Q(void)
  0.00     12.58     0.00    98621     0.00     0.00  Profil::K(void)
  0.00     12.58     0.00    86196     0.00     0.00  Profil::N(void)
 
 
****3.3****
 time   seconds   seconds    calls   s/call   s/call  name    
 40.93      5.19     5.19        1     5.19    12.42  Etape(int, bool**)
 14.51      7.03     1.84 22536057     0.00     0.00  fusionneBitTabStatic(unsigned char**, unsigned char*)
  7.73      8.01     0.98 22533641     0.00     0.00  std::list<Occurrence, std::allocator<Occurrence> >::insert(std::_List_iterator<Occurrence, Occurrence&, Occurrence*>, Occurrence const& )
  6.78      8.87     0.86 22533641     0.00     0.00  std::list<Occurrence, std::allocator<Occurrence> >::_M_create_node(Occurrence const& )
  4.30      9.42     0.55 22533640     0.00     0.00  fusionneBitTab(unsigned char**, unsigned char*)
  3.86      9.91     0.49  1513696     0.00     0.00  std::_List_base<Occurrence, std::allocator<Occurrence> >::__clear()
  3.63     10.37     0.46 12825272     0.00     0.00  Node::getLabelEnd()
  2.60     10.70     0.33 22536057     0.00     0.00  Node::getSequences()
  2.60     11.03     0.33 12731122     0.00     0.00  Node::getLabelLength()
  2.21     11.31     0.28 20911004     0.00     0.00  Profil::E()
  2.21     11.59     0.28 14572592     0.00     0.00  Node::getLabelBeginning()
  1.42     11.77     0.18   380842     0.00     0.00  nbSequenceInBitTabStatic(unsigned char*)
  1.38     11.94     0.18 14537633     0.00     0.00  Data::The_One_Sequence()
  1.26     12.10     0.16    98621     0.00     0.00  Profil::K()
  1.14     12.25     0.15  5658558     0.00     0.00  Node::getChild(int)
  0.87     12.36     0.11        1     0.11     0.11  std::list<Resultat, std::allocator<Resultat> >::_M_create_node(Resultat const& )
  0.55     12.43     0.07        1     0.07     0.18  std::list<Resultat, std::allocator<Resultat> >::insert(std::_List_iterator<Resultat, Resultat&, Resultat*>, Resultat const& )
  0.47     12.49     0.06                             Node::getLeafSequence()
  0.43     12.54     0.06                             Data::Input_Sequences_In_One()
  0.24     12.57     0.03     7883     0.00     0.00  Node::getSuffixLink()
  0.24     12.60     0.03                             nbSequenceInBitTabDynamic(unsigned char*)
  0.16     12.62     0.02     8531     0.00     0.00  Node::getChild(char)
  0.16     12.64     0.02        1     0.02     0.02  global constructors keyed to compteurGCOV
  0.12     12.66     0.02                             addBitTabValue(unsigned char**, int)
  0.08     12.67     0.01   378424     0.00     0.00  ReinitBitTab(unsigned char**)
  0.08     12.68     0.01      198     0.00     0.00  Node::deleteChild(int)
  0.04     12.68     0.01                             Node::getId()
  0.00     12.68     0.00   378424     0.00     0.00  Profil::Q()
  0.00     12.68     0.00    86196     0.00     0.00  Profil::N()

n°645843
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:10:27  profilanswer
 

enlève le unroll
 

Citation :

Pour G++3.3 et le meme exemple, il renvoie un temps total de 12.58s, et pour 2.95, ca donne 12.38s.

heink ?
 
c'est bizarre dans l'un t'as des string et l'autre des list qui prennent le pas ?
 
 
14499822 apples à string::replace ne peuvent pas disparaitre comme ça ... et list::insert ne peuvent pas apparaître comme ça ...

n°645857
Guismo45
Posté le 17-02-2004 à 18:22:38  profilanswer
 

si je mets juste O3 , les deux versions donnent des temps legerement moins bons, mais l'ecart reste sensiblement le meme.
 
oui g vu pour les string et les list... mais justement je sais pas pourkoi. Les 15000000 de replace sont tjs la, mais pas detectes par gprof...

n°645860
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:25:58  profilanswer
 

c possible que tu distribues le source pour voir ?

n°645868
Guismo45
Posté le 17-02-2004 à 18:36:01  profilanswer
 

oui ca peut se faire. par contre il est pas du tout pret a la distribution, et comme y a que moi qui bosse dessus, y a pas de commentaires... je v mettre qq phrases pour te permettre d'aller rapidement au fait.

n°645871
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:39:11  profilanswer
 

en fait j'aimerais faire les tests moi aussi
 
tu as essayé de compiler avec -Winline ? ça affiche un message quand des fonctions ne sont pas inlinées comme demandé.
 
sinon de toutes façons, on poursuivra ce sujet pour améliorer ton programme
 
 
quid de -ftracer ?


Message édité par Taz le 17-02-2004 à 18:49:17
n°645888
Guismo45
Posté le 17-02-2004 à 18:49:42  profilanswer
 

oui. Je fais -Wall -ansi en general...
 
ok je veux bien, mais c bizarre dans la mesure où en général les précédentes upgrades de gcc ne bouleversaient pas vraiment mes programmes, et en general donnaient des resultats similaires voire meilleurs. Mais depuis la version 3.2, c la cata. En septembre, g utilisé la 3 il me semble, et ct ok.

n°645890
Taz
bisounours-codeur
Posté le 17-02-2004 à 18:52:05  profilanswer
 

compare les messages avec -Winline
 
essaie -ftracer, ça devrait (peut-etre) améliorer les choses.
 
tu as compilé en -s pour dégager les symboles ?

mood
Publicité
Posté le 17-02-2004 à 18:52:05  profilanswer
 

n°645894
Guismo45
Posté le 17-02-2004 à 19:05:20  profilanswer
 

Y a aucun warning, et j'ai essayé avec -s et -ftracer.
Non ca ne change rien, desole.

n°645897
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:08:00  profilanswer
 

tu veux pas passer un tar.bz2 et un makefile que je puisse teste, on peut pas exclure un paquet de g++ foireux ...

n°645902
Guismo45
Posté le 17-02-2004 à 19:13:24  profilanswer
 

ok on fait comment ici pour t'envoyer un fichier ?

n°645907
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:18:31  profilanswer
 

ben soit tu le mets sur le web et tu colles un lien, soit tu me spam sur

Spoiler :

TazForEver@dlfp.org

n°645913
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:23:10  profilanswer
 

en tout cas sur un programme classique et simple, la taille du binaire varie déjà beaucoup ...
 

[bdejean@iplmap022 tmp]$ g++-2.95 -s -O3 -Winline  bs.cpp && ll ./a.out
-rwx------    1 bdejean  bdejean       17K 2004-02-17 19:22 ./a.out
[bdejean@iplmap022 tmp]$ g++-3.2 -s -O3 -Winline  bs.cpp && ll ./a.out
-rwx------    1 bdejean  bdejean       12K 2004-02-17 19:22 ./a.out
[bdejean@iplmap022 tmp]$ g++-3.3 -s -O3 -Winline  bs.cpp && ll ./a.out
-rwx------    1 bdejean  bdejean       11K 2004-02-17 19:22 ./a.out

n°645917
Guismo45
Posté le 17-02-2004 à 19:27:09  profilanswer
 

il manque rien, c bon ?

n°645920
Guismo45
Posté le 17-02-2004 à 19:29:39  profilanswer
 

oui g vu. pour mon prog, de memoire c pas tout a fait le double mais ca doit pas en etre loin...

n°645922
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:31:16  profilanswer
 

ouais j'ai comme toi pour le moment
 
3.3 TEMPS TOTAL : 9.21 sec
3.2 TEMPS TOTAL : 8.14 sec
2.95 TEMPS TOTAL : 7.6 sec
 

n°645924
Guismo45
Posté le 17-02-2004 à 19:34:16  profilanswer
 

c'est quoi ton processeur ?

n°645927
Guismo45
Posté le 17-02-2004 à 19:35:31  profilanswer
 

moi j'execute soit sur un amd 900 mhz ou un intel 800 mhz, d'ou la difference de temps.

n°645933
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:41:54  profilanswer
 

oui oui. c'est une peu bizarre tout ça quand même. je regarde le code. mais je vois pas de solutions pour le moment, si ce n'est continué d'utiliser g++-3.3 qui est vraiment meilleur, sauf sur ce cas précis, mais en tout cas qui supporte bien mieux l'ISO et dont la STL est plus conforme

n°645942
Taz
bisounours-codeur
Posté le 17-02-2004 à 19:59:24  profilanswer
 

en tout cas ton code est pas joli joli (t'aurais pas fait du C avant ?)
 
en tout cas, vu que j'arrives vraiment avoir les différences entre les g++, tu ferais bien d'inliner un peu à la main( genre les 3/4 de Node.cpp -> Node.h, le reste du code étant particulièrement imbittable, je me suis abstenu :D)
 
tu devrais peut être soumettre ton cas sur une ml de g++

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Performances moins bonnes sous g++ 3.3

 

Sujets relatifs
performances opengl[ADO.NET] Performances ADO.NET vs ADO 2.7
Impact de la modélisation sur les performances?[Delphi] Concaténation de chaines et performances... {long}
Un site avec DB, ou trouvers des bonnes sources[mySql] conception et performances
GUI en C++ : des bonnes docs ???Cherche bonnes formations langage SQL et Cristal Report
[Access] Questions sur ses performances[php] NEWBIE ! question performances
Plus de sujets relatifs à : Performances moins bonnes sous g++ 3.3


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)