SCREP

Un outil pour produire automatiquement des systèmes GALS
à partir de circuits synchrones


english   An English version is also available   english

Table des matières


Introduction

Les systèmes réactifs sont des systèmes informatiques dont le rôle est de réagir continûment à leur environnement, à une vitesse imposée par celui-ci. Les langages synchrones ont été inventés pour faciliter la programmation des systèmes réactifs. Les principaux langages synchrones sont Esterel, Lustre, Argos et Signal.

Beaucoup de systèmes réactifs doivent être réparti sur plusieurs sites de calcul, pour des raisons diverses : amélioration des performances, localisation des capteurs et actionneurs, tolérance aux pannes ... L'outil screp répartit automatiquement les programmes synchrones, en fonction de directives fournies par l'utilisateur.


Description of the screp tool

Screp est fondé sur la méthode de répartition du code objet. Cela consiste à compiler le programme source en un programme objet centralisé, et ensuite à répartir ce programme centralisé en autant de programmes qu'il y a de sites de calcul, de telle sorte que chaque site n'effectue que les calculs qui lui sont propres. Aussi screp utilise le format interne SC du compilateur Esterel. Sans entrer dans les détails, un programme SC est un circuit booléen synchrone couplé à une mémoire finie pour les calculs. Screp prend en entrée :

Les directives de répartition consistent en une partition de l'ensemble des entrées/sorties du programme en autant de sous-ensembles qu'il y a de sites de calcul. Ceci permet d'attribuer un site de calcul unique à chaque entrée/sortie. Concrètement, le fichier des directives de répartition contient une table de sites, avec la même syntaxe que les autres tables SC :

site_part        :   /* empty */
                 |   'sites:' integer site_table 'end:'
                 ;

site_table       :   site_table site_definition
                 ;

site_definition  :   integer ':' identifier '(' signal_list ')'
                 ;

Ici, signal_list est une liste de noms d'entrées/sorties du programme SC.

Quelques mots sur les signaux de type local et exception. Ils proviennent de programmes Esterel et expriment des synchronisations entre des modules en parallèle, des constructions trap/exit ... Cependant, au niveau du code SC, toutes ces synchronisations sont exprimées directement pas la structure de contrôle de l'automate : les signaux de type local et exception sont traduits en transitions par le compilateur Esterel. Par conséquent, il ne devrait jamais y avoir d'action output ou present impliquant des signaux de type local ou exception. C'est pourquoi screp décide arbitrairement de localiser tous les signaux de type local ou exception sur le site 0. Notons que comme ces signaux n'ont pas de nom, il ne peuvent apparaître dans aucune liste signal_list.

Les communications ont lieu par l'intermédiaire d'un réseau complet de files d'attente FIFO. Deux primitives de communication sont utilisées :

Screp produit un programme SC pour chaque site de calcul spécifié dans le fichier de directives de répartition. Chaque programme SC contient les instructions de communication nécessaires aux références aux variables non locales. Par exemple, la commande :

  screp foo.sc

produit deux fichiers foo.2.0.sc et foo.2.1.sc si le fichier foo.rep spécifie une répartition vers deux sites de calcul. Chaque fichier produit par screp peut ensuite être compilé par le compilateur Esterel.


Options

Les options sont les suivantes :

-h Imprime le message d'aide.
-version Imprime le numéro de version de screp.
-info Imprime toutes les informations à propos de screp.

Comment obtenir screp

L'outil screp est disponible pour les architectures Unix :

La distribution de screp contient quatre répertoires :

Bonne répartition avec screp !


Contributions


Articles



Dernière modification : 7 août 2002