Parallélisme synchrone
Année 2024–2025

Cours 2-23-1 du MPRI

Début des cours: Mardi 17 septembre 2024, 8h45 - 11h45, Univ. Paris Diderot, Bat. Sophie Germain, salle 1002.

Responsable du cours: Marc Pouzet

Plan du cours pour 2024–2025:

Pour toute question sur le cours, ne pas hésiter à nous contacter par mail (Marc.Pouzet@ens.fr, Timothy.Bourke@inria.fr). Nous sommes situés dans les locaux de l’équipe INRIA/DI PARKAS, au 1er sous-sol du bâtiment Rataud, à l’ENS.

Il est possible de faire un stage dans l’équipe PARKAS en printemps 2025 (mi-mars/fin août). Passez discuter avec nous!

Objectifs

Les langages synchrones permettent de programmer des systèmes réactifs embarqués à la fois très complexes et très sûrs. Ils rencontrent un grand succès dans divers domaines industriels, pour la programmation du logiciel de controle/commande dans les avions, les trains, les centrales nucléaires, etc. Le système de commande de vol des Airbus, par exemple, est développé avec l’outil SCADE issu du langage synchrone Lustre.

Ils sont fondés sur le modèle du parallélisme synchrone qui introduit une notion de temps logique dans les programmes et donne la possibilité d’écrire des programmes parallèles déterministes. Le compilateur d’un langage synchrone garantit des propriété de sûreté importantes pour le logiciel critique: exécution déterministe du code, absence de blocage (deadlock), génération de code séquentiel s’exécutant en temps et mémoire bornés, génération de code parallèle, etc.

Les langages ont évolué pour traiter des applications et domaines nouveaux: calcul vidéo intensif (TVHD, radars); grandes simulations (réseaux électriques, réseaux de capteurs, interlocking); systèmes de criticité mixte (automobile); combinaison du temps discret et du temps continu. Et les principes des langages synchrones ont étés intégrés dans des langages généralistes (e.g., ReactiveC, SugarCubes en Java, ReactiveML, FRP en Haskell).

Le cours présente les concepts fondamentaux des langages synchrones, leurs fondements sémantiques et logiques, les techniques de compilation vers du logiciel et des circuits, leur vérification formelle (par model-checking) et des travaux de recherche récents. Le cours montre les liens avec les langages fonctionnels.

Une partie du cours est consacrée aux travaux récents sur la sémantique et l’implémentation des langages pour modéliser des systèmes hybrides combinant du temps discret et du temps continu (modélisation de l’environnement physique ou encore l’interface analogique/discret dans un circuit électronique). Le cours montre comment étendre de manière conservatrice un langage synchrone avec du temps continu.

Introduction au domaine avec les vidéos de Gérard Berry sur les systèmes embarqués; Jean Vuillemin sur les circuits synchrones; Nicolas Halbwachs sur Lustre; Marc Pouzet sur les langages de programmation des systèmes hybrides à temps discret/continu au Collège de France.

Notes de cours

Toutes les notes sont en anglais (course notes are in English. If not, send me a mail).

17 septembreCours 1T. BourkeIntroduction à la programmation synchrone pour les systèmes embarqués: slides et exercises.
  Synchronous Programming of Reactive Systems”, par Nicolas Halbwachs (sections 1, 4.2, 6.2 et 8.2)
24 septembreCours 2T. BourkeLes tableaux de Lustre (slides)
1er octobrepas de cours
8 octobreCours 3T. Bourke Vérification par model checking avec un solveur SMT (slides, exercises).
15 octobreCours 4T. BourkeVélus: un compilateur Lustre vérifié dans Coq: slides.
22 octobreCours 5T. Bourke et M. PouzetOrdonnancement statique modulaire (OSS)
29 octobreCours 6M. PouzetSémantique transparents; notes de cours (longues);
5 novembreCours 7M. PouzetSémantique opérationnelle et typages. Sémantique coitérative; sémantique des structures de controle, e.g., automates.
12 novembreCours 8M. PouzetAnalyses statiques par typage Calcul d’horloges a la ML; analyse de causalité par typage.
19 novembrePas de cours  
26 novembreCours 9M. PouzetLangages de modélisation de systèmes hybrides.
3 décembreExamen  Examens anciens: Sujet 2016-2017, Sujet 2023-2024.
TP1  Le compilateur “mini-lustre”: mini-lustre.pdf, mini-lustre.tgz et slides.pdf. Le corrigé.
TP2  

Sujets de stages

Exercises

Une petite liste d’exercises (anciens) de programmation Lustre/Esterel/Lucid Synchrone.

Documents à lire

Ci-dessous une liste d’articles a lire.

Logiciel

Travail personnel:

Cette année, nous vous proposons plusieurs projets de programmation. L’un consiste à écrire un compilateur vers du code séquentiel (C ou Rust) de Lustre, le second, à développer un model-checker par la technique de k-induction. Une troisième idée est l’écriture, en Coq (ou en Lean) d’un interprète du noyau du langage Zelus à partir de ce qui a été présenté en cours et mis en oeuvre en OCaml (https://github.com/marcpouzet/zrun). Pour ceux qui suivent le cours d’interprétation abstraite, une variante de ce projet est l’écriture d’un interprète abstrait. Nous vous conseillons de le faire alors à deux pour pouvoir tester plusieurs domaines abstraits.

Pour tous ces projets, n’hésitez pas à copier/adapter tout ou partie des code sources OCaml décrivant des sémantiques et/ou interprètes et/ou compilateurs qui vous sont montrés, à condition d’indiquer ce que vous avez utilisé.

A rendre au plus tard 5 janvier 2025. Le sujet de compilation et le sujet de model-checker avec le code associé. Nous organiserons une soutenance de 30 minutes par projet dans la semaine du 16 décembre.

Ces projets sont sans limite:


Ce document a été traduit de LATEX par HEVEA