Les GPU promis à une mort prochaine ?

Posté par  (site web personnel) . Modéré par rootix.
Étiquettes : aucune
0
20
mai
2008
Matériel
L'année écoulée a vu poindre les prémices d'une guerre technologique et commerciale qui va prendre une importance grandissante dans les années à venir : la guerre entre les GPU et les CPU.
De simples afficheurs de triangles texturés en 1995, les cartes graphiques munies de GPU sont devenues des sortes d'énormes DSP bientôt composées d'un milliard de transistors, délivrant des performances approchant bientôt le téraFLOPS. La répartition des tâches semblait jusqu'ici bien déterminée entre le CPU, dévolu aux tâches de gestion et de décision, et le GPU se chargeant du calcul brut, en particulier graphique. Mais les quelques acteurs du marché ont récemment amorcé des mouvements les préparant à dépasser leurs frontières traditionnelles.

Le contexte technologique pesant sur le marché des CPU l'implique quelque peu : les concepteurs de CPU, Intel et AMD ne peuvent plus faire face aux problèmes thermiques qui frappent les CPU, atteignant une taille de gravure trop fine, laissant apparaître trop de fuites de courant. De ce fait, la fréquence n'augmentant plus, le nombre critique de transistors est atteint pour exécuter plus vite les instructions, la complexité grandissante des architectures permettant de faire des incantations vaudous sur le code pour l'exécuter dans le désordre et prévoir l'arrivage de données encore coincées en mémoire, les optimisations d'efficacité deviennent difficilement envisageables.

Les fondeurs en sont maintenant réduits à multiplier les cœurs sur leur processeurs : au début deux, maintenant quatre, et l'on doit imaginer seize, trente-deux cœurs pour les années à venir... Bien qu'il semble y avoir une limite théorique de finesse de gravure à 22 nm... Sans compter tous les problèmes d'interconnexions.

Ensuite, l'achat par AMD du fabriquant de GPU ATI, qui - bien que posant quelques problèmes de trésorerie - laisse imaginer des synergies entre processeurs et GPU, à cause du contexte technologique évoqué plus haut : rien n'empêche de mettre un GPU à la place d'un cœur.

L'offensive de NVidia sur les GP-GPU (General Purpose Graphical Processor Unit), proposant ni plus ni moins que d'utiliser leur processeur (près de 15 fois plus puissant en calcul brut) pour des centres de calculs et autres super-ordinateurs, avec leur technologie CUDA, a jeté un pavé dans la mare : c'est le marché du calcul haute performance, citadelle des CPU, qui est attaqué. Fourni avec une sorte de C adapté (le shading language), NVidia met tout en oeuvre pour séduire les développeurs et leur fournir tout un environnement d'exécution ad hoc.

Intel n'est pas en reste en annonçant pour 2009 la disponibilité de Larrabee proposant AVX. Il s'agit d'un SSE dopé aux stéroïdes, doté d'un registre vectoriel haute performance travaillant sur 256 bits, avec plein d'instructions très complexes permettant même d'envisager de faire le café, la sangria ou du chiffrement AES. Les 256 bits permettent de réaliser plusieurs calculs flottants sur 64 ou 32 bits en même temps, sans devoir paralléliser le code à outrance. D'après Intel, AVX permettrait de réaliser tous les calculs graphiques sur le CPU.

Les GPU "externes" impliquent de devoir gérer le transfert d'un monceau de données dans la mémoire de la carte, avec les problèmes de lenteur afférents. De plus, et beaucoup plus que les technologies Intel, un GPU est un assemblage de petits cœurs de calculs posés les uns à côté des autres, il faut donc produire un code extrêmement parallélisé, capable d'utiliser TOUS les "threads", sans quoi, on n'atteint que quelques pour cents de l'utilisation de la puissance disponible. Un avantage, tout de même : la bande passante (mémoire GPU) interne à la carte est près de 10 fois supérieure à la bande passante (mémoire CPU).

Ces deux technologies vont maintenant se lancer dans une guerre de mouvement afin de convaincre ceux qui feront la différence : les développeurs.

NVidia va tenter de convaincre ceux-ci de laisser le processeur s'occuper de tâches générales de gestion, ATI/AMD va sans doute proposer une voie médiane permettant de supprimer le besoin d'externaliser le GPU sur une carte en lui laissant une place sur le die du CPU, et Intel va proposer la même voie qu'AMD, mais avec une technologie à la logique totalement différente.

Dans les deux premiers cas, il faudra paralléliser massivement le code, avec le confort d'un langage C adapté (pour NVidia du moins). La logique Intel obligera-t-elle le programmeur à produire du code en assembleur, ou au moins en C avec des intrinsics ?

L'implémentation de ces technologies dans DirectX ainsi que dans OpenGL sera déterminante, car le marché du jeu restera la justification économique majeure de la bataille.

Les limites des processeurs actuels

Depuis l'avènement des microprocesseurs, l'amélioration de la finesse de gravure et de la fréquence de fonctionnement a permis d'augmenter exponentiellement les performances.
De par la fréquence bien évidemment, mais aussi grâce aux considérables IPC (Instruction Per Cycle) qu'ont connu les processeurs.
Pour mémoire, un mov de registre à registre sur un 8086 prenait au mieux 2 cycles, ce qui est énorme pour une opération de base. L'addition prenait au mieux 3 cycles, et un jump plus de 10 cycles.

Le nombre de cycles par instruction est maintenant très bas, pour descendre en-dessous du cycle, hormis la division : on en a un aperçu dans ce dossier pour le core duo.

La montée en fréquence étant bloquée, tout comme l'IPC qui ne peut guère progresser, on en tire la conclusion qu'on est obligé de faire du multicœur...

Les limites de la finesse de gravure à prévoir

La gravure devient trop difficile, avec des rayons de gravure presque 10 fois plus gros que la finesse de gravure à atteindre, il est envisagé de passer à l'Ultra Violet Extrême, plus fin, mais beaucoup plus (trop) énergétique. La limite théorique semble être de 5 nm. Pour information, le diamètre d'un atome de carbone est d'environ 0,1 nm.

