Sujet : compilation d'un langage de programmation parallèle type machine chimique


Encadrant

Phil. REITZ.


Objectif

Le TER consiste à écrire un compilateur pour un langage de programmation assez rudimentaire permettant de contrôler une machine abstraite parallèle s'inspirant de la ChAM (Chemical Abstract Machine). Le langage de programmation s'inspire quant à lui du langage Gamma.

Définition de la machine abstraite et de son langage de programmation

Description des états de la machine abstraite

A chaque instant t, l'état de la mémoire de la machine est défini par un multi-ensemble de termes (plusieurs occurences d'un même terme sont possibles).

Un terme s'écrit sous la forme rel[arg1, arg2,..., argn] , où rel et argi, quel que soit i, sont des littéraux constants. Un littéral constant est au choix :

L'entier n est appelé l'arité du terme. Si n=0, le terme rel[] s'écrira simplement rel.

Description d'un programme

Un programme pour cette machine est un ensemble de règles de réaction, où une règle de réaction s'écrit :

when c1 c2 ... cn
  if t
then a1 a2 ... am
où :

Sémantique d'un programme

Soit une règle de réaction de la forme :

when c1 c2 ... cn
  if t
then a1 a2 ... am

Une telle règle est dite déclenchable si toutes les conditions suivantes sont satisfaites :

Le multi-ensemble des termes qui rendent une règle déclenchable est appelé support de déclenchement (plus simplement support) de la règle.

Si une règle est déclenchable, la déclencher, c'est :

Exécuter un programme, c'est déclencher, de façon non-déterministe, toute règle déclenchable ; plusieurs règles peuvent être déclenchées en parallèle si leurs supports sont disjoints. Si aucune règle n'est déclenchable, le programme se termine.

Extensions utiles

Le langage de programmation, tel qu'il est spécifié ci-dessus, suffit à décrire n'importe quelle fonction calculable. Néanmoins, certaines extensions au langage, bien que n'apportant rien quant à la puissance de calcul, facilitent l'écriture de programmes.

Les deux extensions suivantes se révèlent très utiles :

D'autres extensions peuvent être imaginées :


Bibliographie

G. Berry & G. Boudol : The Chemical Abstract Machine.
Theoretical Computer Science. Vol 96, N° 1, p217-248, avril 1992 (cham.ps).

J.P. Banâtre & D. Le Métayer : Gamma and the chemical reaction model : ten years after.
in Coordination programming : mechanisms, models and semantics, IC Press, 1996 (gamma10.ps).


Annexe : exemples

Exemple 1 : maximum d'un multi-ensemble d'entiers

La mémoire contient au départ des entiers (termes d'arité nulle). Lorsque le programme suivant s'arrête, la mémoire ne contient qu'un seul entier : le plus grand de ceux qui étaient présents au départ.

when X Y if X<=Y then Y

Exemple 2 : minimum et maximum d'un multi-ensemble d'entiers

La mémoire contient au départ des entiers (termes d'arité nulle). Lorsque le programme suivant s'arrête, la mémoire ne contient que deux termes :

when X then min[X] max[X]
when min[X] min[Y] if X<=Y then min[X]
when max[X] max[Y] if X<=Y then max[Y]

Exemple 3 : tri d'un tableau

La mémoire contient au départ des termes de la forme at[i, v, t] signifiant : la valeur v est stockée à l'index i du tableau t. Lorsque le programme suivant s'arrête, le tableau T est trié.
when at[I, X, T] at[J, Y, T]
  if X<Y and J>I
then at[I, Y, T] at[J, X, T] 

Exemple 4 : histogramme d'un multi-ensemble d'entiers

La mémoire contient au départ des entiers. Lorsque le programme suivant s'arrête, la mémoire contient des termes de la forme occ[k, n] s'interprétant comme : l'entier k était présent n fois.

when X then occ[X, 1]
when occ[X, N] occ[X, M] then occ[X, N+M]