II. Méthodologies Statique et Dynamique de Conception et Synthèse de Systèmes sur Puces
II.4. Méthodologies statiques de partitionnement logiciel/matériel
Plusieurs méthodologies de conception de systèmes sur puce matériel/logiciel ont été proposées dans la littérature. Ces méthodologies, représentées essentiellement par des algorithmes d’exploration, s’intéressent essentiellement à la phase de partitionnement logiciel/matériel au niveau système. Le problème de partitionnement peut se décrire comme la
17 aSoc : adaptive System on Chip
18 DART : Dynamically Reconfigurable Architecture dealing with next Generation Telecommunications Constraints
recherche d’une répartition des fonctionnalités d’une spécification sur une architecture hétérogène cible, cette répartition étant déterminée de manière à garantir certaines performances et d’optimiser un ou plusieurs critères. Les méthodologies de partitionnement sont basées sur plusieurs heuristiques et techniques d’optimisation. Ils se différencient par différents objectifs à optimiser notamment les performances, l’utilisation des ressources et la consommation en énergie du design. Le tableau II.1 regroupe plusieurs algorithmes de partitionnement automatique ainsi que leurs caractéristiques.
Table. II. 1 : Algorithmes de partitionnement logiciel/ matériel
LANGAGE DE SPECIFICATION TECHNIQUE DE DECOUPAGE ARCHITECTURE VALIDATION LOGICIELLE/MATERIELLE Ptolemy FDS (Flot de Données Synchrone) Découpage automatique orienté logiciel ; optimisation du temps global d’exécution
Mono processeur Processus légers communicant à travers des portes (sockets) ; communication synchrone Cosyma Cx (C parallèle) Découpage
automatique orienté logiciel, basé sur des estimations
dynamiques de performance
Mono processeur Processus communicant à travers le modèle CSP ; utilisation de portes (Socket)
SpecSyn SpecChart Découpage automatique basé sur la technique de groupement
Multi processeur Processus communicant à travers le modèle CSP Co-Saw CSP Découpage interactif
basé sur la technique de groupement
Mono processeur Sockets du système UNIX Corba VHDL Découpage non
automatique orienté matériel
Mono processeur Simulation dirigée au VHDL. Le logiciel est décrit en langage assembleur Vulcan II HardwareC Découpage
automatique orienté matériel
Mono processeur Co-simulation au niveau assembleur ; communication dirigée par des évènements discrets
Rassp VHDL Découpage non automatique orienté matériel
Mono processeur Co-simulation à base de modèles détaillés des
processeurs et ASIC au niveau des portes
Lycos VHDL ou C Découpage manuel Mono processeur Processus communicant Tosca SpeedChart Découpage manuel Mono processeur Validation par prototypage
physique
Codes SDL, StateChart Découpage manuel Mono processeur Validation par prototypage physique
MCSE Formalisme
MSCE Découpage interactif base sur des estimations de performance
Multi processeur Co-simulation au niveau modèle suivie par simulation VHDL et C++
CoWare POPE/SystemC Synthèse des interfaces et raffinement des processeurs
Multi processeur Validation par prototypage physique
Nous allons détailler dans les sections suivantes quelques algorithmes de partitionnement élaborés dans la littérature.
II.4.1. Partitionnement manuel
Les premiers travaux de partitionnement proposent des environnements manuels de conception utilisés généralement pour la co-simulation. On peut citer par exemple l’environnement Coware [14] qui propose une solution de partitionnement représentée par la figure II.5.
Fig. II. 5 : Partitionnement manuel : Coware
Le flot de la figure II.5 expose la méthodologie de partitionnement de Coware. Cette méthodologie est basée sur la spécification des processus concurrents codés en C/C++ et sur une architecture fixée par le concepteur. Le flot génère la partie logicielle codée en C, la partie matérielle en VHDL et les interfaces entre les deux parties. On distingue plusieurs autres flots de partitionnement automatique appliqués sur des applications orientées contrôle/commande.
II.4.2. L’algorithme de partitionnement GCLP
Un algorithme de partitionnement classique commence généralement par une étape de translation qui traduit la description fonctionnelle de l’application vers une description formelle sous la forme d’un graphe acyclique de tâches appelé DAG20. Un DAG est composé d’un ensemble de nœuds qui caractérisent un traitement spécifique. L’interconnexion entre les nœuds du DAG est assurée par des arcs qui représentent la dépendance de données existant entre les différents nœuds. L’application d’un algorithme de partitionnement sur ce graphe de tâches consiste à affecter l’exécution de chaque tâche à un accélérateur matériel ou à un processeur. L’algorithme de partitionnement doit respecter quelques critères liés à la performance et au coût d’implémentation du design.
L’algorithme GCLP21 [41] optimise deux fonctions objectives contradictoires. Le GCLP optimise la performance du design tout en minimisant l’allocation de ressources. Pour une telle optimisation, l’algorithme définit deux métriques qui sont le GC (Global Criticality), qui mesure une estimation de la valeur de la criticité globale du temps par rapport à la phase locale LP (Local Phase) de l’exécution de l’application. A chaque étape, le GCLP choisit son objectif adéquat en fonction de GC et LP. La valeur de GC est comparée à un seuil pour dire si le temps est critique ou non. La figure II.6 représente le fonctionnement global du GCLP.
20 DAG : Directed Acyclic Graph
21 GCLP : Global Criticality / Local Phase
Spécification
Processus concurrents C/C++
Simulation fonctionnelle
Partitionnement
Manuel Connexions point à point Architecture
Code
C VHDLCode
Synthèse
Fig. II. 6 : Organigramme de l’algorithme GCLP
Initialement, tous les nœuds (Ninit) sont affectés à la partie software. A chaque période,
l’ordonnancement des différentes tâches est connu. Si on ne peut pas affecter toutes les tâches à la partie software (dépassement de temps d’exécution pour cette phase locale), quelques ensembles de traitement désignés par des nœuds différents migrent vers la partie matérielle (Np). Le nombre de nœuds qui ont migrés de la partie logicielle vers la partie matérielle
détermine la métrique GC. Une importante valeur de GC implique que cette période d’exécution de l’application est particulièrement critique.
II.4.3. L’algorithme de partitionnement MAGELLAN
L’entrée de l’algorithme de MAGELLAN [42] est une spécification de l’application sous la forme de graphes hiérarchiques de contrôle du flot de données et de tâches. Le graphe de tâches est constitué d’entités ports, de canaux de communication et de tâches. MAGELLAN supporte 4 types différents de tâches qui sont ‘leaf task’, ‘case task’, ‘loop task’ et ‘hierarchical task’. L’algorithme utilise d’une manière itérative un répartiteur pour le partitionnement et un ordonnanceur pour l’ordonnancement des tâches afin de déterminer l’architecture finale du design. A partir de la spécification de l’application, MAGELLAN génère en premier lieu, une solution initiale d’ordonnancement des différentes tâches. En deuxième lieu, l’algorithme optimise la solution en utilisant différentes techniques de compilation comme le ‘loop unrolling’ (parallélisme au niveau des boucles) et l’ordonnancement spéculatif (dupliquer les blocs conditionnels). Le répartiteur tente ensuite d’améliorer cette solution en changeant la composition de l’architecture initiale en effectuant des permutations (appelées aussi des mouvements). Le répartiteur évalue l’architecture modifiée en invoquant l’ordonnanceur. L’exécution de MAGELLAN se termine lorsque le répartiteur est incapable d’effectuer un nouveau mouvement. L’organigramme de l’algorithme de MAGELLAN est présenté par la figure II.7.
Calculer GC
Ninit=N, Np={}
Sélection d’un nœud i i Calculer∆ Sélection de l’objectif
Sélection projection Mi Trouver le temps de démarrage ti
Np={i}, Ninit= Ninit\{i}
Ninit={} no
Fig. II. 7 : Organigramme de l’algorithme MAGELLAN
II.4.4. L’algorithme de partitionnement COSYN
L’algorithme COSYN [43] était le premier qui a pris en compte l’optimisation de la consommation d’énergie. Cet algorithme commence par effectuer une analyse du graphe de tâches et des contraintes système/tâche. La spécification d’entrée décrite en C est ensuite décomposée en blocs de traitement de base. Cette représentation est régénérée en utilisant un réseau de pétri coloré. En démarrant d’une description totalement software, COSYN déplace itérativement des blocs de traitement vers la partie matérielle en tenant compte de leurs performances et de la dépendance entre eux. Les performances de traitement sur la partie matérielle ou logicielle sont évaluées grâce à des estimateurs. La figure II.8 représente l’organigramme de fonctionnement de l’algorithme COSYN.
Graphe de contrôle de données hiérarchique
Spécification de l’architecture
MAGELLAN : Integrated Multiway Partitioning HW design espace exploration and scheduling.
Ordonnancement pour obtenir une solution initiale
Répartition des tâches par un mouvement
Ordonnancement des tâches pour évaluer l’effet du mouvement
Tous les mouvements sont explorés ?
Yes No
Un ou plusieurs mouvements qui ont amélioré la performance ?
Yes
No
Implémenter le mouvement qui engendre la meilleure
amélioration Ordonnancement
pour obtenir une nouvelle solution
Fig. II. 8 : Organigramme de l’algorithme COSYN