Journal Benchmarks de GCC 4.1

Posté par  (site web personnel) .
Étiquettes : aucune
0
27
juin
2006
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  . Évalué à 2.

    Dommage qu'il n'y ait pas de benchmark pour le C++ car je crois que GCC 4.x apporte pas mal d'amélioration pour le C++ (du moins en temps de compilation).
  • # ICC

    Posté par  (site web personnel) . Évalué à 1.

    Tant qu'on en est a parler d'ICC, y'a autre chose à voir à son sujet : les applications ne sont presque jamais testée avec. À cause de ça (et peut être aussi par ce que le compilateur lui même est moins utilisé/testé), un ami qui avait compilée sa Gentoo avec ICC avait une moyenne de trois ou quatre segfault par jour (xine notement aimait vraiment pas).

    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  (site web personnel) . Évalué à 10.

      On a pas idée aussi d'utiliser ICC pour compiler avec un CPU AMD !
      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  . Évalué à 4.

        c'est clair, j'ai de vagues souvenirs comme quoi certaines optimisations sont adaptées au coeur même du processeur pas seulement en jouant sur les jeux d'instruction, et que les dev de gcc ralaient parce qu'ils n'avaient pas assez de docs pour faire le même travail. Mais ceci dit, le code compilé devrait avoir exactement le même comportement sur tous les processeurs ayant les jeux d'instruction nécessaire.
        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  . Évalué à 2.

      Mais est-ce que des bugs sont rapportés à Intel au moins? Comme pour tout logiciel, s'il n'y a pas de bug report, ils ne vont pas le deviner. Et il ne suffit pas de dire "xine segfaulte de temps en temps" non plus hein. ;-)

      Pour Basilisk II par exemple, ils ont corrigé 2 bugs (une miscompilation et une internal compiler error).
      • [^] # Re: ICC

        Posté par  (site web personnel) . Évalué à 10.

        >> Mais est-ce que des bugs sont rapportés à Intel au moins?

        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  . Évalué à 8.

          Ca c'est typiquement le raisonement de celui qui n'utilise pas le dit soft proprio (moi non plus d'ailleur).

          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  (site web personnel) . Évalué à 4.

            Encore faut-il qu'il y ait

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

            Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

            • [^] # Re: ICC

              Posté par  . Évalué à 2.

              Effectivement, si on parle de microsoft, j'ai l'impression qu'ils ne corrigent que les failles de secu (et même pas toutes diront certains)
              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  . Évalué à 2.

                Et les service packs c'est pour les chiens ?
                • [^] # Re: ICC

                  Posté par  . Évalué à 2.

                  il ont sortie combien de service pas microsoft ces 5 dernieres années ?.... 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  . Évalué à 3.

                    Moi depuis 5 ans (c'est a dire 2001), je comptes :

                    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  . Évalué à 0.

                      Ce commentaire a été supprimé par l’équipe de modération.

                      • [^] # Re: ICC

                        Posté par  . Évalué à 2.

                        C'est pas mal je trouveon sent le suivit de qualite dans ta boite...

                        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  . Évalué à 1.

                          Ce commentaire a été supprimé par l’équipe de modération.

                          • [^] # Re: ICC

                            Posté par  . Évalué à 2.

                            je veux faire un upgrade la je dois encore une fois debourse ~100$ par pc (et paf encore 10 000$/euros) donc heureusement que vous faite des maintenance sur de longue periode sinon vous vous seriez vites fait virer des pc des entreprises et si il y un truc ou MS est vraiment super fort c'est le commercial.

                            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  . Évalué à 0.

                              Ce commentaire a été supprimé par l’équipe de modération.

                              • [^] # Re: ICC

                                Posté par  . Évalué à 2.

                                voyons voir comment ils font la ou je bosse... Ah oui un ghost, un backup du /home et reinstalle que ce soit pour les windows/linux etc. Vu le merdier qui traine dans toutes les bases de registres ils preferent faire ca c'est plus rapide et plus propre. Ah tant que j'y suis windows c'est le seul OS en version stable depuis des annees pour lesquel je vois une reinstallation programme tout les ans voir moins lorsque les gentils virus pointent leur nez.

                                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  . Évalué à 0.

                                  Ce commentaire a été supprimé par l’équipe de modération.

                                  • [^] # Re: ICC

                                    Posté par  . Évalué à 2.

                                    Depuis quand le 2.4 n'est pas maintenu? Parceque la je vois pas trop l'interet de ta demonstration. Le 2.4 existe toujours et il est toujours maintenu, d'ailleurs le 2.2 aussi.

                                    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  (site web personnel) . Évalué à 2.

                                      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.


                                      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  . Évalué à 2.

                                        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 ?


                                        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  . Évalué à -1.

                                          Ce commentaire a été supprimé par l’équipe de modération.

                                          • [^] # Re: ICC

                                            Posté par  . Évalué à 1.

                                            Plutot que sortir des conneries va prendre des cours d'informatique histoire d'arreter de passer pour un idiot et alors peut-etre tu arriveras a comprendre pourquoi un driver fait planter l'OS(sur Windows comme sur Linux).

                                            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  . Évalué à -1.

                                              Ce commentaire a été supprimé par l’équipe de modération.

                    • [^] # Re: ICC

                      Posté par  . Évalué à 2.

                      ouais, je comptais pour l'OS en cours (XP a ce jour....)
                      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  . Évalué à 1.

                        d'un autre coté, les ajouts de fonctionalité majeurs j'en ai connu 2 : celle de XPSP2 (firewall...)

                        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  . Évalué à 2.

            Oui, ICC est payant pour pouvoir l'utiliser commerciallement. Et pour le prix, je suppose fortement qu'ils répondent aux questions et corrigent les bugs, vu qu'avec une licence non-pro-pas-de-support-garanti ils le faisaient.
  • # Houla, forcément, si on fait un icc -Ox uniquement...

    Posté par  . Évalué à 10.

    Bon, peut-être qu'effectivement, icc est moins bon en -O2 contre gcc en -O2. Sauf que le -O3 existe aussi sur icc ! Faudrait p'tet essayer avec. Sans compter le fait qu'icc gère l'IPO (inter process optimization), qui permet de faire de l'inlining au moment du link (et plus au moment de la compilation des modules), ainsi que tout un tas d'autres trucs. Il y a aussi la pgo (profile guided optimization) qui permet, en "entraînant" icc, de compiler en fonction des jeux d'entrée d'un programme.
    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  (site web personnel) . Évalué à 10.

      Je rapelle, le SSA, c'est, d'après http://en.wikipedia.org/wiki/Static_single_assignment_form

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