FLASH INFORMATIQUE FI

Numéro spécial HPC


38th SPEEDUP Workshop on High-Performance Computing – Calcul multi-core et langages parallèles




Vittoria REZZONICO

Aleš JANKA


La mission de la société SPEEDUP est de rassembler les spécialistes dans tous les domaines qui touchent au HPC en Suisse et à l’étranger, ceci par le biais de workshops annuels sur un thème porteur. Cette année, c’était le tour des langages parallèles.

Les 7 et 8 septembre a eu lieu à l’EPFL le 38ème SPEEDUP Workshop on High-Performance Computing. Depuis 1987, ce workshop annuel, unique en Suisse, est le lieu de rendez-vous des spécialistes dans les domaines qui touchent au calcul à haute performance (HPC) : informatique, simulation numérique, matériel ... Dans l’histoire moderne de ce workshop, l’EPFL l’a hébergé trois fois : cette année, en 2002 et en 1997.
Depuis 2007, le workshop a adopté la formule un jour de conférences sur un thème spécifique et un jour de tutoriel pratique. Les tutoriels approfondissent d’habitude un des thèmes traités lors des conférences et donnent la possibilité de comprendre le côté pratique des dernières techniques et technologies dans le HPC. Depuis leur introduction, nous avons eu des tutoriels sur :

  • la programmation sur Cell en 2007,
  • le format de fichiers HDF5 en 2008,
  • la programmation sur GPU cette année.

Le thème de cette année était le calcul sur les multi-core et les langages parallèles. Le nombre de participants exceptionnel (plus de 150 personnes, de la Suisse et de l’étranger) a confirmé que ce sujet est devenu important. Effectivement, la technologie HPC a récemment montré des tendances de diversification du matériel, avec des nouvelles architectures hétérogènes qui font surface (voir l’éditorial et l’article Impressions de ISC’09 dans ce numéro). En même temps, on passe du parallèle au massivement parallèle, de la parallélisation à grain moyen à la parallélisation fine.
Ceci lance de nouveaux défis dans la programmation - on souhaite créer des logiciels portables, mais aussi faciles à optimiser sur une architecture donnée. Les solutions possibles à ce problème de programmation et les nouveaux standards qui se font un chemin étaient donc le thème de fond de la journée de conférence de cette année.
Le matin, les conférenciers invités, des spécialistes de l’Université de Californie à Berkeley, d’Intel et de Nvidia, ont surtout parlé des langages pour le multi-core. Après une brève explication du problème, plusieurs solutions ont été abordées :

  • Le C for CUDA est le langage le plus utilisé en ce moment pour programmer sur les GPU. Ce langage permet d’envoyer des calculs sur le GPU d’une façon relativement simple (par rapport à ce qui était disponible auparavant) à partir du code en C.
  • On peut changer de modèle de programmation parallèle et utiliser le modèle PGAS (Partitioned Global Address Space). Ce modèle suppose que la mémoire globale est partitionnée logiquement et que chaque partition est locale pour chaque processeur. Ceci introduit la notion d’affinité : un processeur a une partie de mémoire préférée. Dans cette catégorie de langages, le UPC (Unified Parallel C) est une extension du C qui permet de calculer aussi bien sur des machines à mémoire partagée qu’à mémoire distribuée.
  • Si on se restreint aux architectures à mémoire partagée, il serait agréable d’écrire un code qui puisse être exécuté sur des cores homogènes ou hétérogènes, sans qu’il faille changer le code à chaque fois qu’on change d’architecture. C’est ici qu’OpenCL entre en jeu : ce langage est un standard ouvert pour le calcul parallèle sur des architectures homogènes.

Les conférenciers invités de l’après-midi, des spécialistes du Lawrence Berkeley National Laboratory, du TU Dortmund et du CSCS ont présenté des applications de ces concepts. Non seulement ces nouveaux langages et architectures ont un rendement théorique très élevé, mais on arrive déjà à les exploiter. La journée de conférence s’est conclue avec une session posters très suivie.

La deuxième journée du SPEEDUP High-Performance workshop était réservée au tutoriel de CUDA pour la programmation des GPU. Nous avons, en particulier, traité des techniques de programmation massivement parallèle sur les cartes graphiques NVidia.

