Diplômé de l’Ecole des Mines de Paris, Jean-Pierre Panziera a commencé sa carrière chez Elf-Aquitaine (maintenant Total) dans le Département de Recherche en géophysique. Après 5 ans, il gagne la Silicon Valley en Californie en tant que développeur de logiciels. En 1990, il rejoint SGI où il occupe différentes responsabilités au sein du Groupe Applications : Responsable, Ingénieur principal et Ingénieur en chef. Jean-Pierre rejoint Bull en novembre 2009 pour prendre la direction de la stratégie produits HPC du Groupe.
Bien qu’il connaisse aujourd’hui un essor significatif, le calcul haute performance (HPC) reste un marché de niche. Son évolution a été accélérée par l’adoption de nouvelles technologies développées parfois pour d’autres utilisations professionnelles, voire grand public. Pour atteindre les performances actuelles – la plus puissante machine du monde fin 2009 était 18 000 fois : plus performante qu’elle ne l’était en 1993 –, les ingénieurs ont fait preuve d’habileté, d’ingéniosité et d’une bonne dose d’opportunisme.
C’est ainsi qu’au début des années 1990, les supercalculateurs ont fait un bond de géant en exploitant le potentiel des processeurs RISC, initialement destinés aux stations de travail, puis celui des processeurs x86 que l’on trouve dans les serveurs d’entreprise ou même les PC du commerce. Aujourd’hui, c’est à un autre produit apparemment bien éloigné de la recherche scientifique et industrielle que s’intéressent les spécialistes du HPC : les processeurs graphiques (Graphical Processing Units, ou GPU) conçus et développés initialement pour les accros du jeu vidéo.
Les joueurs sont une population exigeante et ils représentent un tel marché que les constructeurs sont prêts à investir beaucoup pour les satisfaire. Il y a une dizaine d’années environ, on a vu apparaître sur le marché des processeurs dédiés à l’affichage 3D qui offraient des rendus extraordinairement réalistes. Capables de convertir dynamiquement les positions de chaque objet en pixels de couleur et de texture différentes, ils présentaient une puissance pure de calcul très supérieure à celle des processeurs généralistes, ce qui a attiré l’attention des spécialistes du HPC.
Du GPU au GP-GPU
L’utilisation de GPU pour des calculs plus classiques que l’affichage 3D a donné naissance à un nouveau sigle, les GP-GPU (General Purpose – Graphics Processing Units). Les premiers essais ont cependant nécessité des exploits de programmation car les GPU ne pouvaient interpréter que des instructions graphiques de type DirectX ou OpenGL. Il fallait donc stocker les données dans la mémoire réservée aux textures et décomposer les calculs en série de transformations géométriques (rotations, translations, homothéties…). Avec l’exigence croissante d’un meilleur rendu, il devenait nécessaire de pouvoir traiter des algorithmes plus sophistiqués, par exemple en calculant la trajectoire, l’intensité et la couleur des rayons lumineux arrivant vers l’observateur en tenant compte des lois physiques de la réfraction et de la réflexion. Plutôt que de rajouter aux GPU de nouvelles instructions, il est apparu plus judicieux de banaliser les opérations réalisées dans les GPU grâce à un jeu d’instructions plus général, les différentes options de rendu graphique étant programmées par le logiciel graphique. Les GPU devenaient plus généralistes et donc potentiellement exploitables pour la simulation numérique.
Les limitations des premières générations
Malgré ces progrès, et outre leur difficulté de programmation, les GPU souffraient de limitations qui rendaient leur usage difficile en dehors de leur domaine de prédilection. Les calculs graphiques sont effectués en simple précision (32 bits) alors que le HPC exige le plus souvent une double précision (64 bits). De plus, les GPU ne prennent pas en compte la norme IEEE (754) concernant les calculs à virgule flottante. Si les approximations qui en résultent sont négligeables pour un rendu graphique, c’est loin d’être le cas pour un calcul scientifique. De plus, la mémoire interne des GPU, d’une taille réduite, n’était pas protégée contre les erreurs par des mécanismes de type ECC. Même si elle change complètement la valeur d’un pixel, une erreur aléatoire sur un bit isolé passera inaperçue ; en revanche, un seul bit erroné peut complètement changer le résultat d’une simulation numérique, ce qui constitue un risque inacceptable pour les utilisations de type HPC. Au niveau de l’architecture, l’échange des données entre la mémoire principale et le GPU utilisait un mécanisme synchrone ne permettant pas de recouvrir ces transferts et les calculs effectués dans le GPU. De plus, les GPU sont connectés sur des bus PCIe, ce qui peut constituer un goulot d’étranglement. Enfin, il faut mentionner la forte consommation électrique des GPU (environ le double d’un CPU), qui pose naturellement des problèmes d’alimentation, de refroidissement et de coût d’utilisation.
Heureusement, la plupart de ces limitations ont aujourd’hui disparu. Les GPU les plus récents ont des capacités de calcul double précision renforcées et ces calculs respectent la totalité de la norme IEEE. La mémoire, les différents caches et les registres des GPU sont désormais détectés par des mécanismes ECC. Enfin, la programmation des GPU est plus aisée avec des outils de développement désormais tout à fait satisfaisants. Pour une bonne efficacité, le développeur peut utiliser l’environnement CUDA, propre à NVIDIA, ou le nouveau standard OpenCL. Cependant, il existe de nouveaux compilateurs de langages de haut niveau C, C++ ou Fortran comme celui de la start-up française CAPS Entreprise (HMPP), partenaire de Bull. Pour optimiser les performances des applications, le programmeur peut insérer des directives qui seront interprétées par les compilateurs, ce qui permet d’éviter une trop grande spécificité des développements et de réutiliser l’investissement de programmation.
Des performances impressionnantes
Les GPU ont donc corrigé leurs principales faiblesses tout en conservant leurs remarquables performances. La table ci-dessous compare les principales caractéristiques des GPU et des processeurs x86 les plus récents équipant les lames des systèmes bullx.
|
CPU |
GPU |
|
|
Fréquence (GHz) |
2.93 |
1.15 |
|
Nombre de cœurs |
6 |
448 |
|
Performance Double Précision (GFlops) |
70 |
515 |
|
Performance Simple Précision (GFlops) |
140 |
1030 |
| Bande Passante Mémoire (GB/s) |
32 |
148 |
|
Capacité Mémoire (GB) |
48 |
3 |
|
Type de mémoire |
DDR3 |
GDDR5 |
|
Consommation (W) |
110 (*) |
225 |
(*) La consommation estimée inclut le processeur lui-même (95 W) et la mémoire centrale.
Comme on peut le constater, les performances crêtes du GPU sont impressionnantes puisqu’elles sont plus de sept fois supérieures à celles du CPU. La bande passante mémoire est aussi bien meilleure sur les GPU (× 4,6). Et la consommation énergétique est à peine doublée. Cependant, dans la pratique, l’efficacité des GPU est souvent moindre que celle des CPU (par exemple, une multiplication de matrice atteindra 95 % d’efficacité sur un CPU et 65 % sur un GPU). Cela tient à une des différences fondamentales de structure entre CPU et GPU. Ces derniers s’appuient en effet sur un très grand nombre d’éléments de calcul (448 contre 6), et on n’exploite leur pleine puissance qu’avec un parallélisme très poussé. C’est la raison pour laquelle les GPU sont utilisés comme accélérateurs et non comme des nœuds de calcul principaux : comme il n’est pas question de redévelopper entièrement les applications pour les paralléliser, on ne leur affecte qu’une portion des tâches sur lesquelles leurs caractéristiques font merveille.
Bullx™ B505, un calculateur hybride natif
Tirant parti d’une technologie désormais mature, et donc opérationnelle, Bull propose une solution d’Extreme Computing unique, qui conjugue nativement GPU et CPU pour exploiter ce potentiel d’accélération. Ce sont les lames bullx B505, dérivées des bullx B500, basées quant à elle sur des CPU uniquement. La figure 1 présente les structures comparées des deux modèles. La plupart des plates-formes concurrentes incluant des accélérateurs matériels (GPU ou autre type de processeur) vont connecter deux GPU et le réseau d’interconnexion (InfiniBand) sur le même bus PCIe. Les lames hybrides bullx B505 dédient un bus pour chacun des deux GPU et présentent deux interfaces InfiniBand pour une plus grande bande passante entres les nœuds d’un système, le double des configurations habituelles. En outre, le format « lame » est très compact, cela permet d’avoir une densité 30 % supérieure aux autres solutions du marché.
Un nombre croissant d’applications
bullx B505, comme tous les systèmes à accélérateur graphique, donne sa pleine mesure sur des applications qui présentent un part importante de tâches relativement simples mais nécessitant de la « force brute ». On peut citer en particulier :
Le rendu graphique : paradoxalement, les calculs nécessaires à la production finale des films d’animation sont en général effectués sur des systèmes à base de CPU (bullx pour le film Planète 51), mais les nouveaux calculateurs à base de GPU peuvent désormais prendre en charge les algorithmes complexes mis en œuvre.
L’exploration pétrolière : les techniques d’imagerie sismique utilisées pour analyser la structure du sous-sol (méthodes de types RTM) peuvent bénéficier des accélérateurs graphiques. Bull a fourni à Petrobras un système comportant 264 GPU. Plus généralement, la simulation sismique et l’imagerie médicale sont des candidats importants à l’utilisation des GPU.
Dynamique moléculaire et astrophysique : en chimie ou en pharmacie, le calcul des interactions entre atomes nécessite un grand nombre de calculs facilement accélérés par les GPU. On retrouve le même type d’équations, et donc d’usage, en astrophysique. L’un des « grands challenges » de calcul de Titane, la machine hybride CPU-GPU du CCRT installée par Bull, concernait la simulation de la propagation du rayonnement des étoiles.
La simulation financière : toutes les méthodes d’analyse et de simulation financières (Monte-Carlo, Black–Scholes…) sont particulièrement gourmandes en puissance de calcul.
Electromagnétisme : les simulations des phénomènes électromagnétiques (radars, antennes…) font appel à des calculs « denses » (beaucoup de calculs par accès mémoire), ce qui est parfait pour les GPU.
Génétique : les algorithmes de séquençage des gènes requièrent un grand nombre de comparaisons terme-à-terme. Même s’il n’y a pratiquement aucun calcul flottant, l’intensité des traitements convient bien aux GPU et la vitesse peut être multipliée par 30 sur des algorithmes de type Smith-Waterman ou Blast. Ce type d’utilisation est similaire à la recherche de séquences ou de chaînes de caractères dans de grandes bases de données.
Structure moléculaire : les applications de calcul de structure des molécules (méthodes ab initio) peuvent être accélérées au moyen de GPU, comme l’a démontré l’un des « grands challenges » relevés par le supercalculateur Bull-Titane.
Malgré les améliorations récentes, les GPU sont encore fortement marqués par leur origine graphique. Une architecture serveur plus intégrée devrait encore améliorer leur efficacité, particulièrement au niveau des transferts de données. Les fabricants de GPU ont déjà publiquement annoncé leurs intentions de s’orienter dans cette direction. ATI/AMD promet de réaliser la « fusion » des CPU et GPU. Bill Dally, le CTO de NVIDIA annonce la fin du CPU généraliste de type Xeon® tel que nous le connaissons et l’avènement de processeurs hautement parallèles, successeurs des GPU actuels. Bien que ne commercialisant pas de GPU, Intel n’a pas dit son dernier mot et a récemment présenté le prototype d’un processeur « many-core » qui en est dérivé. L’introduction des GPU comme accélérateurs de calcul a bouleversé le monde du HPC. Ce qui n’est encore aujourd’hui pour certains chercheurs qu’une « technologie intéressante » est au cœur de la révolution des systèmes de calcul. C’est la voie du futur, et elle est déjà disponible dans les solutions d’Extreme Computing de Bull.









