Parallélisme et Répartition

Master 1 Informatique, années 2008-2012

Objectifs Généraux

  • Etre capable de "penser parallèle" dès la spécification d'une applicationjusqu'à sa mise en oeuvre efficace dans un environnement de calcul multi-processeurs (à mémoire partagée ou non).
  • Avoir acquis les connaissances et concepts de base minimum pour affronter sereinenement la "révolution du multi-coeur" en tant que développeur logiciel

Contenu / Thèmes / Mots clé

  • Calcul haute performance
  • Architectures parallèles, Supercalculateurs, Grilles de calcul
  • Modèles théoriques du parallélisme (PRAM, logP, ...)
  • Mesures de performance, passage à l'échelle, prise en compte des modèles de mémoire
  • Schémas classiques d'expression du parallélisme (maitre/esclaves, diviser pour régner, etc...)
  • Algorithmes parallèles classiques (tris, algèbre, imagerie ...)
  • Langages ou bibliothèques standard comme openMP, MPI
  • Sensibilisation aux tendances : programmation (Stream_IT, TPL/Parallel, FX, Intel TBB, etc), architecture (multi-cores, GPUs, etc)

Ouvrages de référence

  • M. Gengler, S. Ubeda, F. Deprez, Initiation au parallelisme - Concepts, architectures et algorithmes, Masson 1996 (une bonne introduction au sujet, et comme les concepts sont discutés à un niveau pas trop technique, le livre n'est pas trop demodé même si il commence à dater un peu)
  • Algorithmique Parallèle, Cours et exercices corrigés, Arnaud Legrand, Yves Robert, Dunod, 2003, compléments sur http://mescal.inria.fr/membres/arnaud.legrand/algopar (tres bien fait, bien que nous ne nous servons que de tous petits extraits)
  • A Grama, A. Gupt, G. Karpys, V. Kumar, Introduction to Parallel Computing (2nd edition), Addison Wesley 2003. (en partie ici www-users.cs.umn.edu/~karpys/parbook )
  • P.S. Pacheco. "Parallel programming with MPI". Morgan Kaufmann. 1997.
  • R. Chandra, R. Menon, L. Dagum, D. Kohr, D. Maydan, J. Mc_Donald. "Parallel Programming in openMP". Morgan Kaufmann Publishers. 2000. Voir aussi www.openmp.org

Organisation

Responsable : FabriceHuet

Enseignement :

  • 7 séances de 2 heures de cours
  • 7 séances de 2 heures de TD
  • 7 séances de 2 heures de TD machine (sur une base de C sous Linux)
Contrôle des connaissances (1ère session) :
  • Contrôle continu à 100 % :
    • Présence en cours : 5%
    • TD : 20%
    • TP : 30% (2 projets à rendre)
    • Devoir sur table (45%) : notes de cours manuscrites sur une unique feuille A4 autorisées.

Sujet d'examen individuel de Novembre 2008. Une reponse parfaitement redigee pour l'exercice 1. Une reponse pour l'exercice 2. De meme pour les exercices 3 et 4.

Sujet d'examen individuel de Decembre 2009. Vous trouvez ici des reponses correctes et raisonnablement bien expliquees pour l'exercice 1, 3, debut du 4, et une des questions en vrac de l'exercice 2.

Transparents de support de cours

TD (en salle)

1 Exemples simples et notions architecture parallèles

2 Graphe de parallélisme, et premiers algos parallèles

3 Premiers Algos PRAM

TD machine

1 Reconnaitre sur des programmes connus les formes de parallélisme

2 Introduction à openMP

3 Complements openMP et préfixes en parallèle

4 Sections parallèles et lignes de vue

5 OpenMPI

6 Broadcast et produit Matrice-Vecteur

7 Plus court chemin

Examen

1 Examen 2010-2011 Session 1 et une correction partielle

2 Examen 2010-2011 Session 2

Sites de cours thématiquement proches (et bien faits !)

Liens complémentaires sur le web

  • Ian Foster, "Designing and building parallel programs". Addison-Wesley publishing company. 1994. (Gratuit ici: http://www-unix.mcs.anl.gov/dbpp/) : un peu ancien, mais peut être utile notamment concernant les concepts généraux; aborde le sujet d'un point de vue "software engineering"

Texte introductif et de motivation générale

Les ordinateurs multiprocesseur sont maintenant devenus la norme, tandis que les augmentations de vitesse des processeurs uniques ralentissent. La clé de l'amélioration des performances, réside par conséquent dans l'exécution d'un programme sur plusieurs processeurs en parallèle. L'impact sur la maniére de programmer les applications est considérable: celles-ci doivent absolument être concues comme etant multi-taches mais aussi, capables d'exhiber un comportement parallèle. En d'autre termes, jusqu'à présent, nous étions habitués à bénéficier d'un rendement accru pour nos programmes séquentiels et mono-thread, juste en profitant de l'évolution des processeurs. A présent, toutes les applications devront être concues comme etant parallèles et multithreadées, ceci supposant aussi de savoir gérer le partage de données et leur coordination.

L'objectif de ce module est donc d'introduire les concepts, algorithmes, méthodologies, outils utiles pour programmer en parallèle sur des architectures disposant de plusieurs unités de calcul (multi-processeurs et/ou multi-coeurs).

Par extension, on aborde aussi la programmation de systèmes constitués de la mise en réseau de plusieurs calculateurs. Dans ce cas, il devient difficile d'utiliser le concept de mémoire partagée pour coordonner et synchroniser l'exécution des différentes taches. Il s'agit alors de programmation parallèle et répartie qui repose sur l'échange (plus ou moins explicites) de messages entre les taches.

Revision: r1.50 - 26 Oct 2011 - 09:14 - FabriceHuet
Minfo > ParallRepa
Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback