Programmation évolutionnaire en CUDA sur carte graphique multi-processeurs nVIDIA (GPGPU)

Sujet de projet M2 ou stage M2/Ingénieur pour l'année 2007/2008


Encadrant :

Pierre Collet (pierre°collet@lsiit°u-strasbg°fr)
Laboratoire des Sciences de l'Image, de l'Informatique et de la Télédétection
Tel : 03 90 24 45 80

Nombre d'étudiants : 2

Mots-clés :

Carte graphique multi-processeurs, nVIDIA, Cuda toolkit, C.

Pré-requis :

Bonne connaissance de la programmation en C.

Présentation du projet:

Beaucoup de personnes pensent que la loi de Moore s'applique à la "puissance" des ordinateurs, sans savoir trop ce que ça veut dire. Du coup, certains croient qu'elle s'applique à la rapidité du CPU, ce qui est loin d'être exact... Prenons un exemple concret : le Pentium 4 à 3GHz est sorti début 2003. Si la vitesse des processeurs suivait la loi de Moore (doublement tous les 18 mois), les Pentiums devraient maintenant tourner presque 9 fois plus vite 57 mois plus tard (septembre 2007), soit à 27 GHz, ce qui n'est malheureusement pas le cas (on n'a toujours pas atteint les 4GHz !)

En fait, la fameuse loi de Moore prévoit un doublement du nombre de transistors par mm2 tous les 18 mois, ce qui permet donc de mettre quatre fois plus de choses sur une puce de taille identique tous les 3 ans. Pour vendre des machines toujours plus puissantes, les constructeurs exploitent donc cet espace disponible, en proposant des processeurs "dual-core" ou des "quad-core", qui ne sont pas plus rapides en terme de fréquence d'horloge, mais qui permettent d'effectuer plusieurs tâches en parallèle.

Le seul problème, est qu'à moins d'exécuter quatre Word en parallèle, ce surcroît de puissance ne sert pas à grand chose, car les algorithmes réellement parallélisables sont très peu nombreux, mais il en existe tout de même quelques-uns, notamment dans le domaine des jeux vidéos. En effet : pour proposer des effets visuels toujours plus réalistes, ceux-ci sont très gourmands en calcul (ombres, facettes, textures), mais un certain nombre d'algorithmes sont intrinsèquement parallèles, et peuvent donc bénéficier de la loi de Moore si la place disponible sur les puces est utilisée pour y mettre plusieurs CPUs (architecture multi-coeurs).

Comme (grâce à la loi de Moore), il est maintenant facile de mettre de nombreux coeurs sur une surface réduite, les principaux fabricants de cartes vidéo (nVIDIA, ATI) se sont lancés dans cette voie, financés dans leur recherche par les millions de dollars de l'industrie du jeu vidéo. Le résultat est étonnant : pour environ 600 euros, la carte graphique nVIDIA GeForce 8800 à 128 coeurs affiche 330 GFlops (330 milliards d'opérations par seconde) alors qu'elle ne tourne qu'à 612 MHz.

Il faut bien avoir conscience que 330 GFlops représente une puissance de calcul monstrueuse, qui jusqu'à présent n'était disponible que sur des super-ordinateurs. Les fabricants se sont rendu compte de l'intérêt de telles cartes pour le calcul scientifique, et sortent maintenant des cartes graphiques... sans sortie graphique (!), dédiéees au calcul pur, appelées GPGPUs, pour General Purpose Graphical Processor Unit. Ainsi, nVIDIA sort des calculateurs TESLA montant jusqu'à 2 TFlops pour 512 processeurs et un prix dérisoire (vu la puissance de calcul offerte) de $12000.

Sujet du stage :

Si les processeurs multi-coeurs sont clairement l'avenir de l'informatique, ils restent difficiles à programmer, et leurs applications sont restreintes. Il existe cependant une classe d'algorithmes intrinsèquement parallèles qui permettrait de les exploiter : les algorithmes évolutionnaires.

Le but de ce stage est donc de programmer des algorithmes évolutionnaires de base sur ces cartes, histoire d'apprendre à les programmer.

Le laboratoire dispose d'une carte GeForce 8800 à 128 processeurs, exploitable par la bibliothèque CUDA. Le (ou les) stagiaire(s) devront apprendre à utiliser le toolkit CUDA pour programmer un algorithme évolutionnaire et le faire tourner tout d'abord sur simulateur avant de l'essayer sur la carte graphique du laboratoire.

Bibliographie :

Il y a sur internet tout plein d'informations concernant CUDA, comme cette petite page. Sinon, toute la documentation est en ligne.