Programmation parallèle
Master InformatiqueParcours Image et 3D (I3D)
Description
Cette unité d'enseignement étudie les concepts et la mise en oeuvre de la programmation parallèle pour accélérer les traitements sur les architectures informatiques qui en sont capables. Les différentes architectures parallèles (machines vectorielles, multi-coeurs, clusters, accélérateurs matériels) y sont présentées ainsi que les différents types de parallélisme (parallélisme de tâches, de threads, d'instructions et de données) et leur efficacité (loi d'Amdahl, évaluation de performances). Cette UE abordera les techniques de parallélisation (analyse de dépendances, ordonnancement) et d'optimisation (localité mémoire, minimisation des communications). Les erreurs classiques de la programmation parallèle y sont détaillées (data race, défaut de synchronisation, incohérence des données), ainsi que les moyens de les identifier et les éviter. Les principes fondamentaux seront mis en oeuvre par la programmation multi-thread pour architecture à mémoire partagée en OpenMP, et par passage de messages pour architectures à mémoire distribuée en MPI.
Compétences requises
À l'entrée de cet enseignement, un étudiant devrait savoir :
- Écrire des programmes complexes en langage C
- Connaître les principes fondamentaux d’architecture des ordinateurs (processeurs, mémoires)
- Utiliser un système Linux, le shell et les connections distantes (ssh)
Compétences visées
À l'issue de cet enseignement un étudiant saura :
- Identifier ou extraire le parallélisme d'une application existante
- Écrire des applications parallèles optimisées
- Exploiter des architectures parallèles
- Évaluer les performances d'une application parallèle
- Reconnaître et éviter les erreurs de programmation liées au parallélisme
Modalités d'organisation et de suivi
QCMs réguliers en CM
Projet en binôme à la fin de l’enseignement
Disciplines
- Informatique
Syllabus
Cet enseignement présentera :
- Les différents types d’architectures parallèles
- Les différentes méthodes de parallélisation d’applications
- Comment effectuer des mesures de performances fiables et vérifier l’efficacité d’une parallélisation
- Le langage MPI : communications point-à-point, communications collectives, communications non-bloquantes. Il est mis en oeuvre en TP par le développement de quelques applications types.
- Le langage OpenMP : directives de création de région parallèle, de partage de travail entre groupes de threads (boucles, sections, tâches), de synchronisation explicites. Il est mis en oeuvre en TP par la parallélisation de nombreux exemples de codes selon différentes techniques.
Un projet utilisant OpenMP et MPI est réalisé en binômes à la fin de cet enseignement
Bibliographie
- B. Chapman, G. Jost et R van der Pas, Using OpenMP, MIT Press, 2008.
- OpenMP Specifications http://www.openmp.org/specifications/
- MPI Standard http://mpi-forum.org/docs/