Comme la plupart des cartes graphiques modernes, ces cartes disposent de cores simplifiés, par rapport aux cores classiques (ceux qu’on trouve dans les CPU standards), les cores des GPU sont débarrassés de tous les composants spécialisés dans l’accélération d’un flux d’instructions mono-tâche. Ainsi, pour améliorer significativement la performance au prix d’une fiabilité diminuée, on passe à la trappe le cache d’accès à la mémoire vive, la logique de prévision de branchement, la vérification rigoureuse du calcul (bit-flip error tolerance) ou la double précision (sauf pour les cartes graphiques haut de gamme). On se retrouve donc avec un core simple contenant une unité qui récupère et déploie le code, une zone où sont stockées les données locales et une partie qui effectue des opérations algébriques sur les données.
Le hardware d’un GPU est optimisé pour faire du calcul rapide des projections graphiques de 3D en 2D, des textures et des ombres sur un bitmap en 2D. Pour ceci, les opérations sur les données sont faites dans un schéma SIMD (single instruction multiple data), en parallèle sur plusieurs cores et sur plusieurs ALU (arithmetic logic unit) par core. Ces ALU vont se partager les données stockées dans la mémoire locale du core. Dans une carte graphique, on peut arriver jusqu’à 960 ALU, groupées par 8 dans les cores.
L’absence des circuits d’accéleration hardware et de cache sur les cores (plus correctement appelés stream multiprocessors) impose, pour obtenir le maximum d’efficacité, une technique de programmation de latency masking. Effectivement, un cycle de récupération de données de la RAM dure plusieurs dizaines de tours d’horloge. Pendant ce temps, l’unité arithmétique ALU n’est pas occupée par le thread qui accède à la RAM. Il faut alors prévoir d’autres threads en attente qui se lanceraient dans ce cas, pour occuper l’ALU non utilisée. Tandis que l’ordonnancement des threads est fait par le core automatiquement, la technique de latency masking demande au programmeur de prévoir un nombre suffisant de minitâches à effectuer. Ceci résulte dans un niveau de parallélisation assez fine.
Le tutoriel a présenté brièvement les environnements de programmation des GPU disponibles à ce jour. Ensuite, il a donné une introduction au langage de programmation CUDA. On a vu aussi quelques tours de magie algorithmiques et du fine-tuning pour rendre l’efficacité du calcul sur les GPU comparable au pic d’efficacité théorique.
Nous avons également parlé de la programmation des GPU spécifiquement pour les tâches d’algèbre linéaire et solveurs itératifs des grands systèmes linéaires issus du calcul scientifique. Là, quelques librairies mathématiques de base existent déjà : par ex. CUBLAS, CUFFT, CULA (CUDA Lapack), MAGMA, ACML-GPU, SpMV-CUDA (Sparse matrix-vector multiplication). Il existe également des logiciels de haut niveau sur les GPU, ou support de GPU dans des logiciels mathématiques existants : par ex. Jacket et Libra pour Matlab, R+GPU (statistique), GPU VSIPL (Vector signal image processing), et d’autres.
Dans le calcul scientifique, on utilise souvent les GPU pour accélérer le préconditionnement d’une grande matrice dans un schéma itératif, dont la boucle externe tourne en double précision sur un CPU. Il semble que le manque de précision des GPU et les erreurs occasionnelles dues au bit-flip ne perturbent pas significativement la convergence du schéma itératif vers des bons résultats.
Le tutoriel a été un grand succès, aussi grâce à la disponibilité de la grande salle d’ordinateurs BC07-08 pour une centaine de personnes, équipée de postes récents aux cartes graphiques Nvidia. Les organisateurs souhaitent remercier les administrateurs de cette salle, Benjamin Barras et Sourythep Samoutphonh.
Grâce au succès du SPEEDUP High-Performance workshop de cette année, la société SPEEDUP envisage d’organiser le prochain workshop en septembre 2010 de nouveau à l’EPFL. Vous êtes cordialement invités !
Les présentations du workshop et du tutoriel 2009 ainsi que les détails du workshop prochain ou inscription à la mailing liste de la société SPEEDUP seront disponibles sur le site : www.speedup.ch.



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.