thesis

Expression et optimisation des réorganisations de données dans du parallélisme de flots

Defense date:

Jan. 1, 2010

Edit

Disciplines:

Directors:

Abstract EN:

Embedded systems designers are moving to multi-cores to increase the performance of their applications. Yet multi-core systems are difficult to program. One hard problem is expressing and optimizing data reorganizations. In this thesis we would like to propose a compilation chain that: 1) uses a simple high-level syntax to express the data reorganization in a parallel application; 2) ensures the deterministic execution of the program (critical in an embedded context); 3) optimizes and adapts the programs to the target's constraints. To address point 1) we propose a high-level language, SLICES, describing data reorganizations through multidimensional slicings. To address point 2) we show that it is possible to compile SLICES to a data-flow language, SJD, that is built upon the Cyclostatic Data-Flow formalism and therefore ensures determinism. To address point 3) we define a set of transformations that preserve the semantics of SJD programs. We show that a subset of these transformations generates a finite space of equivalent programs. We show that this space can be efficiently explored with an heuristic to select the program variant more fit to the target's constraints. Finally we evaluate this method on two classic problems: reducing memory and reducing communication costs in a parallel application.

Abstract FR:

Pour permettre une plus grande capacité de calcul, les concepteurs de systèmes embarqués se tournent aujourd'hui vers les multicœurs. Malheureusement, ces systèmes sont difficiles à programmer. Un des problèmes durs est l'expression et l'optimisation des réorganisations de données. Dans cette thèse nous souhaitons proposer une chaîne de compilation qui: 1) utilise une syntaxe simple et haut-niveau pour exprimer le découpage et la réorganisation des données d'un programme parallèle; 2) garantisse une exécution déterministe du programme (critique dans le cadre des systèmes embarqués); 3) optimise et adapte les programmes aux contraintes de l'architecture. Pour répondre au point 1) nous proposons un langage haut-niveau, SLICES, qui décrit les réorganisation de données à travers des découpages multidimensionnels. Pour répondre au point 2) nous montrons qu'il est possible de compiler SLICES vers un langage de flots de données, SJD, qui s'inscrit dans le modèle Cyclostatic Data-Flow et donc admet une exécution déterministe. Pour répondre au point 3) nous définissons un ensemble de transformations qui préservent la sémantique des programmes SJD. Nous montrons qu'il existe un sous-ensemble de ces transformations qui génère un espace de programmes équivalents fini. Nous proposons une heuristique pour explorer cet espace de manière à choisir la variante la plus adaptée à notre architecture. Enfin nous évaluons cette méthode sur deux problèmes classiques: la réduction de la mémoire consommée et la réduction du coût des communications d'une application parallèle.