• Aucun résultat trouvé

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

II.5. Méthodologies statiques de synthèse d’architectures de