% INF5171 — Programmation concurrente et parallèle % UQAM — Département d'informatique % Plan de cours — Été 2022 * Horaires, locaux et enseignants: Responsable(s) du cours ======================= Coordination ------------ Coti, Camille PK-4420 Enseignement ------------- Coti, Camille Description =========== Objectifs --------- Familiariser les étudiants avec les concepts et les paradigmes de la programmation concurrente et parallèle. Acquérir les compétences nécessaires à la mise en oeuvre de ces concepts dans différents environnements, afin d'obtenir des programmes performants et fiables. Sommaire du contenu ------------------- Architectures parallèles : architecture des processeurs (pipelines, coeurs multiples); multiprocesseurs, multi-ordinateurs, grilles de calculs. Types d'application concurrentes : à fils d'exécution multiples, parallèles, distribuées. Synchronisation et communication : variables partagées, échange de messages. Programmation par variables partagées : verrous, sémaphores, barrières, moniteurs. Mesures de performance: temps, coût, accélération, efficacité. Stratégies de programmation : parallélisme itératif, récursif, de flux, de données, de sac de tâches; parallélisme de résultat, d'agenda, de spécialistes. Modalité d'enseignement ----------------------- Ce cours comporte une séance hebdomadaire obligatoire de laboratoire (2 heures). Préalables académiques ---------------------- - INF3173 - Principes des systèmes d'exploitation Contenu détaillé ---------------- **Sommaire** - Introduction et rappels des concepts des systèmes d'exploitation. - Types d'architectures parallèles: processeurs multi-coeurs, processeur graphique, grappes de calculs. - Parallélisme de tâches, de données et chemin critique. - Analyse des algorithmes parallèles: temps d'exécution, accélération et efficacité. - Synchronisation, opérations atomiques et communication interprocessus. - Exploitation des instructions vectorielles - Mesure de performance, compteurs de performance, intensité arithmétique, bande passante et effet de cache. - Test et vérification des applications parallèles. - Mise en oeuvre en C++ à l'aide de librairies modernes. **Introduction et rappels** - Survol des architectures parallèles actuelles - Classe de traitement parallèle - Calcul de l'accélération **Programmation vectorielle** - Principe et architectures actuelles - Registres et instructions x86 - Utilisation de l'API intrinsèque - Méthodologie de vectorisation **Parallélisme et concurrence** - Parallélisme sur mémoire paragée - Sources de concurrence, conditions de course - Synchronisation: verrous, conditions, barrières - Étude de cas avec la librairie Pthreads **Calcul parallèle sur mémoire partagée** - Communication par mémoire partagée, tubes, sockets Unix, shm - Approfondissement de la gestion de la concurrence et application à d'autres systèmes de calcul parallèle sur mémoire partagée - Parallélisation de boucles avec OpenMP - Parallélisation de tâches avec OpenMP, Cilk, TBB **Programmes distribués** - Calcul sur grappe - Utilisation d'un ordonnanceur de travaux - Modèles de communication - Étude de cas avec MPI - Le modèle MapReduce, étude de cas avec Spark Évaluation ========== Description sommaire Semaine(s) Pondération (%) ---------------------- ------------- ----------------- Quiz 1 5 5 Quiz 2 7 5 Quiz 3 13 5 Examen mi-session 8 (21 juin) 25 Examen final 15 (9 août) 30 TP1 5 (remise) 10 TP2 8 (remise) 10 TP3 14 (remise) 10 Les sujets pour des travaux pratiques vont dépendre du matériel et de l'environnement disponible pour leur réalisation. Les travaux pratiques sont à réaliser seul. Il est important que chaque personne comprenne bien les laboratoires et les travaux pratiques, car ils feront l'objet de questions aux examens. Le rapport et le code doivent être remis sur Moodle. Attention: aucune remise ne pourra être faite après la date limite fixée dans Moodle. En cas de divergences avec l'entente d'évaluation, les modalités de l'entente d'évaluation prévalent.