Les shading-languages

Le shading language, est une sorte de C trafiqué dans lequel ont été ajoutés des types primitifs vectoriels.

Pour éviter de longs discours, je vous invite à musarder ce bout de code, calculant une classique fractale, qui vous donnera une idée des problèmes qui se posent.

Lorsqu'on utilise ce langage, il faut quasiment oublier la programmation par boucle et utiliser la mémoire partagée afin de bien répartir le calcul qui doit en toutes circonstances utiliser les milliers de threads disponibles sur le GPU. On doit donc concevoir et fragmenter son code avec une granularité minuscule : la majorité des transistors étant dévolus aux calculs, le processeur n'est pas capable de répartir les calculs entre threads.

Aller plus loin

  • # CPU, GPU, autres et langue

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

    Hum, quid des FPGA qui vont se reconfigurer pour offrir la puissance de calcul (et ses outils) adaptés en fonction de la demande de logiciel ?
    Bon, c'est pas trivial, mais ça se fait.

    Et moi qui croyais que les CPUs étaient amenés à mourir vu qu'on déléguait tout sur le GPU, me voilà corrigé.


    Sinon, chose qui me titille. L'auteur de cette dépèche a-t-il vécu au Québec ? C'est marrant d'essayer de deviner, car je trouve le français sur DLFP très uniforme et même plutôt "parisien". Mais dans cette dépèche, j'ai tiqué sur un mot...
    • [^] # Re: CPU, GPU, autres et langue

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

      Euh non, pas vraiment, j'ai bien eu des amis Quebecois via internet, peut être par capilarité ? Ou peut être est-ce la littérature XVI-XVIIIème que j'ai ingurgité à haute dose fut une époque ?

      Quel mot ?

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: CPU, GPU, autres et langue

        Posté par  . Évalué à 1.

        je dirais "intrinsics", car je ne l'ai pas littéralement compris, juste extrapolé :)
        • [^] # Re: CPU, GPU, autres et langue

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

          Moi je dirais musarder, que je ne connaissais pas dans le sens de fouiner, semble-t-il, ni même transitif, mais plutôt comme le dit le TLFi dans le sens de : « perdre son temps au lieu de travailler », intransitif.

          M'enfin, vive les jargons et le droit à jaspiner l'argomuche dans son idiolecte propre !
          • [^] # Re: CPU, GPU, autres et langue

            Posté par  . Évalué à 2.

            M'enfin, vive les jargons et le droit à jaspiner l'argomuche dans son idiolecte propre !
            Je préfère 10³ fois cela au franglais!

            J'ai encore vu récemment un gugus écrire "shutdowner" à quelques octects de là! Faut y aller, pour sortir une telle mixture.
    • [^] # Re: CPU, GPU, autres et langue

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

      Hum, quid des FPGA qui vont se reconfigurer pour offrir la puissance de calcul (et ses outils) adaptés en fonction de la demande de logiciel ?
      Bon, c'est pas trivial, mais ça se fait.


      Les FPGA ont de gammes de fréquences autour de 100 Mhz et des prix autour de 1000€ (pour les plus gros vraiment capable de quelques choses) et il chauffe beaucoup.

      Ce n'est simplement pas compétitif.

      "La première sécurité est la liberté"

  • # Limites de la finesse de gravure

    Posté par  . Évalué à 10.

    Méfiance avec les limites annoncées.
    De mémoire, j'ai toujours entendu une limite annoncée, qui a finalement été franchie. Le problème de la limite existe... à conditions de se restreindre beaucoup dans l'approche de la solution!

    Jusqu'à maintenant, on a joué sur les matériaux, les contraintes dans les matériaux, la nature du wafer (au lieu d'une galette de silicium, on utilise du Silicon-On-Insulator, une sorte de petite galette collée sur une grande, avec un bon isolant électrique entre les deux, ce qui améliore considérablement les choses en ce qui concerne les fuites de courant...), bientôt on modifiera un peu l'architecture des transistors, et finalement, les transistors MOS tels qu'on les connait cèderont la place à une nouvelle génération de composants, plus petits, moins consommateurs d'énergie, et plus rapides!

    La course à la fréquence est en panne parce que nous approchons de la période charnière, mais de nombreuses pistes sont explorées pour identifier le meilleur successeur. Le problème est qu'on a près de 50 ans d'expérience avec le MOS, la migration va être douloureuse!
    • [^] # Re: Limites de la finesse de gravure

      Posté par  . Évalué à 4.

      Pour aller dans le même sens, on a récemment mis au point un procédé de refroidissement passif par flux ionique. Ce flux entraîne à son tour l'air ambiant et permet ainsi une ventilation. Aucune pièce mobile. C'est encore expérimental, mais on imagine bien que des composants construits avec ce principe chaufferait beaucoup moins. Ce qui laisse imaginer une montée en fréquence pour un niveau d'effet joule équivalent au niveau actuel ...

      Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas qu'elles sont difficiles. - Sénéque

      • [^] # Re: Limites de la finesse de gravure

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

        Ok, on a toujours fais mieux jusqu'ici, mais ne pas oublier un point important : à 45nm, le trait de gravure occupe une largeur équivalente à 450 atomes de carbones, ce qui fait peu. Le transistor ne doit pas être bien large...

        Je pense aussi qu'il vont y arriver, mais moins vite, et moins facilement.

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

        • [^] # Re: Limites de la finesse de gravure

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

          Il ne faut pas oublier que la finesse de ce trait est la largeur de la grille, sur un transistor beaucoup plus gros genre 1 µm de haut. Vu de haut, un transistor ressemble à table de ping pong, la grandeur donnée est celle de l'épaisseur du filet.

          Il y a donc une marge énorme sur la manière de dessiner les transistors.

          "La première sécurité est la liberté"

    • [^] # Re: Limites de la finesse de gravure

      Posté par  . Évalué à 3.

      Je suis d'accord avec les propos de Mathieu.

      et pour cause, des travaux de recherche sont menés afin de réaliser des nano-transistors à la chaine (On sait les faires en petite contité mais il ya des problème lors du passage à l'echelle. on ne controle pas totalement le processus).

      Voilà un liens qui en dit plus: Les nanotransistors, être ou ne pas être en CMOS sur silicium ? (http://www.cea.fr/var/plain/storage/original/application/223(...)

      mais sa avance, y'a qu'à voir les progrès faits ces derniers temps :IBM fait un nouveau pas vers la production de nanotransistors (http://www.vnunet.fr/fr/news/2008/03/11/ibm_fait_un_nouveau_(...)
  • # Et si rien ne disparaissait ?

    Posté par  . Évalué à 3.

    Finalement la question n'est pas de savoir si les CPU ou les GPU s'écraseront les uns les autres, car, même si aujourd'hui cela reste majoritairement apprécié au travers du jeu vidéo, ces deux types d'unités de calculs répondent à des problématiques différentes (versatilité, parallèlisation massive, respect de l'instruction set, etc.), et répondront aux nouvelles qui vont apparaitre. Par exemple AMD qui en voulant réunir les deux dans un même coeur va peut être répondre à la problématique du rapport coût/performance et/ou performance/consommation de manière beaucoup plus décente qu'Intel et son Larabee qui cherche à créer un processeur ayant pour but d'aller chasser sur le terrain de son voisin.

    Je ne pense pas que l'on verra, significativement, les uns voler le marché du calcul au profit des autres, je serais même tenter de penser que c'est le début d'un nouvel élargissement des choix qui seront offerts aux développeurs et utilisateurs, donc cela restera au moins autant fourni qu'aujourd'hui.
    • [^] # Re: Et si rien ne disparaissait ?

      Posté par  . Évalué à 8.

      oui on dirait bien. Par contre je m'interroge si cette petite guerre entre GPU et CPU ne va pas conduire à plus d'incompatibilité entre les 2 mondes, et on risque bientôt d'avoir des programmes "compatibles uniquement avec un GPU nividia", ou écrit en assembleur (?) pour puce intel ? Cela fait un peu peur quand même.

      Sinon bravo pour ce bel article Ontologia, écrit clairement mais de façon précise !

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

      • [^] # Re: Et si rien ne disparaissait ?

        Posté par  . Évalué à 3.

        Des API répondront au problème.

        Il y a une dizaine d'années les jeux vidéos proposaient (souvent via des patches) un binaire pour chaque modèle de puce accélératrice 3D (jusqu'au jour ou Microsoft a proposé Direct3D pour rendre tous les jeux compatibles avec toutes les cartes 3D).

        BeOS le faisait il y a 20 ans !

        • [^] # Re: Et si rien ne disparaissait ?

          Posté par  . Évalué à 10.

          Il me semble qu'OpenGL faisait ça bien avant Direct3D... mais bon, ce n'était pas juste pour les jeux, mais bien pour de nombreuses applications CAD, et graphiques... Direct3D est venu plus tard, pour contrer le risque de portabilité induit par OpenGL...
          • [^] # Re: Et si rien ne disparaissait ?

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

            Direct3D est venu plus tard, pour contrer le risque de portabilité induit par OpenGL...

            Hum... On refait l'histoire... Et toujours pour dénigrer MS quand on peut, même quand ce n'est pas vrai.
            Direct3D a... Comblé un trou. Il n'a pas concurrencé OpenGL, du moins dans ses premières versions

            En effet, OpenGL était hors-course par rapport au besoin, du fait que OpenGL imposait que tout soit fait en hard, et que les GPU (pour jouer, pas cher!) de l'époque n'était pas capables d'être compatible avec tout OpenGL.
            Donc bien que OpenGL proposait ça avant Direct3D, OpenGL ne pouvait être un prétendant pour répondre au besoin faute de modularité.

            Direct3D a eu le succès qu'il a eu pas par le monopole de MS, mais parce qu'il y avait un manque : une API de programmation de GPU pour GPU pas cher!
            Ensuite, pas de portage sur un autre OS juste parce que ce n'est pas son business.

            Si OpenGL (ou un autre) avait proposé une API permettant de faire des choses en soft quand le GPU n'était pas capable de le faire, l'histoire aurait peut-être changé... Mais je me répète, MS a juste profité d'un manque de ses concurrents, il n'a pas essayé de contrer OpenGL puisqu'il était hors course pour ce sujet de lui-même. Tout ce qu'on peut dire c'est que quand les GPU ont été suffisants puissants pour être compatible OpenGL, MS a profité de sa position gagnée précédemment pour continuer sur sa lancé plutôt que de se dire "OK, Maintenant les bases obligatoires de Direct3D sont celles d'OpenGL, on passe sur OpenGL".

            Il faut juste se dire que si un organisme de normalisation multi-OS avait fait une API qui réponde au besoin des constructeurs de GPU de l'époque, on n'en serait peut-être pas la... Ben oui, il ne faut pas en vouloir à MS qui ne fait que profiter des failles, mais aux autres qui n'ont pas su proposer un truc au bon moment...
            • [^] # Re: Et si rien ne disparaissait ?

              Posté par  . Évalué à 9.

              >OpenGL imposait que tout soit fait en hard,

              *N'importe quoi*: Mesa une implémentation purement logicielle d'OpenGL existe depuis 1993, Microsoft a acheté l'entreprise qui a fait Direct3D en 1995.
              OpenGL est une API pour faire des rendus 2D/3D, c'est l'API et le résultat qui sont spécifiés mais ou est fait le rendu, ça ne l'est pas!

              Ton API multi-OS c'est OpenGL, je suis d'accord avec ragoutoutou que Direct3D est un moyen pour Microsoft de lier les jeux avec leur propre API pour diminuer la concurrence (Apple avait fait la même chose, sans succès): il a fallut attendre DirectX 9 pour que J Carmack considère que l'API de Direct3D soit aussi bonne que celle d'OpenGL..
              • [^] # Re: Et si rien ne disparaissait ?

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

                Mesa une implémentation purement logicielle d'OpenGL existe depuis 1993

                Peut-être. Et?
                Ce qui manquait était une implémentation moitié soft, moitié hard (fait par le GPU ponc!).
                J'ai toujours vu des drivers OpenGL pour des cartes qui pouvaient tout faire.
                Je n'ai jamais vu de drivers OpenGL pour des cartes qui ne pouvaient pas tout faire.

                Et dans tous les cas, il faut se demander pourquoi les programmeurs ont choisi Direct3D à la place d'OpenGL pour programmer : On pouvait très bien programmer en DirectX pour tout sauf la 3D et programmer la 3D en OpenGL, si Direct3D s'est imposé, c'est peut-être parce qu'il avait un avantage non? Le poids de MS? Si OpenGL était présent, poids ou pas, le programmeur avait le choix... Donc il devait manquer quelque chose à OpenGL...
                • [^] # Re: Et si rien ne disparaissait ?

                  Posté par  . Évalué à 5.

                  Pour ajouter ma pierre à cette digression, il existe bien des drivers OpenGL pour des cartes qui ne peuvent pas tout faire. Enfin presque, il s'agit des drivers "miniGL" qui implémentaient juste le minimum pour faire tourner Quake ;)

                  BeOS le faisait il y a 20 ans !

                • [^] # Re: Et si rien ne disparaissait ?

                  Posté par  . Évalué à 5.

                  >si Direct3D s'est imposé, c'est peut-être parce qu'il avait un avantage non? Le poids de MS?

                  Les fabriquants de cartes graphiques ont tout intérêt à avoir des *très bonnes* relations avec MS, ce qui lui a permis de pousser les driver Direct3D.

                  Pour ce qui est des programmeur de jeux:
                  - MS a investi dans certains jeux, réaliser bien entendu avec Direct3D
                  - pour les autres, je pense que c'est la certification des driver Direct3D par Microsoft qui a penché beaucoup dans la balance.

                  Bref, ce qu'il manquait à OpenGL, c'est l'appui de Microsoft et c'est tout.. Pas la peine de chercher des points techniques fantômes pour lequel Direct3D l'aurait emporté..
                  Et la raison pour laquelle MS a poussé Direct3D et pas OpenGL, c'est tout simplement pour verrouiller les jeux, c'est tout simple.
    • [^] # Re: Et si rien ne disparaissait ?

      Posté par  . Évalué à 2.

      pour l'instant, tout ce que la programmabilité croissante des GPU a apporté, c'est une autre ressource à utiliser en meme temps que le CPU, ou à coté, pour des problèmes qui s'y pretent bien (et ils sont loin de tous bien s'y preter). Quand j'ai un probleme à regler, j'ai 2 approches possibles, je me dis pas que je vais utiliser que le CPU ou que le GPU, mais je vais essayer d'utiliser les 2 au mieux, en essayant de prendre en compte les problemes de localisation des données tout ca.

      et vivement que les cartes physiques programmables arrivent, ca fera un troisieme type d'unité de calcul efficace pour une autre classe de problemes, ca sera bien en conjonction avec ce qu'on a deja !
      • [^] # Re: Et si rien ne disparaissait ?

        Posté par  . Évalué à 4.

        Je ne connais pas du tout le fonctionnement des cartes physiques. En quoi diffèrent-elles d'une carte graphique ?
        Il me semblerait logique que les deux se prêtent au parallélisme massif ... J'ai même cru entendre qu'elles arrivaient trop tard (les cartes physiques) et qu'avec les cartes graphiques programmables, leur valeur ajoutée était ridicule.
        • [^] # Re: Et si rien ne disparaissait ?

          Posté par  . Évalué à 4.

          les cartes physiques n'arriveront jamais, NVIDIA a racheté la seule boîte en fabriquant et ce, plus pour la partie logicielle qui sera intégré dans les GPU. Pareil pour Intel et son rachat d'Havok.
  • # Le CPU, limité dans son évolution

    Posté par  . Évalué à 4.

    Je suppose que déjà le système de parallélisation automatique du x86 doit prendre une certaine place sur la puce...
    Si on l'enlevait et qu'on passait à du VLIW on devrait gagner une place non négligeable. Mais bon, Intel a essayé (Itanium), et le marché n'a pas suivi.

    Le problème finalement, c'est surtout le support logiciel. Les cartes graphiques sont essentiellement utilisées par les pilotes pour les jeux fournis par leurs constructeurs, donc ce n'est pas vraiment problématique si leur assembleur est tellement complexe que seul le constructeur sait l'exploiter. Ce qui compte, c'est la performance.
    Surtout qu'il n'y a pas de problème de compatibilité, puisque ça passe par une couche d'abstraction (OpenGL, DirectX...)

    Les CPUs font face à un tout autre problème. Il y a à la fois le problème de compatibilité et celui de la simplicité. Les divers OS, compilateurs, etc. doivent être à même d'exploiter le matériel sans dépenser des milliers en recherche dessus, et les utilisateurs veulent que le travail qu'ils ont effectués jusqu'à présent fonctionne.
    Pour toutes ces raisons, malheureusement, on ne peut pas se débarasser de x86 si facilement pour le remplacer par un jeu d'instruction mieux fait et qui permettrait de gagner des performances non négligeables. C'est triste quand on voit que les GPU peuvent tout se permettre puisqu'ils n'ont pas à conserver la moindre usabilité ou compatibilité avec quiconque, ce qui leur permet d'évoluer et de s'améliorer beaucoup plus.

    Idéalement, on pourrait se dire qu'un GPU devrait fusionner avec le CPU pour devenir son unité de calcul vectoriel. Sauf que pour les raisons citées ci-dessus, le GPU a bien plus de potentiel, donc ce n'est pas réellement envisageable.
    Le seul moyen pour que ce le soit, ce serait que le constructeur maintienne une implémentation libre d'une abstraction. Un peu comme ce que fait nvidia avec CUDA, qui permet justement d'utiliser un GPU comme un CPU limité.

    (Désolé si je me répète un peu, il est tard)
    • [^] # Re: Le CPU, limité dans son évolution

      Posté par  . Évalué à 2.

      >Je suppose que déjà le système de parallélisation automatique du x86 doit prendre une certaine place sur la puce...

      Bof, pas tant que ça maintenant (en pourcentage), c'est pour ça que les x86 ont finis par rattrapper les RISCs..
      Je pense que les scientifiques vont être très, très satisfait d'avoir l'AVX, les calculs scientifiques se faisant sur 64bit de précision en général.

      >Si on l'enlevait et qu'on passait à du VLIW on devrait gagner une place non négligeable

      Pour les VLIW, il reste le probleme du compilateur, a part pour du code tres regulier un VLIW n'est pas exploité au mieux donc ce n'est pas du tout évident que le VLIW soit la bonne voie: le POWER est tout à fait compétitif par rapport a l'Itanium.
      • [^] # Re: Le CPU, limité dans son évolution

        Posté par  . Évalué à 2.

        Bof, pas tant que ça maintenant (en pourcentage), c'est pour ça que les x86 ont finis par rattrapper les RISCs..
        En réalité (en ce qui concerne AMD en tout cas) les processeurs X86 SONT des RISC, avec une couche de ré écriture du code au mileu.
        • [^] # Re: Le CPU, limité dans son évolution

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

          RISC/CISC définisse le jeu d'instruction.

          Au début, le RISC correspondait à une architecture load/store (load/store clairement séparer des opérations ALU, avec donc moins de mode d'adressage et un pipeline plus court). En général, le RISC a une taille d'instruction fixe (32 bits en général) pour simplifier le décodage et le pipeline.

          Donc le x86 est du vrai CISC bien complexe et ne sera jamais du RISC quelques soit la micro architecture en dessous.

          D'ailleurs, ARM avec son thumb2 est entrain de devenir de plus en plus CISC avec des instructions de tailles 16 ou 32 bits.

          "La première sécurité est la liberté"

          • [^] # Re: Le CPU, limité dans son évolution

            Posté par  . Évalué à 3.

            on est tous d'accord que le x86 c'est un jeu d'instruction CISC.
            Mais les processeurs AMD x86 reposent sur un coeur RISC. C'est tout ce que je voulais dire.
            • [^] # Re: Le CPU, limité dans son évolution

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

              Sauf que dire "coeur risc" n'a strictement aucun sens.

              Je sais que les x86 transforme les instructions en µinstructions voire en suite de µinstructions mais on est plus proche du vliw que du risc. Pour le pentium 4, on parlait de 118 bits ce qui réduisait de beaucoup le cache L1 instructions.

              "La première sécurité est la liberté"

              • [^] # Re: Le CPU, limité dans son évolution

                Posté par  . Évalué à 1.

                Pour le pentium 4, on parlait de 118 bits ce qui réduisait de beaucoup le cache L1 instructions.

                Ah ben oui mais vu qu'on a besoin de moins d'instructions pour effectuer une tache ca compense :) (En réalité je n'en sais rien et je pense que non, il y'a probablement des papiers tres pointus sur ce sujet quelque part sur l'ieee).
    • [^] # Re: Le CPU, limité dans son évolution

      Posté par  . Évalué à 2.

      Mais bon, Intel a essayé (Itanium), et le marché n'a pas suivi.

      Ce ne serait pas plutôt un problème de compilateurs, au niveau de l'ILP que ces derniers arrivent à extraire, ou pire, de l'ILP intrinsèquement présent dans la plupart des programmes (HPC exclu...) ?
    • [^] # Re: Le CPU, limité dans son évolution

      Posté par  . Évalué à 5.

      Je pense de mon côté que la révolution (si révolution il y a) viendra des langages interprétés et JITés. Je ne serais pas étonné qu'on nous refasse le coup du Out-of-order_execution avec le bytecode dans le rôle de l'assembleur et l'assembleur dans le rôle du microcode.

      Je m'explique : le OoO revient à transformer l'assembleur du binaire en un code plus finement découpé : le microcode. Ce microcode est stocké dans un "pool" dans le processeur et chaque instruction est exécutée dans le désordre (out of order) dès que ses dépendances sont satisfaites.
      Une partie du processeur est donc destinée à la gestion de ce mécanisme : traduction, gestion des dépendances, etc ...

      Dans le cas du bytecode, on ajoute une étape de transformation. Le bytecode est soit interprété, soit transformé en code assembleur pendant l'exécution (JIT). Il me semble que cette étape ressemble fortement à ce qui se fait pour le OoO, mais à une échelle plus large.
      On pourrait donc imaginer une architecture où un coeur est destiné à la gestion de ce bytecode (exécution de la VM) et où les autres coeurs exécutent le résultat. Cette solution permettrait de tirer partie de coeurs hétérogènes : 1CPU OoO classique pour l'interprétation, un GPU pour ce qui se parallélise facilement, un VLIW pour ce qui a été JITé, un FPGA pour les tâches très répétitives, etc ...

      Enfin, je divague ...
      • [^] # Re: Le CPU, limité dans son évolution

        Posté par  . Évalué à 1.

        de façon plus générale, on peut même imaginer un système où chaque coeur (ou sous-groupe de qq coeurs) est spécialisé dans une tâche :

        * compatibilité x86 (ce qui permettrait de s'en affranchir dans les autres coeurs)
        * opérations graphiques
        * ...

        enfin, je n'y connais pas grand chose :)
  • # Architecture Cell

    Posté par  . Évalué à 7.

    Article sympa mais dommage qu'on y parle pas de l'architecture du Cell qui est en quelque sorte l'architecture unifié que veut sortir AMD :
    - 1 coeur PowerPC all purpose
    - 8 DSPs dédié au traitement numérique

    Quelques liens :
    * Un lien parlant de l'architecture fusion : http://www.presence-pc.com/actualite/amd-phenom-fusion-27471(...)
    * Page sur un driver OpenGL basé sur Galium3D pour le processeur Cell : http://www.tungstengraphics.com/wiki/index.php/OpenGL_for_Ce(...)

    A l'avenir, les constructeurs délégueront les traitements aux différents coeurs de la machine en fonction de la nature de ces traitements.
  • # GPU et DSP

    Posté par  (Mastodon) . Évalué à 6.

    > les cartes graphiques munies de GPU sont devenues des sortes d'énormes DSP

    Attention dans la comparaison des GPU avec des DSP. Dans l'embarqué, on a coutume de dire que les GPU sont des DSP du pauvre, dans le sens où ils sont relativement bien moins puissant que leurs homologues embarqués. Un téléphone avec un processeur et un DSP tournant à quelques centaines de MHz est capable de décoder de la vidéo HD en temps réel. On en est très loin avec les CPU et GPU desktop.

    Donc le terme "énorme DSP" me semble un peu exagéré, j'aurais plutôt dit "DSP bas de gamme".
    • [^] # Re: GPU et DSP

      Posté par  . Évalué à 1.

      Plutôt DSP mal exploité que DSP bas de gamme (ou DSP multi-purpose vs DSP hyper spécialisé).

      Ca m'étonnerais quelque peu, qu'un DSP de mobile consommant quelques milliwatts soit "plus mieux" que les monstres de Nvidia et ATI en terme de patate brut.

      Et il na faut pas oublier les multiples couches (OS/API/driver) qui doivent être bien minimisé sur mobile.
      • [^] # Re: GPU et DSP

        Posté par  . Évalué à 3.

        Le traitement est spécialisé donc pour ce traitement particulier, oui, le DSP à seulement 200MHz est plus efficace qu'un GPU a plusieurs centaines de MHz avec une énorme mémoire à coté, qui bouffe un énorme courant et qui chauffe beaucoup.
        Surtout dans les STB de salon où la petite puce a un "petit" coeur DSP qui peut décoder 2 flux 1080p, sans chauffer (pas de ventillateur). Seul les dernières cartes graphiques peuvent le faire, et encore, si elles ont les accélérateurs hardware de décodage H.264 par exemple.

        Accélérateurs qui sont biensûr présent dans le DSP de la STB, évidement...
    • [^] # Re: GPU et DSP

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

      Un GPU surtout de bureau a plusieurs ordre de grandeurs de puissance qu'un DSP surtout de mobile.

      Si on ne regarde pas les shaders qui pourrait être des x86 avec des instructions en plus, il reste le pipeline de coloration des triangles qui lui demande une puissance énorme mais qui se réalise très bien en hardware avec plein de multiplier et d'additionneur.

      Dans le projet open-graphics, la question revient souvent dans l'utilisation de dsp mais la réponse est toujours la même : cela sera bien trop lent.

      "La première sécurité est la liberté"

    • [^] # Re: GPU et DSP

      Posté par  . Évalué à 3.

      Je partage les opinions ci-dessus sur la relativisation du terme "DSP du pauvre" et "bien moins puissants que leurs homologues embarqués".

      Les DSP dans l'embarqué sont très spécialisés. Ca veut dire qu'ils nécessitent une conception bien particulière qui leur permettra de faire UNE tâche très rapidement.

      Un DSP embarqué qui décode des flux HD le fait certainement très bien, si je lui balance les calculs d'applications de textures et autres joyeusetés gérées par les cartes graphiques, il va tomber à genou.

      On peut faire la même comparaison avec les décodeurs mp3/autre ajoutés sur certaines cartes sons il y a quelques années, et dire que les DSP de carte son c'est vraiment bas de gamme parce que le décodeur mp3 il le fait vachement mieux.
      Certes, mais le décodeur mp3, il ne fait que décoder des mp3 et rien d'autre...
    • [^] # Re: GPU et DSP

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

      Un téléphone avec un processeur et un DSP tournant à quelques centaines de MHz est capable de décoder de la vidéo HD en temps réel.

      Je veux une démonstration : parce que bon, si tu parle de "HD" avec un truc en 512*288 (le "TVHD" du téléphone) forcement le DSP du téléphone va suivre... Mais si c'est pour décoder du 1920*1080 (un vrai TVHD qu'un GPU sait décoder), j'ai peur que ton DSP de téléphone ai du mal...

      Je dirai plutôt que les GPU sont devenus des DSP multi-fonctions (entre un DSP de téléphone sachant faire une chose très bien, mais hors de question de faire autre chose que cette unique chose, et un CPU qui fait tout mais lentement), mais pas des DSP bas de gamme (vu que les DSP que tu cites en exemple sont pauvres, très pauvres en fonctionnalités)
      • [^] # Re: GPU et DSP

        Posté par  (Mastodon) . Évalué à 3.

        Tu veux une démonstration ? Je vais te donner deux exemples :

        Un processeur mobile (dans un téléphone) qui tourne à 400Mhz et qui encode et décode du MPEG-4 en temps réel jusqu'au VGA (640x480) à 30fps, du WMA, du H264 (jusqu'au QVGA (320x240)), du JPEG et qui fait de l'audio en prime.... "très pauvres en fonctionnalités" ? Je passerai sur l'argument du 1920x1080 sur un téléphone, je dirais que vu la taille des écrans, c'est loin d'être nécessaire.
        http://www.st.com/stonline/products/families/mobile/processo(...)

        Un autre exemple dans des set-top-box, un processeur à 266MHz et deux DSP à 400Mhz, ça décode du H264 High Profile et du MPEG-2 en HD (jusqu'à 1080i) et toujours en prime, tu as le son...
        http://www.st.com/stonline/products/literature/bd/11102.htm

        Maintenant, j'aimerais bien qu'on me montre des couples CPU/GPU qui font le même genre de chose à de telles vitesses.
        • [^] # Re: GPU et DSP

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

          Oui, donc rien à voir avec la puissance des GPU dont on discute, tu me le confirme...
          Oui un DSP de téléphone sait faire des choses, mais beaucoup moins qu'un GPU qui lui sait faire du 1080p!

          Pour les set-to-box, le DSP sait décoder du H264, bien... Mais sait-il faire autre chose? non!
          Tu donne des exemples, mais n'a pas lu en entier l'argumentation : les DSP savent faire des choses, mais très peu de choses, ils sont hyper spécialisé, un GPU est moins spécialisé, sait faire plus de choses...

          Maintenant, j'aimerais bien qu'on me montre des couples CPU/GPU qui font le même genre de chose à de telles vitesses.

          Et moi j'aimerai bien voir tes DSP faire autre chose que décoder du H264. Ils ne savent pas.
          Les DSP donnés en exemples sont "pauvres" en fonctionnalités.

          Un GPU est entre un DSP et un CPU... Mais n'est certainement pas un DSP bas de gamme, du fait de sa polyvalence, absente d'un DSP...
          • [^] # Re: GPU et DSP

            Posté par  (Mastodon) . Évalué à 2.

            Ils savent faire d'autres choses et l'ensemble des codec qu'ils savent gérer montre qu'ils ne sont pas si spécialisés que ça. Il est possible de faire plein de choses avec un DSP, seulement, les DSP vendus font ce qu'on leur demande de faire et à l'heure actuelle, c'est de la vidéo.

            D'ailleurs, ces DSP se programment en C, pas dans un langage restreint. Alors tout ce qu'il est possible de faire en C, il est possible de le faire tourner sur un DSP. Et je peux t'assurer qu'on peut leur faire faire n'importe quoi !

            Tu dis qu'un GPU sait faire du 1080p, je peux te dire qu'un CPU sait faire du 1080p aussi, ça n'en fait pas un semblant de DSP pour autant.
      • [^] # Re: GPU et DSP

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

        Les futurs téléphones visent le 720p. Chez TI il embarque des c64 a 500 Mhz (vliw 8 voies, 2 multiplieurs).

        "La première sécurité est la liberté"

  • # Interface logicielle

    Posté par  . Évalué à 3.

    Les constructeurs de cartes 3D peuvent partir dans des directions différentes, ce qui sera important pour les codeurs sera d'avoir une interface unifiée pour programmer les GPUs et en tirer le meilleur.
    Si vous suivez le développement de la nouvelle pile graphique de Linux, on commence à avoir des conflits entre différentes interfaces (ex: GEM vs TTM, Gallium3D trop "windaube"...). En effet, ce qui risque d'arriver est d'avoir des types de GPUs qui devront chacun être programmés de manière réellement différente et une interface de programmation unifiée pénaliserait certaines architectures au détriment d'autres car certaines seraient "mieux" adaptées à "l'interface".
    Bref, en théorie cela ne devrait pas arriver car les constructeurs sont censés se mettre d'accord sur opengl3. Mais bon...
    Prenons l'exemple de GEM et TTM, et bien ces interfaces définissent comment intéragir avec la ram de la carte graphique. Grosso modo, les GPUs semblent vouloir se mettre à gérer leur RAM comme le font nos CPUs (pagination, protection etc...). Or un logicie l(moteur) 3D qui gère vraiment beaucoup de textures, pour être performant devra être proche de la gestion de la ram vidéo (cf le moteur Id5 qui veut "streamer" des textures géantes) et des interfaces faisant abstraction du modèle de gestion mémoire seront pénalisantes.
    • [^] # Re: Interface logicielle

      Posté par  . Évalué à 2.

      Un lien qui montre la différence de performance en GEM et TTM:
      http://www.phoronix.com/scan.php?page=news_item&px=NjQ3N(...)
      • [^] # Re: Interface logicielle

        Posté par  . Évalué à 2.

        Un meilleur lien sur le debat GEM / TTM:
        http://aseigo.blogspot.com/2008/05/i915-and-gem.html
        • [^] # Re: Interface logicielle

          Posté par  . Évalué à 2.

          Le problème est que seuls les GPUs sont vraiment testés avec ces interfaces.
          Il faudrait les tester sur des architectures AMD et NVIDIA...
          De plus il semblerait qu'AMD soit sur le point d'ajouter de nombreuses nouveautés à la gestion de le ram vidéo de leur GPU.
          Il faudrait savoir comment les futurs GPUs vont gérés leur mémoires et voir si c'est généralisable sans pénaliser certains dans 1 et 1 seule interface.
          Sinon, il va falloir plusieurs interfaces bas niveau dont les clientes seront les interfaces de plus haut niveau.
          On va me dire que c'est du bon sens...
    • [^] # Re: Interface logicielle

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

      En effet, ce qui risque d'arriver est d'avoir des types de GPUs qui devront chacun être programmés de manière réellement différente et une interface de programmation unifiée pénaliserait certaines architectures au détriment d'autres car certaines seraient "mieux" adaptées à "l'interface".

      Genre la méthode actuelle des GPU (dessin par triangle) et son API qui va bien a supprimé la puissance d'une autre méthode : Voxel (qui si c'est fait en CPU brut est plus performant, mais voila, d'un coté le CPU qui fait tout, de l'autre une armée de GPU qui fait le calcul...)?
  • # et la virtualisation ?

    Posté par  . Évalué à 1.

    Je pense que la voie prise par Transmeta à l'époque càd la virtualisation des instructions x86 est aussi envisageable avec l'augmentation de microcode dans les processeurs, et l'on pourra au choix répartir la puissance de calcul en instruction orientées CPU ou GPU
    et se débarrasser de la dépendance à x86...,

    mais ce qui est clair après la disparition des cartes filles :

    * réseau
    * controleur
    * carte son

    et la course à l'intégration, la prochaine cible est clairement la carte vidéo, déjà intégrée sur la Carte Mère pour le bas de gamme et on commence à voir des GPU de qualité directement intégrés sur la CM.
  • # AVX = Vectoriel

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

    Nicolas Boulay me l'a souflé un peu après et je ne l'ai donc pas mis dans la news : l'intérêt d'AVX est de proposer un jeu d'instructions certes complexe mais vectoriel :
    Dans des registres 256 bits on peut caser 4 flottants 64 bits, et réaliser des opération vectorielles dessus, du genre R = r1*r2 + r3*r4.
    Il ya tout ce qu'il faut pour implémenter une bonne librairie vectorielle, matricielle à coup d'intrinsics.

    Evidemment c'est quasiment pas parallelisable, et quand ça l'est, c'est le processeur qui va le détecter, suite aux incantations vaudous sur le code.

    Conclusion : ça obligera à tâter de l'assembleur, car je vois mal le compilateur réussir à gérer ça tout seul, mis à part des cas très simple, avec des techniques comme celle de l'autovectorisation de GCC, et ça obligera surtout à penser son code de manière à aider le processeur à parraléliser tout seul, en mettant le moins possible de dépendances entre les opérations successives.
    La routine quoi.

    Je me demande si ça serait pas intelligent de reprendre le shading language, qui est très orienté vectoriel, et de lui faire générer de l'AVX. Ce serait très intelligent : un compilateur (avec une grosse grammaire) comme C arriverait plus facilement à mapper les calculs sur l'ensemble des opérations assembleurs proposées...

    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

    • [^] # AVX = SSE++

      Posté par  . Évalué à 2.

      Bref tout comme SSE..

      Sinon tu parlais de compilation: AVX a des instructions a 3 registres (voire 4 pour la multiplication-addition) contrairement au SSE qui modifiait une des sources, ce qui devrait simplifier pas mal le travail du compilateur|programmeur au niveau de la gestion des registres.
      • [^] # Re: AVX = SSE++

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

        en gros intel se décide à (finir de) reprendre les bonnes idées d'altivec (avec 10 ans de retard, et après moultes itérations:MMX, SSE, SSE2, SSE3, SSSE, SSE4.1, SSE4.2...)
        • [^] # Re: AVX = SSE++

          Posté par  . Évalué à 2.

          Tout a fait. Mais avec en plus des vecteurs 256 bits au lieu de 128 (Altivec et SSE).

          256bit = 4*64bit: ça va faire plaisir aux scientifiques qui utilisent des flottants sur 64b et non pas 32b comme pour les jeux.
          • [^] # Re: AVX = SSE++

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

            Oui et en fait je suis pas sûr que ça puisse concurrencer NVidia en puissance de calcul :
            Admettons qu'ils consacrent un coeur à leur AVX :
            On a 15 registres 256 bits. En admettant qu'ils arrivent à faire exécuter toutes les opérations en un cycle, avec la possibilité d'exécuter plusieurs opérations en même temps, à condition qu'il n'y ai bien sûr pas dépendance entre données, je suis pas sûr qu'on puisse aller loin.

            Si on l'utilise pour des opération à 3 opérandes (opération simple genre r = a*b +c), on pourra exécuter 15/3 opérations en même temps. SI l'on suppose qu'il exécute son opération en un cycle.
            A 3 Ghz, ça nous fais 3.10^9*5 opérations.
            r = a*b+c => 2 opérations simples
            Soit 3.10^10 opérations, soit 10 Gflops

            On est loin des 500 Gflops atteint par un GPU....

            « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

            • [^] # Re: AVX = SSE++

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

              c'est sûr, le passage SSE vers AVX (qui arrivera avant larrabee si j'en crois http://en.wikipedia.org/wiki/Advanced_Vector_Extensions ) ne fera que doubler le nombre de flops, donc pas de miracle pour la perf peak. Par contre ça devrait etre beaucoup plus souple en matière d'alignement des données et donc plus facile à utiliser pour les humains et les compilos

              En fait, http://arstechnica.com/news.ars/post/20080429-in-depth-intel(...) précise que pour larrabee c'est un autre jeu d'instruction vectorielles qui devrait etre utilisé avec des vecteurs 2 fois plus longs (16 float)
            • [^] # Re: AVX = SSE++

              Posté par  . Évalué à 2.

              >Admettons qu'ils consacrent un coeur à leur AVX :

              Non, je pense que chaque coeur aura son AVX comme a l'heure actuelle chaque coeur a son SSE.

              >On a 15 registres 256 bits. En admettant qu'ils arrivent à faire exécuter toutes les opérations en un cycle, avec la possibilité d'exécuter plusieurs opérations en même temps

              En général sur chaque coeur une seule operation SIMD est faite a un moment, par contre on peut avoir un load/store et un calcul entier en parallele.

              Tes caculs de FLOPS sont plutôt mal fichu, le calcul est:
              nombre de coeur * nombre instruction flottante en // par coeur * frequence.
              Le nombre de registre n'a rien a voir la dedans..
              4 coeur * 4 (a priori) * 3GHz ~= 50 GFlops
              Mais bon ce nombre (tout comme celui des GPU) ne veut pas dire grand chose: les performances de la mémoire, des caches ont une grande importance en pratique, ainsi que la facilité de programmation.

              Les GPUs sont plus puissantes, mais beaucoup plus dure a programmer donc les unités SIMD ont une niche non-négligeable: c'est beaucoup plus simple de faire un ensemble de librairie de calculs pour SSE (et plus tard AVX )(ça existe déjà d'ailleurs) que pour les GPU (a ma connaissance une libraire n'existe pas encore je crois)..
  • # GPU vs CPU

    Posté par  . Évalué à 1.

    http://www.tomshardware.com/reviews/cpu-gpu-upgrade,1928.htm(...)

    Article intéressant.

    Bref rien de nouveau sous les tropics, changer sa carte graphique est toujours plus avantageux en termes de puissances brute, sans parler du coût, on change plus souvent les chaussettes aux procos qu'on ne change le port graphique (ou alors c'est juste des modifs minimes, des histoires de bande passante tout ça)

    Ce ci dit avec une grosse carte il faut quand même un processeur assez véloce afin que la CG développe tout son potentiel.
    Généralement une assez bonne CG avec un proc moyen de gamme, ou le meilleur rapport perf/prix et vous pouvez jouer convenablement.
    • [^] # Re: GPU vs CPU

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

      Entre un processeur moyen de gamme et haut de gamme, il y a quelques dizaines de pour cent de perf de différence.

      Pour un GPU, il peut y avoir plusieurs ordre de grandeur de perf. (au moins 1 en tout cas, donc un rapport 10) entre le moyen et le haut de gamme.

      "La première sécurité est la liberté"

  • # Les développeurs font la différence ?

    Posté par  . Évalué à -1.

    Je pense que ce sont Microsoft et Apple font la décision.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.