1.5 Conclusion du chapitre
Dans ce chapitre, nous avons introduit le concept de programmation générique parallèle sur carte graphique, ou GPGPU (General Purpose computing on Graphics Processing Units) en explicitant son intérêt croissant pour la communauté scientifique, en exposant les notions de parallélisme sur lesquels il repose et qu’il est nécessaire de connaitre dans ce cadre, puis nous avons présenté un historique des générations successives de cartes graphiques et l’architecture matérielle des plus récentes, le modèle de programmation GPGPU que cette architecture impose ainsi que ses contraintes.
Avec l’évolution rapide de leurs performances les GPU deviennent de plus en plus intéressant.
Cependant, Il est important de noter, qu’actuellement la performance n’est pas le seul facteur de décision pris en compte par les développeurs lorsqu’ils doivent choisir le processeur chargé d’exécuteur leur applications.
D’autres facteurs doivent aussi être pris en compte :
1.5.1 Présence du processeur cible sur le marché.
Le coût de développement d’un logiciel est plus vite justifié si la population cliente est importante. Les applications qui peuvent fonctionner sur un marché restreint n’auront qu’une faible clientèle, très spécifique.
Ceci a été le problème principal des systèmes de traitements parallèles classiques qui n’avaient qu’une part de marché négligeable comparés aux CPU. Seules quelques applications spécifiques financées par les gouvernements et de grands groupes ont pu être développées avec succès.
Ceci a changé avec les GPU multi-cœurs. Grâce à leur popularité sur le marché des PC, les GPU ont été vendus par centaines de millions (par exemple la famille G80 a été vendue à plus de cent millions d’exemplaires à ce jour). Actuellement quasiment tous les ordinateurs disposent de GPU. C’est la première fois que le calcul massivement parallèle fait partie d’un marché grand public. Une si grande présence a rendu les GPU économiquement très attractifs pour les développeurs.
1.5.2 Facilité d’accès à la technologie
Un autre facteur important à prendre en compte est la pratique et la facilité d’accès à une technologie.
Avant 2006, avec l’apparition de la programmation parallèle et des nouveaux logiciels développés pour fonctionner de cette manière, l’application en production fonctionnait d’habitude sur des serveurs voir des Datacenter répartis sur ces clusters départementaux.
Il était très difficile de pouvoir réaliser des tests sur ce genre de machines, et peu de programmeurs y avaient accès.
Jusqu’en 2006, les puces graphiques étaient très difficiles à utiliser parce que les programmeurs devaient utiliser l’équivalent d’API graphiques pour accéder aux cœurs du processeur, c’est à dire utiliser des techniques Open GL ou Direct3D. Même avec un environnement de développement de plus haut niveau, le code sous-jacent restait limité par les API.
Ces API limitent les choses que l’on peut écrire en réalité pour ces puces. C’est pourquoi seulement quelques personnes pouvaient surmonter ces difficultés par d’habiles compétences pour pouvoir atteindre les performances désirées.
Par conséquent, la programmation GPGPU n’est pas devenu un phénomène de programmation répandu. Néanmoins, cette technologie était suffisamment passionnante pour inspirer quelques efforts héroïques et des résultats excellents.
Mais tout le changé en 2007 avec la sortie de CUDA. NVIDIA a ainsi rendu les GPU plus facilement programmables, et de par le nombre de GPU sur le marché, ce langage de programmation s’est donc ouvert à un plus grand nombre de développeurs.
1.5.3 Prix et disponibilité
Pour environ 300 euros, il est possible de se procurer les GPU les plus puissants existants sur le marché actuel. Ces très faibles prix sont le résultat de l’existence d’un marché énorme et d’une concurrence rude entre les deux plus importants fabricants de cartes graphiques, NVidia et ATI, dont la cible commerciale principale est le grand public, pour la pratique des jeux vidéo.
La composition d’un cluster à utilisation professionnelle est donc très raisonnablement envisageable. De plus, par ces faibles coûts, il est aujourd’hui rare pour une station de travail ou même un ordinateur grand public de ne pas disposer d’un GPU performant.
Même si le GPU ne peux rivaliser en terme de tâches généralistes comme les CPU, il reste un excellent moteur de calcul, et permet de délester le CPU de ce type de tâches.
1.5.4 Choix du langage
Le langage OpenCL formé entre autre par les sociétés Apple, AMD, Intel et NVidia est un langage open-source visant à devenir le langage de référence pour la programmation des GPU.
Cependant devant la jeunesse de ce langage, moins d’un an d’existence, et manque de retour d’expérience et le manque d’accès aux informations à fait que nous nous baserons sur le langage CUDA.
OpenCL étant très similaire à CUDA : en effet le vocabulaire de dénomination des concepts change, mais les concepts eux restent similairement les même.
Dans l’article suivant nous étudierons le langage CUDA plus en détails.
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