previous up next top index
Précédent : Parallélisation de programmes à objets Remonter : Environnements de programmation Suivant : Environnement de programmation pour le


Transformations de programmes Sisal

Participants : Isabelle Attali, Denis Caromel (projet SLOOP), Romain Guider

Mots-clés : sémantique, programmation fonctionnelle, optimisation

Le langage SISAL (Streams and Iteration in a Single Assignment Language), fortement typé, applicatif et à assignation unique, est particulièrement utilisé sur des architectures multiprocesseurs ou data-flow. Les applications privilégiées sont celles du calcul scientifique où l'on sait exhiber une régularité des données pour l'optimisation et la parallélisation. Malheureusement, il n'existe pas d'autre description précise de ces optimisations que dans le compilateur (appelé OSC - Optimizing Sisal Compiler), ce qui ne facilite ni l'extension du langage ni l'amélioration de la panoplie d'optimisations. Une nouvelle version du langage est en cours de définition pour ajouter des fonctions d'ordre supérieur, du polymorphisme, de la surcharge et une forme limitée d'inférence de type, et nous voulons participer à cet effort en fournissant une base formelle plus sûre.

La version Sisal 1.2 est distribuée depuis 1984 ; le compilateur OSC (Optimizing Sisal Compiler) est reconnu par la communauté pour être particulièrement efficace sur une grande variété d'applications et d'architectures. La version Sisal 2.0 est plus intéressante sur le plan de l'étude des langages car elle inclut des caractéristiques telle que les fonctions d'ordre supérieur, le polymorphisme, la surcharge et l'inférence de type (dans une forme limitée). Il n'existe pas de compilateur pour cette version du langage. La plupart des applications sont des applications scientifiques pour lesquelles on sait exhiber une régularité des données qui permet d'exploiter un ensemble de techniques de parallélisation automatique à des fins d'efficacité. Malheureusement, la définition la plus précise de ces optimisations se trouve être dans le compilateur OSC lui-même, ce qui ne facilite ni les extensions du langage, ni l'ajout de transformations dans le catalogue des optimisations. Deux formats intermédiaires IF1 et IF2 sont utilisés pour l'implantation de la version 1.2 du langage. Le format IF1 est une description textuelle de graphes data-flow qui permet les optimisations de code classiques ; le format IF2 autorise les optimisations liées à la gestion de la mémoire.

Nous avons décrit la sémantique dynamique de Sisal [3], dont les points forts sont la description des expressions multivaluées, des fonctions d'ordre supérieur, des règles de visibilité, des boucles, des tableaux et des séquences. Nous avons ensuite décrit dans [4] le format intermédiaire de représentation de graphes IF1 utilisé par le compilateur et spécifié formellement la traduction de Sisal vers ce format et certaines des optimisations classiques sur ce format présentes dans le compilateur OSC. En utilisant des spécifications formelles et des transformations que l'on pourra prouver, nous espérons ainsi établir la base d'une définition et d'une implantation de compilateurs validés pour la nouvelle version de SISAL.



previous up next top index Précédent : Parallélisation de programmes à objets Suivant : Environnement de programmation pour le Remonter : Environnements de programmation