Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

: LLVM 2.2 : Un concurrent pour GCC ?

Posté par patrick_g (page perso, ). Modéré le 18 février 2008.
Le compilateur LLVM (pour Low Level Virtual Machine) vient de sortir le 11 février dernier dans sa version 2.2 et s'affirme de plus en plus comme un concurrent possible pour le projet GNU GCC.

LLVM n'est pourtant pas tout à fait comparable au compilateur GCC. En effet GCC est un projet complet et monolithique car Richard Stallman a choisi explicitement de ne pas le rendre modulaire afin de ne pas permettre a des programmes propriétaires de s'interfacer avec lui.
LLVM au contraire est placé sous licence BSD et a choisi une conception très modulaire afin d'être réutilisé au maximum par tous. Il se limite à des fonctions d'optimisation et de génération de binaire ; il ne peut analyser lui-même le code source des programmes à compiler (c'est le projet Clang qui est prévu pour ça).

Il sera intéressant de voir ce qui va se passer sur le long terme dans l'écosystème du libre et si LLVM va être capable d'attirer des développeurs utilisant actuellement GCC.

> Lire la dépêche (173 commentaires, moyenne: 2,8).  

Vous avez demandé le commentaire #906198.

Performances ?

Posté par el_mickey () le 18/02/2008 à 21:00. (lien). Évalué à 2.

Ca à l'air tout joli comme architecture.
Mais au niveau des performances ça donne quoi ? Parce que bon c'est quand même un des buts premiers des compilateurs et GCC n'est pas forcément non plus le plus rapide du monde. Si c'est pour avoir voir un compilateur mieux architecturé mais encore plus lent...

  • [^]Re: Performances ?

    Posté par Boa Treize (page perso, ) le 18/02/2008 à 21:45. (lien). Évalué à 4.

    Euh, tu parles de la vitesse du compilateur ou de la vitesse du code produit ?

    [^]Re: Performances ?

    Posté par Matthieu C () le 18/02/2008 à 22:18. (lien). Évalué à 2.

    Au niveau du code générer je crois qu'il y a encore pas mal de boulot à faire pour avoir du code plus performant que gcc.

    • [^]Re: Performances ?

      Posté par Victor STINNER (page perso, ) le 19/02/2008 à 03:02. (lien). Évalué à 7.

      LLVM 2.0+gcc 4.2 est 20% plus rapide que gcc 4.2 seul :
      http://lucille.atso-net.jp/blog/?p=294

      L'architecture de LLVM permet des optimisations que gcc n'est âs capable de produire.

      Je serai intéressé par des benchmarks frais ;-)

      • [^]Re: Performances ?

        Posté par Anglade Pierre-Matthieu (page perso, ) le 19/02/2008 à 09:18. (lien). Évalué à 4.

        Je n'arrive pas à lire le lien mais je serais très étonné que le résultat résumé soit réaliste et significatif. Effectivement, sur architecture Intel (au hasard :-) em64t mes propres benchmarks et plusieurs autres que j'ai pu trouver sur le net montrent que gcc est environ 10% moins rapide que le compilateur intel (ifort/icc) qui fait tout de même figure de référence sur cette architecture. Alors 20% de mieux que gcc... Je suis un peu dubitatif.

        --
        PMA
        • [^]Re: Performances ?

          Posté par Victor STINNER (page perso, ) le 19/02/2008 à 11:25. (lien). Évalué à 6.

          Ah oui, l'url semble HS maintenant. Une copie avec Google Cache :

          gcc 4.0.1(apple) (latest gcc from Xcode Tools)
          $ gcc -o bmt -O3 -DSMALL himenoBMTxps.c
          $ ./bmt
          ...
          Gosa : 1.167853e-04
          MFLOPS measured : 544.017453 cpu : 56.726971
          Score based on Pentium III 600MHz : 6.634359

          gcc 4.2
          $ gcc-4.2 -o bmt -O3 -DSMALL himenoBMTxps.c
          $ ./bmt
          ...
          Gosa : 1.753087e-05
          MFLOPS measured : 953.891485 cpu : 54.242544
          Score based on Pentium III 600MHz : 11.632823

          Emit LLVM code with llvm-gcc-4-2.0, then exec it with LLVM JIT.
          $ ~/src/llvm-gcc4-2.0-x86-darwin8/bin/llvm-gcc -emit-llvm \
          -O3 -DSMALL -c himenoBMTxps.c
          $ ~/src/llvm-2.0/Release/bin/lli himenoBMTxps.o

          Gosa : 2.229028e-05
          MFLOPS measured : 1147.841139 cpu : 42.767418
          Score based on Pentium III 600MHz : 13.998063

          The result tells me that LLVM JIT does good job(20% faster than natively geneted code by gcc-4.2),
          altough we must pay attention that “Gosa”(which means computational error in Japanese) is a bit higher than gcc-4.2’s result.
          gcc-4.0.1 is fairly bad… I don’t know why…

          • [^]Re: Performances ?

            Posté par Matthieu C () le 19/02/2008 à 21:29. (lien). Évalué à 3.

            Ho mais tu triches, ton code générer par llvm n'est pas exécuter nativement comme pour gcc, mais dans une VM qui fait des optimisations JIT.

            Et je pari que comme par hasard, le code est friand d'optimisation JIT...

            • [^]Re: Performances ?

              Posté par Victor STINNER (page perso, ) le 20/02/2008 à 11:36. (lien). Évalué à 3.

              Hum, en quoi est-ce de la "triche" ? Le but est d'aller le plus vite possible, qu'importe les moyens. gcc n'a pas de JIT, il va moins vite. LLVM utilise du JIT, il va plus vite. Bah vive le JIT non ?

              • [^]Re: Performances ?

                Posté par reno () le 20/02/2008 à 14:58. (lien). Évalué à 2.

                Ouai enfin le benchmark, c'est quoi? Un seul test, plusieurs?

                Si c'était un truc connu genre SpecInt, ce serait peut-être plus crédible, la évaluer un compilateur sur un obscur benchmark, c'est peut-être un peu leger..

                [^]Re: Performances ?

                Posté par briaeros007 () le 20/02/2008 à 17:16. (lien). Évalué à 1.

                euh non, le but c'est de pouvoir optimiser de façon le plus générique possible, entre une optimisation qui permet de gagner 10% du temps sur un cas particulier, mais qui donne du code 20% moins rapide 99% du temps, et une qui donne du code 5% plus rapide 100% du temps,

                devine qui on va choisir.

                Bref, un benchmark ça veut RIEN dire, encore moins quand y a rien de précisé.

                --
                Subete ga wakatta toki…watashi ga anta wo korosu.

              [^]Re: Performances ?

              Posté par fmaz fmaz () le 20/02/2008 à 12:52. (lien). Évalué à 1.

              Que le programme soit choisi pour mettre en valeur les qualités de llvm, c'est de bonne guerre. En revanche, l'argument « ho et la, machine virtuelle, tricher... », je ne suis pas d'accord. Pour l'utilisateur, entre taper ./toto et ./titi, c'est du pareil au même. Ensuite, que toto soit une machine virtuelle qui interprete un programme bytecode ou un script python ou un binaire, c'est du pareil au même. Donc si avec des machines virtuelles, on peut toujours avoir de meilleur performances, pourquoi gcc ne s'y met pas ?

      [^]Re: Performances ?

      Posté par gpe () le 19/02/2008 à 16:03. (lien). Évalué à 2.

      Au niveau du code générer je crois qu'il y a encore pas mal de boulot à faire pour avoir du code plus performant que gcc.

      Ah bon? Ce n'est pourtant pas particulièrement difficile. Des compilos qui font du code plus efficace que gcc ça ne manque pas.
      Sur cible ARM, gcc se prend une grande claque par rapport à RVCT ...

      • [^]Re: Performances ?

        Posté par Philippe Fremy (page perso, ) le 19/02/2008 à 18:32. (lien). Évalué à 2.

        Après, il faut voir que gcc est multi-plateforme. Il y a surement des plateformes où le générateur final est à la traine et donc gcc se fait exploser sur les benchs.

        Ce qui est intéressant, c'est que sur une plate-forme a priori bien maintenue, intel, gcc n'est pas si à la traine que ça. Ca veut dire que globalement, il tient la route.

        • [^]Re: Performances ?

          Posté par gpe () le 19/02/2008 à 21:20. (lien). Évalué à 3.

          Je ne dis pas le contraire.
          Mais la plateforme ARM n'est pas ce que l'on peut appeler une plateforme marginale. Je n'ai pas de chiffre mais à vue de nez je dirais qu'il y a plus de code dans le monde qui tourne sur du ARM que sur du x86 ...

          • [^]Re: Performances ?

            Posté par windu.2b (Jabber id, page perso, ) le 20/02/2008 à 09:41. (lien). Évalué à 1.

            "Je n'ai pas de chiffre mais à vue de nez je dirais qu'il y a plus de code dans le monde qui tourne sur du ARM que sur du x86 ... "
            Cette phrase m'ayant surpris, je suis allé chez l'ami Wikipedia ([[Processeur ARM]]) et j'y ai vu ceci :
            "L'architecture ARM est très répandue notamment dans la téléphonie mobile. De nombreux systèmes sont portés sur cette architecture. À savoir Linux avec Android, Mac OS X avec l'iPhone, et Windows Mobile."

            Il y a donc plus de téléphones mobiles que d'ordinateurs dans le monde ?

            • [^]Re: Performances ?

              Posté par gpe () le 20/02/2008 à 13:44. (lien). Évalué à 1.

              Oh que oui! En France le taux de pénétration des téléphones mobiles doit tourner autour de 90%, les PC environ 60 ou 70% (?). En asie dans des pays comme la Chine et l'Inde les téléphones mobiles sont très répandu alors que les PC ...

              • [^]Re: Performances ?

                Posté par briaeros007 () le 20/02/2008 à 17:17. (lien). Évalué à 1.

                il n'y a pas que les pc grands publics qui sont à base de x86, hein.

                --
                Subete ga wakatta toki…watashi ga anta wo korosu.
                • [^]Re: Performances ?

                  Posté par gpe () le 20/02/2008 à 18:49. (lien). Évalué à 2.

                  Non bien sur mais il n'y a pas non plus que les téléphones mobiles qui sont à base de ARM...
                  Perso ça fait plus de 10 ans que je bosse dans l'embarqué et je n'ai jamais eu à bosser sur une plateforme x86.

                  PS: je n'ai pas dit qu'il n'y avait d'embarqué sur x86.

          [^]Re: Performances ?

          Posté par lasher () le 20/02/2008 à 01:48. (lien). Évalué à 2.

          Il ne faut pas oublier que l'archi x86 (32 ou 64 bits) comprend tout plein de mécanismes hardware qui font que du code pas très optimisé tourne au final pas si mal. Par exemple sur architecture Core, on a des prefetchers hardware au niveau des caches, un cache de micro-instructions (bon ok, tout petit, mais quand meme), une exécution dans le désordre des instructions ... Bref, le compilateur est beaucoup soulagé par une architecture qui fait beaucoup de choses sans qu'on lui demande.

        [^]Re: Performances ?

        Posté par Matthieu C () le 19/02/2008 à 21:17. (lien). Évalué à 3.

        Ah bon? Ce n'est pourtant pas particulièrement difficile.
        Ben propose tes patchs a gcc.

        Sur cible ARM, gcc se prend une grande claque par rapport à RVCT .
        Qui est le compilo de ARM et qui ne gère que ARM.

        De plus le passage gcc3.x à gcc 4.x à quand même améliorer les choses en taille et vitesse.

        PS : pour llvm, regarde le README arm pour juger l'état