Compilateurs

Compilateurs - C++ - Programmation

Marsh Posté le 28-12-2004 à 17:27:14    

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...
Reply

Marsh Posté le 28-12-2004 à 17:27:14   

Reply

Marsh Posté le 28-12-2004 à 21:09:04    

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...

Reply

Marsh Posté le 28-12-2004 à 21:56:50    

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...
Reply

Marsh Posté le 28-12-2004 à 22:13:11    

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...

Reply

Marsh Posté le 28-12-2004 à 22:16:07    

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


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 28-12-2004 à 22:53:14    

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).

Reply

Marsh Posté le 28-12-2004 à 23:01:16    

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...
Reply

Marsh Posté le 28-12-2004 à 23:06:00    

2 minutes, ça arrive :)

Reply

Marsh Posté le 28-12-2004 à 23:22:14    

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
 

Reply

Marsh Posté le 28-12-2004 à 23:26:37    

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...
Reply

Marsh Posté le 28-12-2004 à 23:26:37   

Reply

Marsh Posté le 28-12-2004 à 23:30:11    

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...

Reply

Marsh Posté le 28-12-2004 à 23:36:43    

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...
Reply

Marsh Posté le 28-12-2004 à 23:37:25    

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

Reply

Marsh Posté le 29-12-2004 à 01:05:17    

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

Reply

Marsh Posté le 29-12-2004 à 06:18:38    

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...
Reply

Marsh Posté le 29-12-2004 à 07:36:11    

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++.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed