Compilateurs - C++ - Programmation
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...
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...).
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...
Marsh Posté le 28-12-2004 à 22:16:07
ReplyMarsh 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).
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.
Marsh Posté le 28-12-2004 à 23:22:14
Et voilà:
$ g++ -o pop pop.cpp -Os ; ./pop |
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) ?
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...
Marsh Posté le 28-12-2004 à 23:36:43
Attivement, j'en conclus un défaut d'optimisation de GCC...
Il serait interessant d'obtenir les resultats de ce code avec un vraiGCC avec une distribution recente de linux.
Marsh Posté le 28-12-2004 à 23:37:25
Allez, un dernier pour la route, avec -fprofile-arcs:
|
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 ?
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).
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++.
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...