Informatique MPI
Tout ce qui précède, auquel on ajoute le début du chapitre de Concurrence et de synchronisation.
Il faut :
- savoir ce qu'est un thread ("sous-programme" qui partage la mémoire du processus qui l'a créé). On ne demande pas de connaître par coeur les fonctions en OCaml ou en C permettant de gérer les thread, elles doivent être rappelées ; mais il faut savoir les utiliser.
- savoir ce qu'est une section critique
- savoir utiliser un ou plusieurs mutex pour protéger des sections critiques, en utilisant le principe de verrouillage/déverrouillage ; la syntaxe des fonctions OCaml ou C utilisées n'est pas à connaître par coeur, mais il faut savoir les utiliser une fois qu'elles sont rappelées.
- connaître l'algorithme de Peterson et l'algorithme de la Boulangerie de Lamport, qui fournissent des implémentations basiques de lock/unlock (même si elles ne sont plus utilisées aujourd'hui)
- connaître les définitions des problèmes suivants qui peuvent survenir lors de l'exécution de thread en parallèles : interblocage, attente active, famine. Ces problèmes peuvent survenir si on fournit une mauvaise implémentation des outils de synchronisation (Peterson/Lamport ont de l'attente active), mais même avec une bonne implémentation de ces outils, leur mauvaise utilisation peut conduire à ces problèmes.
On pourra demander aux élèves d'écrire des morceaux de code simple pour paralléliser des blocs de code, et leur demander de résoudre des problèmes de synchronisation simples (expliquer pourquoi une solution à un problème n'est pas satisfaisante, comment la corriger, etc...). Les sémaphores ont été évoqués trop récemment pour pouvoir être utilisés, on s'abstiendra de donner des exercices utilisant des sémaphores pour l'instant.