Projet : SLOOP

previous up next contents
Précédent : Simulation et systèmes à événements Remonter : Résultats nouveaux Suivant : Algorithmique et structures discrètes


Sous-sections


   
Langages à objets et distribution

Mots clés : programmation à objets, concurrence, distribution .

Formalisation de la programmation à objets repartie

La notion de continuation automatique (Cf. section 3.2.1) a été généralisée et formalisée dans un style opérationnel [[34]]. Deux stratégies ont été proposées : la première consiste à ne retourner que des réponses complètes. La seconde, plus asynchrone par l'utilisation de réponses partielles, permet d'éviter les situations d'interblocage. D'autre part, nous avons pu montrer formellement des propriétés du modèle Eiffel// comme l'absence d'objets partagés ou la séquentialité des sous-systèmes [[16]].

Analyse statique pour la distribution

Dans le cadre du langage Java, nous proposons, par des techniques d'interprétation abstraite et des analyses de formes sur la structure du graphe d'objets, un moyen de détecter comment rendre certains objets actifs, et donc de paralléliser certaines activités (Cf. section 3.2.2). Ces techniques peuvent également servir à optimiser la compilation Java en exploitant par exemple des informations sur la durée de vie des variables, ou en supprimant des appels virtuels (inférence de type [ACG98]).

Formalisation et environnement pour Java

Dans le cadre de la programmation concurrente (Cf. section 3.2.1), nous avons apporté de nouvelles fonctionnalités aux outils de mise au point de programmes Java et nous avons défini formellement la gestion des exceptions [[35]].

   
Programmation Parallèle en C++

Dans le cadre de la programmation distribuée (Cf. section 3.2.2), nous avons terminé le développement d'une version du langage C++// construite au dessus de SCHOONER (Cf. 5.3). Cette version nous a permis d'expérimenter une technique originale dans le cadre des langages à objets, de recouvrement calcul-communication lors de l'invocation et l'exécution de services distants. Ce travail est décrit dans un article soumis pour publication [BCFS98].

Parallèlement à la version SCHOONER , C++// a été porté sur la bibliothèque de communication Nexus. Cela nous a permis d'introduire des objets actifs ayant un grain plus fin dans notre modèle, ceux-ci pouvant désormais aussi bien être des processus lourds que des processus légers. De plus, cela devrait nous permettre de profiter des développements effectués autour de Nexus (et de Globus) dans le domaine du «meta-computing», C++// devenant ainsi un outil d'aide au développement de telles applications.

Enfin, une extension a été proposée afin d'autoriser le partage d'objets en lecture entre objets actifs. Ces travaux ont donné lieu à une application de calcul matriciel creux. Il s'agissait de montrer que C++// pouvait être aussi performant que MPI tout en simplifiant la réutilisation du code séquentiel. Ce travail a été effectué en collaboration avec la société Adulis.

Programmation distribuée en Java : Java//

Afin de résoudre le problème de la programmation concurrente, parallèle et distribuée en Java : permettre l'exécution d'une même application sur une architecture multi-processeurs à mémoire partagée aussi bien que sur un réseau de stations de travail, ou encore n'importe quelle combinaison hiérarchique des deux (Cf. section 3.2.2), nous avons développé Java// (prononcer Java parallèle), une bibliothèque 100% Java, qui fournit des threads transparents, des objets distants, des appels asynchrones avec futurs transparents, le tout offrant un fort potentiel de réutilisation et des mécanismes de synchronisation de haut niveau [[39]].

Afin de démontrer la puissance de Java//, nous présentons une application collaborative parallèle et distribuée. Plusieurs utilisateurs peuvent travailler ensemble sur une scène 3D avec des mécanismes d'élection et de synchronisation. L'image de la scène est calculée par un ensemble dynamique de moteurs de rendu utilisant un algorithme de lancé de rayon. Cette application permet de montrer trois aspects de la puissance de Java//: facilité de programmation distribuée, gain de performances à travers une exécution parallèle et facilité de synchronisation [[22]].



previous up next contents
Précédent : Simulation et systèmes à événements Remonter : Résultats nouveaux Suivant : Algorithmique et structures discrètes