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

  FORUM HardWare.fr
  Programmation
  C++

  Compilateurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilateurs

n°933157
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 17:27:14  profilanswer
 

J'obtiens d'excellentes performances avec VC7. Avec Cygwin et MinGW le code semble pas ou peu optimisé. C'est parce que ces deux derniers "émulent" GCC (GNU/Linux) ou cela n'a rien à voir ?


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 28-12-2004 à 17:27:14  profilanswer
 

n°933254
Lam's
Profil: bas.
Posté le 28-12-2004 à 21:09:04  profilanswer
 

T'as mis quoi comme options de compil à gcc  ? (parce que cygwin ou mingw, c'est gcc). Parce qu'à priori, il devrait y avoir 30% de différence au max à moins que tu tombes sur des optims SSE2 ou ce genre de choses là.
 
Gcc est généralement moins efficace que les compilateurs sur lesquels les boites ont bien investi (donc Visual C++, ICC, Forte, et aCC. Euh, en fait, non pas aCC), entre autres parce que son optimiseur est souvent pas assez fiable pour faire du code en production (et parce qu'il y a trop de disparités entre chaque release pour qu'on donne carte blanche à chaque nouvelle release comme ça). Mais il est libre et portable...

n°933273
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 21:56:50  profilanswer
 

Avec MinGW Studio ou DevC++, il y a tres peu d'options pour configurer GCC (avec/sans debug, niv optimisation).  
 
Je ne maitrise pas du tout les options en ligne de commande qui pourraient servir.
 
La différence de performance se chiffre avec un facteur 10 voire plus à la louche. C'est un code tres particulier pour vérifier le cout en terme de CPU des callback (sans, avec par template, avec par pointeur...).


---------------
Cordialement, Xterm-in'Hate...
n°933285
Lam's
Profil: bas.
Posté le 28-12-2004 à 22:13:11  profilanswer
 

OK, donc c'est le type de code où les options d'optims comptent beaucoup (frame pointers, inlining, etc.).
Si le code n'est pas trop gros, poste le, que je regarde sur mon PC avec les deux...

n°933288
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 22:16:07  profilanswer
 

http://www.cppfrance.com/code.aspx?ID=28416


---------------
Cordialement, Xterm-in'Hate...
n°933309
Lam's
Profil: bas.
Posté le 28-12-2004 à 22:53:14  profilanswer
 

Bon, je regarderai ça demain, parce que là, Visual Studio est TRES aggressif. Genre, je mets un breakpoint sur A::fa(), et il n'est pas appellé avant le test de callback dynamique non-const (donc toute la partie statique est presque complètement zappée).  
 
Donc pour mieux benchmarker, il va falloir introduire du code un peu plus représentatif...
Mais en attendant, sur la partie dynamique, j'obtiens du 3,3 secondes pour VC, contre 7,2 pour g++ (de O2 à O5, c'est à peu près stable).

n°933318
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 23:01:16  profilanswer
 

Peux tu m'envoyer une copie d'écran des resultats de l'execution ? J'aimerais consulter les ecarts relatifs des 4 solutions. Merci.


---------------
Cordialement, Xterm-in'Hate...
n°933322
Lam's
Profil: bas.
Posté le 28-12-2004 à 23:06:00  profilanswer
 

2 minutes, ça arrive :)

n°933332
Lam's
Profil: bas.
Posté le 28-12-2004 à 23:22:14  profilanswer
 

Et voilà:

$ g++ -o pop pop.cpp -Os ; ./pop
Temps d'execution sans callback            : 1312ms
Temps d'execution avec callback statique (non const) : 5767ms
Temps d'execution avec callback statique (const)   : 5749ms
Temps d'execution avec callback dynamique      : 7791ms
 
$ g++ -o pop pop.cpp -O1  ; ./pop
Temps d'execution sans callback            : 852ms
Temps d'execution avec callback statique (non const) : 5786ms
Temps d'execution avec callback statique (const)   : 6131ms
Temps d'execution avec callback dynamique      : 7359ms
 
$ g++ -o pop pop.cpp -O3  ; ./pop
Temps d'execution sans callback            : 841ms
Temps d'execution avec callback statique (non const) : 6458ms
Temps d'execution avec callback statique (const)   : 5688ms
Temps d'execution avec callback dynamique      : 7402ms
 
