Introduction à OpenACC et OpenMP GPU

Responsable :

Objectif :

  • Utiliser les directives OpenACC et OpenMP 5.0 pour effectuer des calculs sur architectures hybrides accélérées (GPU)
  • Appréhender les concepts sous-jacents
  • Comprendre les intérêts de ces approches (simplicité d'implémentation, portabilité, performance…) ainsi que les contraintes associées (gestion implicite ou explicite des données, synchronisations et dépendances)
  • Être capable de mettre en œuvre ces concepts sur des exemples concrets issus d'applications réelles

Public concerné :

ingénieurs et chercheurs

Pré-requis :

  • connaissance et utilisation de Fortran 90/95 ou C
  • connaissance de base en OpenMP et/ou MPI

Durée :

2 jours

Assistance :

maximale : 13 personnes, minimale : 10 personnes.

Dans le cadre sanitaire du COVID-19, la direction de l'IDRIS a pris la décision de limiter, jusqu'à nouvel ordre, le nombre de stagiaires dans les sessions de formation afin de pouvoir respecter la distance minimum entre les participants dans la salle de cours.

Programme :

Depuis le début de la décennie 2010, l'utilisation des cartes graphiques (GPU) comme dispositifs d'accélération de certains types de calculs a crû de façon rapide et, alors qu'elles avaient été initialement conçues pour les jeux vidéo, leur utilisation pour le calcul scientifique a connu une progression régulière.

Plusieurs approches ont été développées pour permettre aux scientifiques d'exploiter la puissance de calcul des GPU. Dans un premier temps, des langages de programmation spécifiques aux architectures (par exemple CUDA pour NVidia) ou génériques (comme OpenCL) ont été mis à disposition des programmeurs. Ces langages sont de bas niveau et nécessitent une réécriture importante des codes de calculs.

OpenACC et OpenMP (target) utilisent des directives pour annoter les codes et permettre l'utilisation des GPU. Les modifications apportées aux codes sont moins intrusives et permettent d'obtenir des résultats très souvent proches des langages bas niveau. C'est cette approche que nous présentons lors de cette session.

Le cours est divisé en plusieurs modules qui permettent d'aborder différentes notions essentielles à la programmation sur GPU avec des directives :

  • Bien débuter : Présentation succinctes des directives principales pour être capable rapidement d'exécuter du code sur les cartes graphiques.
  • Analyse de code : Présentation des outils de profilage de code sur GPU et CPU pour identifier les parties importantes pour un portage progressif d'un code CPU.
  • Gestion des données : Les transferts de données entre CPU et GPU sont l'un des principaux facteurs limitant les performances. Ce module présente les directives qui permettent de les optimiser.
  • Programmation modulaire : Présentation des directives nécessaires pour porter un code modulaire.
  • Optimisation des noyaux de calculs : Présentation des clauses avancées pour la gestion des noyaux de calculs.
  • Recouvrements calculs/transferts :Exécution asynchrones des noyaux et transferts.
  • Multi-GPU : Utilisation de plusieurs GPU lors des calculs avec un couplage des directives GPU avec MPI et/ou OpenMP CPU

50 % du temps sera consacré aux travaux pratiques (langage C ou Fortran)

Équipement :

supercalculateur(s) de l'IDRIS

Intervenant :

S’inscrire à cette formation :