Mon stage de fin d’études au Centre National d’Etudes Spatiales portant sur les GPU, je vous propose une série d’articles traitant de ce thème.
Depuis ma première publication le 07 octobre, j’ai complété mon article, en lui rajoutant quelques précisions.
1.1 Historique
1.1.1 Le CPU
Les ordinateurs personnels et les stations de travail professionnel sont des systèmes autonomes dédiés à l’exécution d’applications logicielles. Au cœur de ces systèmes se trouve un microprocesseur central, ou CPU (Central Processing Unit), qui interprète les instructions et traite les données qui constituent ces applications. C’est lui qui a la charge de l’ensemble des calculs.
1.1.2 Evolution du CPU
Dans les années 80, de nouveaux besoins sont apparus nécessitant le traitement de données de plus en plus volumineuses, notamment dans les domaines de l’imagerie, de la vidéo ou du son, encore appelé multimédia. Les principales applications à l’origine de ces besoins sont logiciels professionnels de conception assistée par ordinateur (CAO) et les jeux vidéos.
Les applications multimédia s’appuient sur des algorithmes de nature très différente des applications dites « classiques » (bureautique par exemple). Alors que ces dernières traitent peu de données mais avec une logique de traitement complexe impliquant beaucoup d’interactions, de re-bouclages et de branchement conditionnels (si… alors…), les applications multimédia nécessite d’appliquer des algorithmes plus linéaires mais à de gros volumes de données. On parle de calcul vectoriel.
Les architectures des microprocesseurs se sont donc adaptées pour traiter aux mieux ces nouvelles problématiques en proposant des fonctionnalités dédiées aux applications multimédia, sous formes d’instructions spécifiques implantées au sein du processeur : MMX pour les processeurs Intel Pentium, 3D Now ! pour les processeurs AMD Opteron. Ces nouvelles instructions, qui permettent d’appliquer la même opération à plusieurs données à la fois, ont permis d’améliorer les performances des applications faisant appel à des algorithmes vectoriels, ce qui a contribué à leur succès.
Ces nouveaux microprocesseurs ont permis d’apporter des GFLOPS [1] aux ordinateurs de bureau ainsi que des centaines de GFLOPS aux serveurs. Ces nouvelles instructions et l’augmentation de performances associée ont permis d’enrichir la qualité des applications en élargissant les fonctionnalités offertes tout en améliorant les interfaces utilisateurs. Les utilisateurs, à leur tours, habitués à ces continuels progrès exigent toujours plus d’améliorations, aussi bien sur la perception des performances que sur les effets visuels, ce qui crée un cycle positif pour l’industrie informatique.
Pour répondre au besoin croissant de performance, la plupart des développeurs de logiciels ont compté sur les évolutions du matériel pour exécuter plus rapidement leurs programmes. Ainsi le même logiciel fonctionne plus rapidement sur chaque nouvelle génération de processeurs. Malheureusement cette course s’est ralentie depuis 2003 en raison de problèmes limitant l’augmentation du nombre d’instructions qu’un CPU peut exécuter par seconde (on parle de fréquence d’horloge). Ces problèmes sont principalement liés à la miniaturisation des composants (finesse de gravure) et à l’augmentation du nombre de transistors dans un microprocesseur induisant un dégagement de chaleur de plus en plus important ainsi que des interactions électromagnétiques, entrainant engendrant une augmentation de consommation électrique.
Pour palier aux problèmes de miniaturisation, plusieurs solutions ont été trouvées :
- Combiner plusieurs processeurs en un seul, les tâches à réaliser sont alors réparties entre les unités de calcul qui le composent. C’est ce que l’on appelle le « multi-cœur ». Cette nouvelle technologie a eu un impact important sur le développement logiciel.
- Adjoindre un microprocesseur spécifique dédié à l’accélération des applications les plus gourmandes, à savoir les applications multimédia. Cette approche a été possible de part la spécificité algorithmique (calcul vectoriel) de ces derniers. C’est ce qui deviendra le GPU (Graphic Process Unit).
[1] GFLOPS : se lit Giga Flops. Signification : milliards d’opérations à virgule flottante par seconde.
Il s’agit de l’unité de référence pour calculer la vitesse d’un processeur.
je suppose que l’article a déjà quelques mois 😉
Le marché est tellement dynamique qu’il est presque déjà dépassé sur certains points ^^
Par exemple tu dit que les gpu embarquent jusqu’à 768mo de ram et 200 processeurs de flux alors que le go de ddr est courant depuis plusieurs années et que les dernières ati comportent pas moins de 1600 processeurs de flux !
J’ai parcourus rapidement et je trouve aussi que tu fait souvent référence au gpu’s nvidia alors qu’il sont souvent moins efficaces que ceux d’ATI (fanboy inside :p)
J’ai commencé à travailler sur mon article en avril.
Avec les divers documents trouvés, tous avaient comme référence la Geforce 8800 GTX.
Comme ordinateur de test, j’ai travaillé avec un portable équipé d’une Quadro FX 570M, et de 256 Mo de mémoire.
Pour ta référence de GPU, tu fais référence à quel modèle?
Je ne me rappelle pas avoir voir des cartes « grand publics » équipés de Go de DDR.
Si tu veux bien me donner toutes les références possibles, je me ferai un plaisir de modifier les chiffres de cet article.
Pourquoi NVidia plutôt que ATI…
Par le passé j’ai toujours eu de gros soucis avec mes cartes ATI (drivers essentiellement, surchauffe) et je n’ai jamais eu ce problème avec NVidia. ca c’est pour le côté perso.
Pour le stage, seul CUDA avait fait l’objet de nombreux retour d’expériences, articles dans la presse spécialisée. J’ai eu le choix : le tout nouveau OpenCL ou CUDA.
Le projet sur lequel je suis étant de la R&D sur une étude de faisabilité, nous avons joué la sécurité avec CUDA. surtout que le passage de CUDA à OpenCL se ferait sans trop de problèmes, les concepts étant similaires.
Sinon pour ma conclusion, je parlerai des évolutions avec Fermi, les nouveaux outils de développement….
Encore merci pour tes remarques
Effectivement, tu as raison, a part les cartes dual gpu (512mb par gpu), il n’y a que les très récentes qui disposent de 1go de ddr… ayant possédé une 7950×2 il y a longtemps il me semblais que le go été devenus le standard sur les cartes haut de gamme.
Concernant les stream processor, les ati en possèdent généralement beaucoup plus que les nvidia. 1600 sur la très récente hd5780 qui dispose justement d’1go de ddr5, 800 sur l’ancienne génération.
C’est ce qui les rend généralement plus performante en calcul. Il y a un article d’artiflo à ce propos il me semble (calcul md5).
Cuda étant plutôt orienté entreprise je comprend ton choix vù le retard d’ati sur ce segment 🙂
Omg, super article bertrand.
C’est amusant car j’ai moi aussi un peu travailler avec les GPU pour mon stage 🙂
Merci pour ton commentaire Florian.
Dans le cadre de tes articles de sécurité, il était normal que tu parles des GPU 🙂
Travaillant sur ce sujet depuis quelques mois, j’ai voulu t’apporter un petit coup de main 😉
Le prochain article sera dédié à CUDA et son fonctionnement.
Super article vraiment !
Tu saurais me dire où tu as eu la figure sur la pipeline du GPU ? (ou peut-être l’as tu faite toi même?)
Bonsoir
je n suis pas du tout d’accord avec votre description très succincte des specs d’une silicon graphics des années 90 (ou fin 80).
par example, IrisGL ,l’ancêtre d OpengL, proposait du raytracing en hard, et une foule d operation 2D ou 3D.
Les SGI plus récente supportant OpenGL (aprés 93-94) proposent sensiblement les mêmes caractéristiques que les cartes actuels, hormis les pixels shader et qq détails.
d’ailleur remerciez les tech de chez SGI, car sans eux, point de Nvidia Geforce….
et oui les GEforce sont principalement des adaptations grands publique des cardset Infinite Reality.
Laurent