Après la news sur la sortie de GCC 4.1 ( http://linuxfr.org/2006/03/01/20425.html ) j'attendais avec impatience de voir sortir des benchmarks comparatifs.
C'est fait et on peut télécharger l'article en pdf sur le site de Linux Magazine : http://www.linux-magazine.com/issue/68/GCC_4.1_Features_Benc(...)
L'article présente les nouveautés marquantes de cette version du compilateur libre et propose deux benchs graphiques. L'un concerne le run time (on voit si le programme compilé est plus rapide) et l'autre le build time (on voit si GCC compile plus vite).
A noter que le compilo d'Intel (ICC 9) est aussi présent dans le bench ce qui donne un excellent repère. Pour les trolleurs invétérés on soulignera le fait qu'Intel optimise spécifiquement pour ses CPU + ne supporte pas une tétrachié d'architecture comme GCC + ne supporte pas autant de langages.
Résumé des résultats pour les paresseux :
Pour le build time GCC 4.1 est largement plus lent que les versions antérieures si on active les optimisations (autovectorisation et autres)...ben oui on n'a rien sans rien ! Par contre si on optimise pas particulièrement (-O0) l'écart en temps est infime. La solution est donc simple : quand on écrit le programme et qu'on fait pleins de cycles compilation/modifs/compilation alors on utilise -O0 pour que ce soit rapide...et on n'a plus qu'a optimiser (-O3) à la fin.
Pour le run time GCC 4.1 est généralement plus rapide mais il faut bien choisir ses options d'optimisation. Assez souvent -O2 donne un meilleur résultat que -O3.
J'ai été également assez surpris de voir que (sur les programmes choisis pour le bench du moins) ICC 9 n'était pas du tout la terreur absolue que j'attendais.
Pour Gzip par exemple :
GCC 4.1 -O2 = 9.26 secondes
ICC 9 -O2 = 9.69 secondes
Pour rappel GCC 3.4 -O2 = 9.82 secondes
Pour Gnupg également :
GCC 4.1 -O2 = 11.68 secondes
ICC 9 -O2 = 13.86 secondes
Pour rappel GCC 3.4 -O2 = 12.02 secondes
Sur Lame Intel est plus fort...et GCC 3.4 aussi ! :
GCC 4.1 -O2 = 86.71 secondes
ICC 9 -O2 = 81.93 secondes
Pour rappel GCC 3.4 -O2 = 83.25 secondes
En définitive GCC s'améliore régulièrement et les devs semblent avoir fait le bon choix avec la technologie SSA.
# Benchmark pour le C++
Posté par Frédéric COIFFIER . Évalué à 2.
[^] # Re: Benchmark pour le C++
Posté par table_trollante . Évalué à 3.
# ICC
Posté par un_brice (site web personnel) . Évalué à 1.
Pour enfoncer le clou, j'avais fait des essais pifomètriques avec ICC sur un système un peu ancien (Athlon XP Palomino) et c'était un massacre. À croire qu'il ne compile correctement que pour les derniers processeurs.
Et en plus c'est pas libre.
[^] # Re: ICC
Posté par patrick_g (site web personnel) . Évalué à 10.
Même Intel avoue que son compilo est spécialement tuné pour ses procs et pas pour ceux de l'ennemi.
[^] # Re: ICC
Posté par Anonyme . Évalué à 4.
En tout cas, ICC produit du code optimisé mais orienté pour les puces intel, donc pour AMD, a priori, aucun intéret.
[^] # Re: ICC
Posté par Gwenole Beauchesne . Évalué à 2.
Pour Basilisk II par exemple, ils ont corrigé 2 bugs (une miscompilation et une internal compiler error).
[^] # Re: ICC
Posté par patrick_g (site web personnel) . Évalué à 10.
Hein ? Rapporter les bugs d'un soft propriétaire ? Et puis quoi encore ? Cela revient à bosser gratuitement au profit d'Intel pour qu'ils améliorent un soft propriétaire qui nie les libertés de l'utilisateur et qui est en concurrence avec le logiciel libre GCC. Plutôt crever !
[^] # Re: ICC
Posté par fabien . Évalué à 8.
mais d'un autre coté, le mec qui utilise (voir qui le paye, je ne sais pas si ICC est payant) ce soft, et qui se rends compte qu'il y a un bug, il faudrait qu'il soit un peu con pour continuer a l'utiliser avec le bug.
deux possibilités : soit il change de soft, soit il rapport le bug.
ensuite je ne rentrerai pas dans le troll du "qui nie les liberté", intel est libre de produire du proprio, et l'utilisateur est libre de choisir ou pas ce soft... a merde, j'ai marché dedans -->[]
[^] # Re: ICC
Posté par lolop (site web personnel) . Évalué à 4.
1) un moyen de faire remonter l'info.
2) l'impression que c'est pris en compte.
Il m'est arrivé de tomber sur un bug dans les MFC (Microsoft Foundation Class) il y a quelques années (vers 94). Et bien ça a été très dur de trouver où le reporter, et je n'ai eu aucun retour.
Bon, depuis je n'utilise plus les MFC (donc je ne sais pas s'il a été corrigé).
Peut-être que le support Microsoft s'est un peu arrangé depuis (faut espérer) et qu'ils sont un peu plus communiquants grace à l'Internet (on a au moins de la doc en ligne - mais dans l'autre sens...).
Sinon, quand à changer de soft... ben c'est pas toujours possible... donc tu fais avec, tu contournes...
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: ICC
Posté par fabien . Évalué à 2.
mais pour les bug, les corrections font partie de la prochaines version (comme ca tu dois payer ta mise a jour, tien...)
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
[^] # Re: ICC
Posté par fabien . Évalué à 2.
j'ai comme dans l'idée que la politique de microsoft a un peu changé pour rappel NT4 -> 6 SP (7 si on compte le 6a) pour 2000 -> 4
alors, oui ca dois être pour les chiens :)
en attendant ils ne corrigent QUE les secu, et je susi sure que leur SP en fait ce n'est QUE l'accumulation des patch de secu.
enfin, je dis ca... c'est comme ca que je le resent.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 3.
Win2000 SP3
Win2000 SP4
WinXP SP1
WinXP SP2
Win2003 SP1
Tiens, ca fait 5, et il y a de loin pas que des patchs de securite dedans, il y a plein de patchs de fonctionnalites, tout ca est decrit sur le web pourtant.
Quand a dire qu'ils font le minimum, c'est a croire que tu n'as jamais vu la difference entre un XP sans SP2 et un XP avec SP2.
Faudrait faire un minimum de recherche avant de dire des betises.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 0.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
Moi je te mets au _defi_ de trouver une seule boite faisant des OS qui teste son OS et ses patchs autant que nous, allez, une seule boite.
Quand aux service packs, c'est qu'une partie, tu fais quoi des patchs qu'on release constamment(et qui font donc un SP a la fin) ? Tu fais quoi du fait qu'on fait encore des patchs pour NT4, un OS sorti en 1996, alors qu'aucune distrib Linux n'approche meme d'une duree de support pareille ?
Sans parler du fait que la reduction du nombre de service packs vient aussi du fait que les OS une fois releases sont de plus en plus stables, donc necessitent moins de service packs.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
Et 10'000$ c'est quoi compare aux autre couts ? Ben oui, pas grand-chose. T'es un grand marrant d'oublier 80% des couts pour uniquement te concentrer sur ceux qui vont de ton cote.
Enfin tu dis encore des betises car si on regarde slackware c'est toujours maintenu depuis 1996 et ca considere TOUS les softs a l'interieur par uniquement le kernel (vu que IE est toujours pas corrige de failles vieilles deplusieurs annees on peut dificilement considere que c'est correctement maintenu) donc si on considere le kernel uniquement on passe a largement plus de 96 la duree de maintenance des linux.
Comme tu me fais bien rire, montre moi donc les patchs pour une distrib de 1996, et je veux pas des packages qui m'installent une version completement nouvelle du soft avec plein de features nouvelles qui risquent de foutre le bordel et casser la compatibilite avec l'ancien, je veux des patchs visant principalement la faille a corriger.
Tu devrais aller voir comment les societes gerent la maintenance de leurs OS, je crois que tu apprendrais bcp...
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 0.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
Si tu bosses avec des incompetents c'est triste.
Enfin dernier truc, depuis quand maintenu ca veut dire patch?
Tu fais comment pour mettre a jour ton windows NT4? Tu prends ton CD (ou le truc que tuas downloade) tu installes et tu reboot (pas trop le choix avec NT). Linux tu fais quoi? Tu prends ton CD, tu reboot, tu choisis l'option update et voila.
Ca veut dire patch depuis que les societes refusent de devoir changer 95% du code pour pouvoir continuer a bosser, elles veulent un patch qui corrige le probleme, et qui ne change pas tout l'OS. Pour les grosses societes, passer du kernel 2.4 au 2.6 pour corriger un probleme de securite(ou passer de NT4 a XP our W2k) n'est pas une solution acceptable.
J'espere que nous sommes bien d'accord que ce que nous considerons comme OS c'est bien kernel+style bash+systeme de fenetre?
C'est un peu plus que ca un OS quand meme pour moi, il y a tout le systeme de logging, le filesystem, les softs de base(explorateur, ...) mais ca depend des points de vue...
Le linux de 1996 il est suffisemment proche de celui de 2006 pour que les softs ecrit aujourd'hui fonctionne dessus ce qui n'est clairement pas le cas de windows 98 (et ne le sera pas pour Vista).
Pourtant c'est l'inverse qui est vrai, Win98 fait tourner bcp plus de softs d'aujourd'hui que le Linux de 1996.
T'es au courant de tous les changements qu'il y a eu depuis 1996 dans Linux ? Pour faire tourner un soft d'aujourd'hui sur un Linux de 1996, tu vas devoir te choper les dernieres libs de KDE(ou Gnome), qui elles ont des dependances sur la derniere version de X, qui en a sur Y, ... resultat tu ramenes 400 librairies sur le systeme, chose tout a fait insensee pour un administrateur.
Le kernel 2.2 est toujours maintenu (systeme de patch d'ailleurs :) ),
En 1996 c'etait 2.0.x, et il y a de loin pas que le kernel qui est necessaire.
Enfin bon tu pretends que NT4 est maintenu depuis 1996, il n'empeche que en 2000 MS m'a renvoye sur les roses alors que j'avais un joli kernel panic a l'installation d'un driver pour lecteur zip et MS et iomega se sont renvoye le bebe.
Ah et les gars du kernel ils font quoi quand tu leur rapporte un kernel panic avec ton driver NVidia dont ils ont pas les sources ?
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 0.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
C'etait un exemple, remplaces 2.4 par 2.0 et 2.6 par 2.2 si tu preferes.
Ouhais et? ext fonctionne toujours, les logs aussi, les softs de base tel que mozilla marche sans probleme sur un linux a base de 2.4 (IE est pas maintenu depuis des lustres et possede des enormes trous de secu donc ton exemple il est hyper mauvais)
Remplaces 2.4 par 2.0, 2.4 il date de 2000, faut pas exagerer quand meme.
Quand a IE, il y a des patchs constamment(malheureusement...), quand aux enormes trous de securite, tu me montres ces enormes trous qui ne sont pas patches depuis longtemps ?
1) il faut lire c'est pas Nvidia mais iomega
2) c'etait CERTIFIE MICROSOFT donc mon petit gars si vous certifie de la merde c'est pas mon probleme par contre que ca marche pas cela l'est et donc c'est le votre car jusqu'a preuve du contraire une personne qui achete quelque chose a une entreprise c'est un CLIENT !!!!
Super, certifie MS, et quand Redhat est certifie par Oracle, c'est Oracle qui corrige les bugs de Redhat ? Faut arreter de delirer mon petit, si le bug est dans le driver Iomega, faut aller gueuler chez Iomega, MS n'a rien a voir.
Linux a le _meme_ probleme, c'est le cas partout des qu'il y a plusieurs intervenants.
Sinon j'attends toujours de voir ces patchs pour une distrib de 1996, t'as un lien ?
Tout comme j'attends de voir des infos sur une boite qui en ferait autant que nous niveau maintenance des OS.
[^] # Re: ICC
Posté par inico (site web personnel) . Évalué à 2.
Attend je comprend pas trop là.
Quand les drivers Iomega pour NT4 qui sont passé entre les mains du labo Microsoft pour certification (definition: qui marche sans causé de BSOD ou autre probléme grave) ne fonctionne pas sur un NT4, microsoft n'a pas une part de responsabilité pour ce drivers ?
Non ? Alors ca sert à quoi cette certification ?
Le premier qui me repond à faire fonctionner sans interactions utilisateurs des spyware version drivers dans Vista se prend un coup de boule façon Zidane !
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 2.
Non ? Alors ca sert à quoi cette certification ?
MS fait passer un minimum de tests pour certifier le driver, ca veut evidemment pas dire qu'ils ont teste le driver sur toutes les configurations imaginables, car c'est tout bonnement impossible a faire.
Mais de toute facon ca n'a rien a voir, c'est Iomega qui a le code de ce driver, pas MS, qu'est ce que tu veux que MS fasse ? Ils sont incapables de corriger le probleme vu qu'ils n'ont pas le code d'un driver qu'ils n'ont pas ecrit.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à -1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 1.
A part ca, j'attends toujours les exemples de boites ayant un suivi qualite meilleur que le notre, ainsi que le lien pour les patchs pour une distrib de 1996, t'as oublie on dirait.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à -1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: ICC
Posté par fabien . Évalué à 2.
d'un autre coté, les ajouts de fonctionalité majeurs j'en ai connu 2 : celle de XPSP2 (firewall...) et une qui a fait pas mal parlé d'elle a son epoque : NT4SP4 (avec l'active desktop et la quicklaunch)
sincerement j'aimerai que tu me donnes les nouveautés transcendantes qui sont dans le 2000SP4 par exemple ?.....
[^] # Re: ICC
Posté par pasBill pasGates . Évalué à 1.
Faut savoir, d'abord tu te plains qu'il n'y a rien, maintenant tu dis qu'il y a des ajouts majeurs, faut te decider.
sincerement j'aimerai que tu me donnes les nouveautés transcendantes qui sont dans le 2000SP4 par exemple ?.....
Il n'y en a aucuns c'est tres simple (MSI 3.0 peut-etre je sais pas), et tu sais pourquoi ? Parce que les clients n'en _VEULENT PAS_ !
Ils veulent qu'un service pack serve a corriger les problemes, et pas a en introduire de nouveaux en ajoutant plein de features nouvelles, resultat on essaie au maximum d'empecher l'introduction de nouvelles features dans les service pack, et cela pour faire plaisir aux clients. Les features de ce type sont normalement a downloader separament pour cette raison precise. XP SP2 a ete une enorme exception en ce sens car on a decide qu'il valait mieux faire chier le monde une seule fois en ajoutant ces features de securite dans l'OS plutot que continuer a avoir les problemes existants et attendre que les gens passent a Vista.
Ces service packs n'ont donc pas normalement de nouvelles features, mais ils ont plein de corrections de bugs, et pas que des bugs de securite, pourtant tout ca est decrit sur le web, mais tu causes sans meme faire l'effort d'aller jeter un oeil et t'informer. On dirait hardware-fr vis-a-vis de Linux.
[^] # Re: ICC
Posté par imalip . Évalué à 2.
# Houla, forcément, si on fait un icc -Ox uniquement...
Posté par lasher . Évalué à 10.
Bref, utiliser icc 9 sans utiliser l'option -fast (qui active -O3, -ipo, et une autre option dont je ne me souviens plus le nom) c'est pas très malin. Et je ne parle même pas de l'aide à la compilation qu'offre pgo.
Je bosse avec gcc et icc, et franchement, sur plate-forme intel, gcc a déjà du mal à faire aussi bien qu'ICC dans la plupart des cas où je l'utilise. :-)
Pour finir, ce qu'il est important de retenir, c'est que
« [...] on soulignera le fait qu'Intel optimise spécifiquement pour ses CPU + ne supporte pas une tétrachié d'architecture comme GCC + ne supporte pas autant de langages.»
La grande force de gcc c'est ça : il est multi-plate-forme, et supporte bien mieux les standards que ses concurrents. Il y a une contrepartie : écrire un backend optimisé pour une plate-forme spécifique demande beaucoup de travail, et j'ai cru comprendre qu'une centaine de personnes bossaient à plein temps sur icc (versions ia32 et ia64).
Pour gcc, certaines optimisations directement dépendantes de l'architecture (altivec pour powerpc par exemple, ou les instructions sse pour ia32) nécessitent qu'on se penche spécialement sur elles. Il faut de la main d'oeuvre, et je regrette un peu de ne pas être capable (en tout cas pas encore) de participer. :-)
Dernière chose :
«En définitive GCC s'améliore régulièrement et les devs semblent avoir fait le bon choix avec la technologie SSA.»
Déjà une remarque préliminaire : SSA existe depuis un bon bout de temps (j'ai encore quelque part un article datant de 1991, qui explique comment faire du SSA efficace), et est implémentée dans certains compilateurs propriétaires (MSVC++, ICC) depuis un moment.
En fait, les priorités de GCC n'étaient sans doute pas les mêmes auparavant (en tout cas c'est la seule explication que je vois) : au début, ils voulaient un compilo ISO-compliant, qui compile dans les règles de l'art, pour C (gcc 2.95), puis C++ (gcc 3.x), et les autres langages *accessoirement* (au début, il s'agissait bien de GNU C Compiler, et pas GNU Compiler Collection).
Avec la version 4.x, on peut *enfin* s'attaquer à l'optimisation (y'en avait déjà, mais c'était franchement désuet par rapport à ce que faisaient les concurrents).
Mais SSA n'aide pas à l'optimisation, du moins pas directement ! Ca permet de mieux repérer où faire des transformations, certes, mais c'est surtout utile pour l'allocation de registres, la détection de code mort, la propagation de constantes... Bref, ce n'est pas une « optimisation » en soi, mais plutôt un "faiseur" d'optimisation, dans le sens où si d'autres optims sont possibles, alors le compilateur pourra mieux les appliquer. SSA est donc la base d'un bon compilateur optimisant, il ne manque plus que les bonnes optimisations qui iront avec. :-)
[^] # Re: Houla, forcément, si on fait un icc -Ox uniquement...
Posté par Ontologia (site web personnel) . Évalué à 10.
"In compiler design, static single assignment form (often abbreviated as SSA form or SSA) is an intermediate representation (IR) in which every variable is assigned exactly once. Existing variables in the original IR are split into versions, new variables typically indicated by the original name with a subscript, so that every definition gets its own version. In SSA form, use-def chains are explicit and each contains a single element."
En gros c'est une analyse de flot light. Cela permet de faire pas mal d'optimisation intéressantes, mais on n'atteint pas une analyse de code logique
Dans une analyse de flot "profonde", l'ensemble du graphe du code est analysé. L'ensemble étant tous le code concerné pour la création du binaire. Cela suppose bien sûr d'accéder à la totalité du source.
Le compilateur possédant une représentation du code, il va pouvoir faire pas mal d'optimisation classique et moins classique. Classique, les propagations de contantes, suppression de code morts, renomage de registre, etc... Moins classique les analyses logique de code, comme la dérurcivation d'une récuricive, ou comme par exemple détecter qu'une variable entière est définie comme paire et que 10 km plus loin, on test son imparité, là le moteur logique peut supprimer ce test inutile.
Une personne que je connais bien a écris ce genre de chose, qui est difficilement utilisable dans le monde industriel car c'est très couteux en mémoire.
Réaliser un tel compilateur pose un problème : la taille de la grammaire. Plus celle-ci est grosse, plus l'optimisation et la taille du compilateur est difficile et imposante. En effet, l'optimisation se concentre sur la sémantique du code. Un test if..then...else, un while, un for, une résolution dynamique de message entre deux objets héritant d'un autre reviennent tous à la même sémantique : le test. Certains d'entre eux sont un peu cachés.
Une grosse grammaire implique pour les concepteurs du compilateur d'écrire une traduction sémantique de chacune des primitives... ce qui est un énorme travail.
Une bonne sémantique pour une bonne analyse de flot doit comporter au maximum une dizaine de primitives (test, <, =, &,*,/, -,...).
Le moteur logique de l 'analyse de flot détecte ensuite des pattern (des sous graphes assez court) et applique des règles transformant le graphe du code quand ces pattern sont détectés en association avec d'autres, je pense à l'exemple de test de parité dont je parlais plus haut.
L'augmentation de la taille de la mémoire disponible sur les machines de monsieur tout le monde va peut être permettre à terme d'aller vers l'utilisation de ce genre de compilateur qui ont le gros défaut d'être exponentiels (mais on peut toujours finasser...). On pourrait aussi imaginer de descendre encore plus bas dans la sémantique, comme par exemple se restreindre aux portes {et,ou, non} ce qui permettrait des optimisations assez halucinantes mais qui implique aussi des modèles de processeurs totalement différents puisqu'ils seraient bit à bits.
Bref, d'intéressantes perpectives...
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.