6.00 crédits
30.0 h + 30.0 h
Q1
Enseignants
Legay Axel;
Langue
d'enseignement
d'enseignement
Thèmes abordés
Pendant longtemps, les CPU à usage général se sont concentrés sur la prise en charge efficace d'un seul thread d'exécution. Des améliorations dans la fabrication des puces ont permis d'empaqueter plus de transistors sur la même surface d'une plaquette de silicium, et de faire fonctionner des processeurs résultants à des fréquences plus élevées. Les applications monothread s'exécuteraient simplement plus rapidement avec chaque nouvelle génération de processeur. Cette ère est maintenant terminée. L'industrie a connu plusieurs limitations connues sous le nom de mur de puissance, de mur de mémoire et de mur d'ILP. Les fabricants de puces ne sont plus en mesure d'augmenter verticalement les processeurs prenant en charge un seul thread d'exécution, ils ont commencé à regrouper plusieurs unités d'exécution plus simples, ou coeurs. L'exploitation de la puissance de plusieurs coeurs nécessite l'exploitation du parallélisme dans les applications utilisant plusieurs threads. L'écriture de code concurrent nécessite l'identification et la gestion de la concurrence, et l'introduction de la synchronisation nécessaire pour l'exactitude. L'écriture de code concurrent évolutif et performant nécessite de comprendre ce compromis entre la synchronisation et le parallélisme et de maîtriser des implémentations efficaces de structures de données partagées et d'algorithmes pour une exécution simultanée. Enfin, les processeurs multicoeurs emploient une disposition de mémoire complexe, et l'hypothèse de temps d'accès mémoire uniformes n'est plus valide. Comprendre l'impact des accès mémoire non uniformes (NUMA) est donc important pour écrire du code efficace pour les processeurs multicoeurs.
Ce cours fournira aux étudiants les outils et les connaissances nécessaires pour écrire un code efficace et évolutif pour les processeurs multicoeurs modernes. Il détaillera les mécanismes disponibles pour la synchronisation, depuis l'implémentation de constructions de langage telles que verrous, moniteurs ou variables de condition, aux utilisations directes des primitives de synchronisation fournies par le CPU (par exemple compare-and-swap) pour construire des structures de données efficaces et évolutives . Il mettra l'accent sur les aspects de performance de la programmation multicoeur: l'impact des primitives de synchronisation, l'impact de l'accès à la mémoire non uniforme et l'impact des hiérarchies de mémoire à plusieurs niveaux. Il offrira enfin une ouverture vers l'avenir de la programmation multicoeur avec une introduction à la mémoire transactionnelle et au support de l'exécution spéculative dans les CPU modernes (par exemple Intel Haswell), et discutera du modèle d'exécution du code concurrent s'exécutant sur les GPU.
Ce cours fournira aux étudiants les outils et les connaissances nécessaires pour écrire un code efficace et évolutif pour les processeurs multicoeurs modernes. Il détaillera les mécanismes disponibles pour la synchronisation, depuis l'implémentation de constructions de langage telles que verrous, moniteurs ou variables de condition, aux utilisations directes des primitives de synchronisation fournies par le CPU (par exemple compare-and-swap) pour construire des structures de données efficaces et évolutives . Il mettra l'accent sur les aspects de performance de la programmation multicoeur: l'impact des primitives de synchronisation, l'impact de l'accès à la mémoire non uniforme et l'impact des hiérarchies de mémoire à plusieurs niveaux. Il offrira enfin une ouverture vers l'avenir de la programmation multicoeur avec une introduction à la mémoire transactionnelle et au support de l'exécution spéculative dans les CPU modernes (par exemple Intel Haswell), et discutera du modèle d'exécution du code concurrent s'exécutant sur les GPU.
Acquis
d'apprentissage
d'apprentissage
A la fin de cette unité d’enseignement, l’étudiant est capable de : | |
1 |
Eu égard au référentiel AA du programme « Master ingénieur civil en informatique », ce cours contribue au développement, à l'acquisition et à l'évaluation des acquis d'apprentissage suivants :
|
Contenu
Ce projet de génie logiciel consiste en le développement (analyse, conception, implémentation, validation, documentation, intégration et déploiement) d'une application logicielle réaliste et non-triviale, si possible proposée par et avec la participation d'un client réel, dans des conditions de travail semi-professionnelles.
Le sujet de l'application à construire est proposé par un partenaire industriel ou une organisation à but non lucratif qui participe à l'organisation de ce cours.
Des équipes de 6 à 8 étudiants (nécessaires pour réaliser un grand projet), collaboreront, supervisées par un chef de projet.
Des réunions hebdomadaires auront lieu avec le chef de projet (un assistant ou tuteur) pour présenter le progrès et les difficultés rencontrées, pour évaluer les alternatives, et discuter de la distribution et de la planification du travail au sein de l'équipe.
L'application à développer sera très probablement une application web, mais le choix du langage de programmation, de l'environnement, le cadre d'application et des outils de développement dépendront des exigences du client du projet.
Le sujet de l'application à construire est proposé par un partenaire industriel ou une organisation à but non lucratif qui participe à l'organisation de ce cours.
Des équipes de 6 à 8 étudiants (nécessaires pour réaliser un grand projet), collaboreront, supervisées par un chef de projet.
Des réunions hebdomadaires auront lieu avec le chef de projet (un assistant ou tuteur) pour présenter le progrès et les difficultés rencontrées, pour évaluer les alternatives, et discuter de la distribution et de la planification du travail au sein de l'équipe.
L'application à développer sera très probablement une application web, mais le choix du langage de programmation, de l'environnement, le cadre d'application et des outils de développement dépendront des exigences du client du projet.
Méthodes d'enseignement
Développement (analyse, conception, implémentation, validation, documentation, intégration et déploiement) d'un grand logiciel pour un client, en equipe de 6 à 8 étudiants supervisées par un chef de projet. Des réunions hebdomadaires auront lieu avec le chef de projet, et différents prototypes et rapports doivent être produits en cours du projet.
Modes d'évaluation
des acquis des étudiants
des acquis des étudiants
L'évaluation du cours sera basée sur:
- La participation individuelle aux travail de groupe et aux réunions de groupe hebdomadaires avec les tuteurs de cours;
- La réalisation de trois prototypes intermédiaires avec rapports techniques correspondants;
- Le rapport final, le système livré et sa documentation, ainsi que la présentation et la démonstration du produit final devant le client.
Autres infos
Préalables:
- Avoir une bonne connaissance et expérience avec les concepts de la programmation orientée objet, les algorithmes et les structures de données.
- Avoir participé à l'élaboration d'un système logiciel de petite à moyenne échelle.
Ressources
en ligne
en ligne
Bibliographie
French
Des lectures supplémentaires seront suggérées dans le plan de cours qui décrit les produits livrables et l'organisation du projet. Les supports de cours pertinents, des slides et des informations pratiques seront accessibles sur Moodle, qui sera également le principal moyen de communication entre l'enseignant et les étudiants.
English Additional reading material will be suggested in the course plan which describes the deliverables and organisation of the project. All relevant course material, slides and practical information will be available on Moodle, which will also be the main means of communication between the teacher and the students.
Des lectures supplémentaires seront suggérées dans le plan de cours qui décrit les produits livrables et l'organisation du projet. Les supports de cours pertinents, des slides et des informations pratiques seront accessibles sur Moodle, qui sera également le principal moyen de communication entre l'enseignant et les étudiants.
English Additional reading material will be suggested in the course plan which describes the deliverables and organisation of the project. All relevant course material, slides and practical information will be available on Moodle, which will also be the main means of communication between the teacher and the students.
Faculté ou entité
en charge
en charge
INFO