$ g++ -o pop pop.cpp -O5 ; ./pop
Temps d'execution sans callback            : 871ms
Temps d'execution avec callback statique (non const) : 6490ms
Temps d'execution avec callback statique (const)   : 5568ms
Temps d'execution avec callback dynamique      : 7380ms
 
$ g++ -o pop pop.cpp -O3  -fmove-all-movables -funroll-loops; ./pop
Temps d'execution sans callback            : 30ms
Temps d'execution avec callback statique (non const) : 5129ms
Temps d'execution avec callback statique (const)   : 5135ms
Temps d'execution avec callback dynamique      : 6850ms
 
 
$ g++ -o pop pop.cpp -O3  -fmove-all-movables -funroll-loops  -freduce-all-givs -ftracer -march=pentium4 -mcpu=pentium4; ./pop
Temps d'execution sans callback            : 70ms
Temps d'execution avec callback statique (non const) : 5278ms
Temps d'execution avec callback statique (const)   : 4986ms
Temps d'execution avec callback dynamique      : 6350ms
 

n°933336
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 23:26:37  profilanswer
 

Merci beaucoup. ;) Est-ce que comme moi tu trouves une nette amélioration avec VC7 (en particulier pour la partie callback statique) ?


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le 28-12-2004 à 23:26:37  profilanswer
 

n°933339
Lam's
Profil: bas.
Posté le 28-12-2004 à 23:30:11  profilanswer
 

Bah comme je t'ai dit, pour la partie statique, VC zappe complètement les calculs (il n'appelle pas du tout la fonction, puisqu'elle est inutile). Donc, j'obtiens des 0ms. Et pour la partie dynamique, c'est 2 fois plus rapide...

n°933345
xterminhat​e
Si vis pacem, para bellum.
Posté le 28-12-2004 à 23:36:43  profilanswer
 

Attivement, j'en conclus un défaut d'optimisation de GCC...  [:airforceone]
 
Il serait interessant d'obtenir les resultats de ce code avec un vraiGCC avec une distribution recente de linux.


Message édité par xterminhate le 28-12-2004 à 23:37:06

---------------
Cordialement, Xterm-in'Hate...
n°933346
Lam's
Profil: bas.
Posté le 28-12-2004 à 23:37:25  profilanswer
 

Allez, un dernier pour la route, avec -fprofile-arcs:
 


$ g++ -o pop pop.cpp -O3  -fmove-all-movables -funroll-loops  -freduce-all-givs
 -ftracer -march=pentium4 -mcpu=pentium4 -fgcse -fbranch-probabilities
$ ./pop
Temps d'execution sans callback            : 20ms
Temps d'execution avec callback statique (non const) : 4898ms
Temps d'execution avec callback statique (const)   : 4717ms
Temps d'execution avec callback dynamique      : 6448ms

n°933372
Taz
bisounours-codeur
Posté le 29-12-2004 à 01:05:17  profilanswer
 

je débarque, mais comment vous voulez faire un bench significatif avec des temps de l'ordre de la seconde voir de la ms ?

n°933396
xterminhat​e
Si vis pacem, para bellum.
Posté le 29-12-2004 à 06:18:38  profilanswer
 

Exact, cela dit, c'est l'aspect qualitatif qui m'importe et l'ecart relatif entre chaque solution et chaque compilateur est telement enorme... (avec VC7 c'est 0ms, avec GCC c'est des dizaines de secondes).


---------------
Cordialement, Xterm-in'Hate...
n°933398
Lam's
Profil: bas.
Posté le 29-12-2004 à 07:36:11  profilanswer
 

Taz a écrit :

je débarque, mais comment vous voulez faire un bench significatif avec des temps de l'ordre de la seconde voir de la ms ?


Qui t'a dit qu'il était significatif ? (d'ailleurs, il ne l'est pas, les écarts observés sont très grosses, de l'ordre de 20%, vu que ma machine était un peu chargée).  
 
Mais comme le dit xterminhate, les ordres de grandeur sont très significatifs entre gcc avec -O3, -O3+unroll et VC++.


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

  Compilateurs

 

Sujets relatifs
Fantastique les compilateurs d'aujourd'huiCompilateurs, librairies, projets... comment organiser ses dossiers?
Compilateurs...Livres sur la conception des compilateurs / cours / ouvrage en ligne
les Compilateurs, Editeurs, IDE pour le Java [listing inside]Commencez en c++ Réferences ? compilateurs ?
Compilateurs inside[C++] Anomalies compilateurs
COMPILATEURS C++ : le grand debat 
Plus de sujets relatifs à : Compilateurs


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