
Formation : Introduction à OpenACC et OpenMP GPU
Responsable : Thibaut Véry
Intervenants : Thibaut Véry, Olga Abramkina, Xuezhou Lu
Cette formation de 3 jours vous permet de maîtriser la programmation GPU avec les directives OpenACC et OpenMP 5.0 en C/Fortran, en comprenant les architectures hybrides, les concepts clés, les compromis de performance et les outils de profilage pour implémenter efficacement ces approches sur des applications réelles.
Les objectifs détaillés de la formation sont les suivants :
- Comprendre les architectures hybrides accélérées (GPU) et les contraintes de programmation associées.
- Utiliser les directives OpenACC et OpenMP 5.0 pour paralléliser des codes existants ou en écrire de nouveaux en C/Fortran.
- Appréhender les concepts clés de ces langages de programmation, tels que les directives, les clauses, les régions parallèles, et la gestion des données.
- Comprendre les avantages et les inconvénients de l'utilisation de ces approches en termes de portabilité, de performances, de complexité et de facilité d'implémentation.
- Être capable de mettre en œuvre ces concepts sur des exemples concrets issus d'applications réelles, telles que la simulation numérique.
- Évaluer les performances de ces codes en utilisant des outils de profilage et d'analyse, tels que NSight.
- Comprendre les différences entre OpenACC et OpenMP target, et choisir le langage le plus adapté à chaque situation.
- Public concerné
- Pré-requis
- Durée et modalités
- Contenu de la formation
- Supports de cours
- Prochaines sessions
Public concerné
Ingénieurs, chercheurs et développeurs souhaitant maîtriser la programmation GPU avec des directives de parallélisation. Cette formation s'adresse à toute personne impliquée dans le calcul haute performance qui désire acquérir une expertise en OpenACC et OpenMP 5.0 pour optimiser ses applications sur architectures hétérogènes GPU/CPU.
Pré-requis
Pour tirer le meilleur parti de cette formation, vous devez disposer des connaissances suivantes :
- Obligatoire : Connaissance et utilisation de la programmation en Fortran 90/95 et/ou C, incluant la compilation et l'exécution de programmes
- Optionnel : Connaissances de base en OpenMP et/ou MPI pour mieux comprendre les concepts de parallélisation
Durée et modalités
Cette formation dure 3 jours, avec un accueil le 1er jour à 9h00 puis des horaires de 9h30 à 17h30. Elle a lieu uniquement en présentiel dans les locaux de l'IDRIS à Orsay (91).
Assistance
Minimale : 8 personnes ;
Maximale : 20 personnes.
Contexte
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.
Contenu de la formation
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 succincte 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 asynchrone 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).
Pour une exécution efficace des parties pratiques, celles-ci se dérouleront sur le supercalculateur Jean Zay. Une station de travail avec accès au calculateur de l'IDRIS est mise à disposition des apprenants. Une expérience dans l’utilisation d’un supercalculateur, tout comme un accès préalable à celui-ci, ne sont pas requis.