Superordinateurs de table


Depuis de nombreuses années, les ordinateurs les plus puissants sont formés de très nombreux processeurs calculant en parallèle. Le record actuel est tenu par le “Roadrunner” d’IBM qui comprend 6’948 Opteron bicœurs et 12’960 processeurs PowerXCell 8i d’IBM, contenant chacun 8 unités de calcul en flux (“Stream Processing Unit”, SPU).

Combien ?

“Roadrunner” peut effectuer 1 petaflops, soit un million de milliards d’opérations arithmétiques par seconde et vaut des millions d’euros. Vous pouvez aujourd’hui assez facilement disposer dans votre PC du millième de cette puissance pour quelques centaines d’euros seulement.

En effet, les processeurs graphiques “GPU” récents sont formés de centaines d’unités de calcul en flux assez semblables aux 8 SPU du Cell. Initialement dédiés à la génération d’images réalistes en 3D temps réel et limités au calcul en virgule fixe, les GPU sont devenus capables d’exécuter certains programmes en virgule flottante beaucoup plus rapidement que sur les processeurs classiques : c’est le calcul générique sur GPU  (GPGPU).

La série 5000 d’ATI (racheté par AMD) et les nouvelles GTX 200 de nVidia offrent désormais une puissance de l’ordre du teraflops, soit 200x plus que les plus puissants processeurs intel. D’ailleurs nVidia commercialise désormais ses derniers processeurs sur des cartes “Tesla” dédiées au calcul, et dépourvues de sortie video, un comble pour des processeurs graphiques !

ça ressemple à de la pub, mais ça n’en est pas (hélas)

Ainsi, la science peut bénéficier de processeurs puissants à des prix très bas grâce aux millions de consoles et de PC familiaux.

Simulation d’écoulement d’un fluide par la méthode “Lattice Bolzmann” exécutée simultanément sur le CPU et sur le GPU…

Comment ?

La loi d’Amdahl limite beaucoup le gain de performances obtenu en répartissant un programme existant sur plusieurs processeurs (MIMD). Dans un GPU, les centaines de processeurs travaillant en parallèle ne sont réellement efficaces que s’lorsqu’ils effectuent tous les mêmes opérations sur des données différentes (SIMD).

Pour exploiter la puissance des GPU il faut donc re-coder bon nombre d’algorithmes et de méthodes numériques en se basant sur une bonne connaissance de l’architecture des GPU, et en utilisant des langages de programmation spécifiques. nVidia a pris une longueur d’avance dès 2007 en proposant CUDA, une extension du langage C et son compilateur pour les GPU de marque nVidia exclusivement. ATI/AMD a suivi fin 2008 en lançant Stream, une variante du langage BrookGPU, lui même dérivé du C par l’Université de Stanford. Mais Stream ne fonctionne que sur les GPU d’AMD/ATI, évidemment.

Là dessus, des entreprises comme RapidMind ont développé des plate-formes de développement permettant de compiler le même programme C++ pour CPU classiques, GPU nVidia ou ATI/AMD et aussi pour les processeurs Cell de “Roadrunner” et des consoles PlayStation 3 de Sony.

Apple a annoncé une nouvelle étape avec OpenCL, une autre variante de C qui devrait être supportée par son prochain système d’exploitation OS X 10.6 “Snow Leopard” cette année. Microsoft suivra probablement avec quelque chose d’équivalent intégré au Direct X 11 qui accompagnera Windows Seven (si tout va bien…)

Resté bien silencieux sur le sujet des GPU, intel prépare sa revanche en 2010 avec son processeur Larrabee, qui contiendra quelques dizaines de coeurs de ses processeurs classiques x86, et donc sera en principe capable d’exécuter simultanément un grand nombre de programmes habituels, tout en offrant une puissance suffisante pour générer des images en 3D également.

Pour quoi ?

le PowerXcell 8i s’adresse avant tout aux scientifiques et au marché des consoles“. Cette merveilleuse phrase s’applique également aux GPU : le marché porteur est celui des jeux video, toujours plus gourmands en qualité d’image et d’animation de scènes 3D complexes, mais aussi en capacité de simulation de phénomènes physiques. On veut de plus en plus de réalisme des chutes, collisions, explosions.

un dinosaure s’effondre… : illustration du chapitre de GPU Gems 3 consacré à la simulation physique. Cliquez sur l’image pour accéder au texte

Jusqu’ici les jeux intégraient la mécanique des corps rigides, mais désormais les cheveux et les habits de nos héros virtuels suivent leurs mouvements, car il est possible de simuler la déformation élastique et la rupture. La prochaine étape est de simuler l’écoulement de fluides en temps réel, on y est presque.

Or les méthodes nécessaires à ces applications ludiques sont très semblables à celles permettant de prévoir la météo, de simuler des galaxies ou de déterminer les propriétés de molécules chimiques, entre autres.

Parmi les 200 applications listées sur la Cuda Zone de NVidia, bon nombre sont des librairies numériques et d’algèbre linéaire pouvant être appliquées dans de nombreux domaines, comme par exemple le contrôle des miroirs actifs des télescopes ESO qui nécessite d’effectuer chaque milliseconde un produit scalaire d’une matrice 3000 x 6000 par le vecteur des 6000 mesures pour obtenir les 3000 commandes (video à ce sujet)

Les logiciels scientifiques usuels commencent à tirer parti de ces librairies de façon quasiment transparente:

  • pour Matlab, il existe déjà un plugin FFT et le l’environnement Jacket
  • LabView dispose d’un suport “multicore” intégrant Cuda, utilisé dans le projet mentionné plus haut
  • Mathematica utilise Cuda (lien mis à jour le 13.3.12)
  • Python, mon langage préféré du moment, peut aussi accéder à la puissance de Cuda grâce à PyCuda (faut que j’essaie ça asap!)

Et bien d’autres applications spécifiques comme:

Quel que soit votre utilisation de l’ordinateur, souvenez-vous de faire bien attention au GPU qui équipera votre prochaine machine : ce sera lui qui fera de votre machine un superordinateur de table.

Liens:

  1. Geeks3d.com le site de référence de mon gourou sur ce sujet, JegX
  2. La montée en puissance des GPUs
  3. Loi de Moore toujours
  4. Damien Triolet, “Nvidia CUDA : aperçu“, sur hardware.fr 2 Mars 2007