Cours MS-I3 : Programmation hybride et multi-coeurs
[2024/2025]
Organisation
- Horaire : Cours et TD/TP le vendredi matin
[Planning
détaillé]
- Enseignant :
- Marc Tajchman, CEA,
DEN/DM2S/STMF/LMES
Prérequis
Il est conseillé aux étudiants qui souhaitent suivre ce cours,
d'avoir déjà utilisé des machines de calcul sous linux, les outils
standards (shell, éditeurs, etc) et les outils de progammation
(tels que compilateurs, cmake, make, débogeurs, etc) disponibles
dans cette plateforme.
Les exemples et exercices ont été testés sur le cluster
Cholesky, mais devraient fonctionner sur d'autres environnements
(linux, macOs ou windows sur machine personnelle) à condition
d'installer des outils adéquats. Ne pas hésiter à poser des
questions en cas de soucis.
La connaissance d'un langage de programmation utilisé dans le
domaine scientifique, de préférence C++ (les notions de C++
nécessaires sont de niveau basique), est indispensable pour
effectuer les travaux pratiques demandés.
Dans la seconde partie du cours, on utilisera des
fonctionnalités (un peu) plus avancées de C++ (fonctions lambda,
templates), une séance spécifique de ce cours leur sera consacrée.
A nouveau, en cas de difficultés, ne pas hésiter à poser des
questions.
Enfin, on supposera que les étudiants ont des notions en
programmation parallèle avec MPI, obtenues par exemple en suivant
Cours
MS01 - Calcul Scientifique Parallèle.
Programme du cours
Le programme ci-dessous est indicatif, il est susceptible de
légères adaptations. On ajoutera au fur et à mesure de l'avancement
du cours, des références sur les supports de cours et les fichiers
sources des exercices et TP.
Quelques conseils et
remarques concernant les TPs et exemples
- Rappels sur les architectures des machines et différents
types de programmation parallèle (1/2 séance)
Support de cours :
Introduction et Rappels d'architecture des ordinateurs
- Optimisation de la programmation séquentielle (1/2
séance)
- Programmation multi-threads (2 séances)
- Programmation hybride multi-noeuds - multi-coeurs (1 séance)
- Programmation des GPU (Graphics Processing Unit) (6 séances).
- Les outils de base: Cuda, OpenCL (2 séances)
TP 3 : Enoncé et code
source à modifier/compléter: format tar + gzip, format zip
- Quelques outils plus haut niveau (3 séances)
- Programmation Multi-GPU (1 séance)
Dans cette séance, on verra plusieurs moyens pour combiner
plusieurs types de parallélismes
- Lancement simultanés de plusieurs calculs sur le même GPU:
exemples commentés
- Plusieurs GPU associés au même CPU (combinaison Cuda +
OpenMP): exemple commenté
- Plusieurs GPU associés chacun à un CPU. (combinaison Cuda +
MPI) : présentation
Quelques exemples: format tar + gzip,
format zip