HirondML2 : Migration de calcul en Objective Caml
Emmanuel Chailloux |
Présentation générale
La conception de programmes répartis pose des difficultés en matière
de concurrence, de sérialisation de données et de synchronisation.
Bien que la nature de ces problèmes soit bien distincte, les outils
théoriques <<classiques>> disponibles pour les résoudre se révèlent
inadaptés lorsqu'ils intéragissent dans le cadre d'une utilisations
répartie. Le projet
HirondML consiste en la construction d'un modèle
et d'une implantation basés sur d'autres outils et en la démonstration
de leur pertinences en terme d'expressivité et de sûreté. La sûreté
d'un programme réparti sera considérée comme effective si son
éxécution ne provoque pas d'erreur de type et que chaque << unité de
calcul >> en son sein se trouve dans un état cohérent.
Pour cela on se propose de développer un système offrant un mécanisme
de migration de calculs, utilisant les
fair
threads pour la
synchronisation de threads, sûr et efficace pour les
applications réparties et les calculs parallèles pour O'Caml.
Objective Caml
Objective Caml, dévéloppé à l'Inria (
O'Caml ), est l'un des dialectes ML les plus connus. Ses qualités d'expressivité,
de sûreté et d'efficacité sont appréciées par une communauté de programmeurs
en nombre croissant. Pour améliorer sa diffusion on cherche à le doter
d'un environneement de développement intégré portable sur les plate-formes
de développement classiques (Windows, macosx, Linux).
Fair threads
Les fair
threads[1] apportent un modèle coopératif simple et
riche pour l'écriture d'applications concurrentes. Le modèle des fair
threads est composé de schedulers et de threads. Chaque thread est
attaché à un scheduler et coopère avec celui-ci. Dans tout scheduler
un unique thread est actif jusqu'au prochain point de coopération.
Lorsque un thread coopère avec son scheduler, le scheduler active le
prochain thread. Une synchronisation est possible par la communication
d'événements dans l'instant de calcul à la manière de la programmation
réactive.
Les fair threads sont implantés en C, Java et Scheme
(suivre le
lien). Une version
expérimentale et simplifiée a été conçue pour Objective Caml
(suivre le
lien )
pour être utilisée dans la bibliothèque hirondML de migration de calculs.
HirondML
Une des principales difficultés dans la migration de calculs provient de la synchronisation en cas de partage de donnéees dans l'environnement de calcul de la destination. Ce travail est effectué en collaboration avec Julien Verlaguet est en cours de finition
Le système HirondML [3] utilise des fair
threads coopératifs à la Boussinot, implantés en Objective Caml, pour
réaliser la synchronisation quand un calcul arrive à
destination. L'environnement local est copié lors de la migration,
mais l'environnement global (qui doit être commun) est spécifique à
chaque instance de programme. Ce choix permet d'obtenir des
performances raisonables, ou du moins contrôlables par le programmeur.
HirondML apporte un mécanisme de
migration de code entre même version d'exécutable de programmes
Objective Caml. Lors de la migration d'un calcul d'un exécutable vers
un autre, HirondML copie la pile et une partie du tas correspondant
aux variables locales utiles pour la poursuite du calcul. Les
variables globales sont reliées à nouveau lors de l'arrivée du point
de calcul. Pour cela il est nécessaire de communiquer les points de
calcul entre exemplaires du même programme ayant déjà évalué toutes
les variables globales du programe. On obtient ainsi la possibilité
d'utiliser une copie d'une partie de
l'environnement et de se relier à la partie restante.
L'implantation expérimentale utilise l'analyse de détection des
variables nécessaires à un calcul du compilateur natif d'Objective
Caml, une version simplifiée des fair threads pour gérer les départs
et les arrivées de point de calcul, une gestion de la pile et du tas
permettant d'embarquer la partie utile, et un système de déploiement
sur un réseau local.
Objectifs du stage
Le premier objectif de ce stage est de réaliser une bibliothèque
complète et sémantiquement correcte des Fair threads [1],
[2] pour Objective
Caml. Il est néanmoins possible d'utiliser le prototype existant
utilisé dans HirondML1.
Le deuxième objectif est d'écrire une sémantique pour la migration de
points de calcul en HirondML, en précisant les notions de capture de
l'environnement local et de liaison de l'environnement global.
Le troisième objectif est de réaliser une implantation respectant
cette sémantique qui utilise la nouvelle bibliothèque de Fair Threads.
Une fois ces trois points atteints, on cherchera à étendre le système
pour traiter cette migration entre programmes différents. On
s'interessera alors au nommage de l'environenment global et au
chargement dynamique de modules, principalement du point de vue des
types. La lecture des articles sur le langage
Acute
[4] permet d'apprécier les problèmes posés.
Profil recherché
Le volume de travail de ce stage est
évalué entre 4 et 6 mois pour un étudiant de M2 qui devra pouvoir allier
connaissances théoriques (avoir suivi un cours de sémantique et si
possible un cours sur la concurrence) et pratiques (connaissances des
langages Objective Caml et C).
Contact
Emmanuel Chailloux
Bureau 740
Equipe SPIRAL - LIP6
Université Paris 6
104 avenue du président Kennedy
75016 Paris
mél : Emmanuel.Chailloux@lip6.fr
web : http://www-spiral.lip6.fr/~chaillou
Références
- [1]
-
Boussinot (F.). –
Fair Threads: mixing cooperative and preemptibe threads in C.
Inria research report, RR-5039 –
Décembre 2003.
- [2]
-
Serrano (M.), Boussinot (F.) et Serpette (B.) –
Scheme Fair Threads – In :
6th sigplan International Conference on Principles and Practice of Declarative Programming (PPDP). –
Août. 2004.
- [3]
-
Chailloux (E.) et Verlaguet (J.). –
Hirondml : Fair threads migrations for objective caml. In :
Third Workshop on High-Level Parallel Programming and Applications. –
Juillet 2005.
- [4]
- Peter Sewell, James J. Leifer, Keith Wansbrough,
Francesco Zappa Nardelli, Mair Allen-Williams, Pierre Habouzit,
Viktor Vafeiadis.
Acute: high-level
programming language design for distributed computation. In : ICFP 2005
Ce document a été traduit de LATEX par HEVEA