• Aucun résultat trouvé

Extension à l’ordonnancement d’acteurs paramétriques

3.3 Ordonnancement d’acteurs flot de données

3.3.2 Extension à l’ordonnancement d’acteurs paramétriques

La section précédente m’a permis de dresser un tour d’horizon des méthodes d’ordon-nancement pour le modèle flot de données statique (SDF). Les travaux développés durant cette thèse visent le modèle SPDF décrit dans la Section 3.2.3. Pour cela, je vais maintenant me concentrer sur les travaux permettant d’ordonnancer un graphe paramétrique.

L’intérêt du modèle SPDF réside dans l’équilibre qu’il propose entre les possibilités d’ana-lyse et le dynamisme introduit par l’utilisation de paramètres. Une des anad’ana-lyses proposées dans l’article de Fradet, Girault et Poplavko [Fradet 12] est la génération d’ordonnancement quasi-statique pour un graphe SPDF. Un ordonnancement quasi-statique est un ordonnan-cement réalisé essentiellement statiquement, il laisse uniquement l’ordonnanordonnan-cement non décidable à la compilation être réalisé à l’exécution. Dans le cas d’un graphe paramétrique, le nombre de répétitions d’un acteur peut être paramétrique. La Définition 3 formalise la gram-maire d’un ordonnancement quasi-statique. Dans cette gramgram-maire, v représente un l’acteur à exécuter, setv(p) la production d’un paramètre p par l’acteur v, getv(p) la consommation

3.3. Ordonnancement d’acteurs flot de données

d’un paramètre p par l’acteur v.

Définition 3 Un ordonnancement quasi-statique d’un graphe contenant les acteurs v1. . . vn

est défini comme :

sched ::= v¯¯setv(p)¯¯getv(p)¯¯sched; sched¯¯¡sched¢p où p ∈ F et v ∈ V

L’algorithme proposé par Fradet, Girault et Poplavko permet de générer un ordonnance-ment quasi-statique par acteur, ceci dans le cas général où le paramètre peut changer plusieurs fois dans la même itération et avec plusieurs paramètres imbriqués. Si l’on reprend l’exemple de la Figure 3.5, nous obtenons les ordonnancements suivants pour chacun des acteurs : ¡ A;set(p)¢,³get(p);¡Bp; set(q)¢3´

et³get(p);¡get(q);C ¢3´. Nous omettons de préciser l’acteur qui produit ou consomme le paramètre en l’absence d’ambiguïté.

Cet ordonnancement permet de fixer la synchronisation des paramètres grâce à des FIFO, de manière similaire aux données. Cependant, cette méthode produit un ordonnancement par acteur, ce qui n’est pas satisfaisant dans l’objectif de partage de ressources. L’ordonnancement de plusieurs acteurs dans un seul ordonnancement quasi-statique est rendu difficile par le changement de valeur des paramètres au cours d’une itération. Les travaux de Bhattacha-ryya [Bhattacharya 01] se heurtent à un problème similaire avec le modèle PSDF. Dans celui-ci l’ordonnancement quasi-statique ne peut pas être entièrement déterminé à la compilation. Je limite donc le changement de valeur des paramètres à la fin d’une itération pour permettre la génération d’ordonnancement quasi-statique.

La condition d’un changement de valeur par itération permet de réutiliser la méthode du tri topologique pour créer un ordonnancement séquentiel. En effet, tous les paramètres sont fixés durant l’itération, le graphe peut être analysé avec les valeurs symboliques. Si le graphe possède un cycle dirigé, il faut appliquer la méthode vue pour les graphes statiques dans la section précédente pour supprimer ce cycle. Reprenons l’exemple de la Figure 3.5 en fixant le changement de valeur du paramètre q une fois par itération, soit set q[3p]. Nous obtenons alors l’ordonnancement global¡ A;set(p);B3p; set(q);C3¢. Dans celui-ci, je suppose que la valeur d’un paramètre produit par un acteur, set(p), est réutilisée par les acteurs suivants dans l’ordonnancement.

La question de l’ordonnancement multicœurs avec partage de ressources se pose de la même manière que pour le flot de données statique. La solution proposée précédemment pour partager un ordonnancement unique sur plusieurs cœurs peut être étendue à l’ordonnan-cement paramétrique. En effet, la production et la consommation de paramètre sont associées à un acteur. Nous pouvons donc ordonner cette production ou consommation sur l’unité de calcul associée à l’acteur concerné, selon l’ordre global. La production et consommation de données et de paramètres permettent la synchronisation entre les unités de calcul.

Mon approche de l’ordonnancement de graphe SPDF se distingue par l’utilisation d’un or-donnancement quasi-statique. Cette approche ne permet pas d’optimiser l’oror-donnancement en fonction de l’architecture, mais permet néanmoins de grandement réduire l’ordonnance-ment dynamique. Nous verrons dans le Chapitre 6 sur les expéril’ordonnance-mentations que le contrôle de l’application dans ses parties dynamiques est un élément critique sur la plateforme Ma-gali. Cela justifie cette approche utilisée lors de la génération du code de contrôle dans le Chapitre 5.

Les travaux sur le modèle BPDF [Bebelis 13a] utilisent un ordonnancement quasi-statique par acteur. L’ordonnancement global sur une plateforme multicœurs est réalisé à l’exécution selon une méthode d’ordonnancement par créneau. À chaque créneau, tous les acteurs qui disposent de suffisamment de données sont ordonnancés sur les unités de calcul disponibles. Durant l’exécution du créneau, un nouvel ordonnancement est généré en se basant sur la connaissance des productions et consommations des acteurs.

Les ordonnancements présentés jusqu’à maintenant se sont basés sur le modèle flot de données, modèle qui suppose la consommation et la production de l’ensemble des données par un acteur de manière atomique. Dans la prochaine section, je relâche cette hypothèse afin d’analyser plus finement la consommation mémoire d’une application flot de données.

3.4 Micro-ordonnancement de communications flot de données

Dans cette section, je présente un raffinement de l’ordonnancement des communica-tions dans un graphe flot de données développé durant cette thèse, et que je nomme micro-ordonnancement. Je commencerai par décrire les motivations qui ont poussé à développer ce nouveau paradigme dans la Section 3.4.1. Je le définirai formellement dans la Section 3.4.2. Je décrirai ensuite son application au contrôle des tailles mémoires dans un graphe flot de données dans la Section 3.4.3.

3.4.1 Motivation

Un grand nombre d’ordonnancements présentés dans la Section 3.3 cherchent à minimiser la consommation mémoire ou le temps d’exécution sur des plateformes multicœurs. Pour cela, ces ordonnancements reposent sur la représentation flot de données pour déterminer une exécution parallèle des acteurs qui minimise un critère donné. Cependant, la représentation flot de données abstrait l’exécution d’un acteur. Elle modélise toutes les consommations et les productions de données d’un acteur comme une seule opération atomique. Cette abstraction à l’intérêt de permettre des analyses à haut niveau comme vu précédemment, mais elle présente toutefois des limites pour l’analyse du comportement des acteurs.

A B 1024 C 1024 1024 1024 u0 u1 D set p[1] 1 p (a) Application u0 u1 (b) Architecture

FIGURE3.7 – Exemple d’application flot de données placée sur une plateforme à deux cœurs. Pour comprendre ces limites, je vous propose de nous plonger dans l’exemple de la Figure 3.7. J’ajoute la notion d’architecture et de placement pour illustrer cet exemple, tel que défini dans la Définition 4. Dans cet exemple, le graphe flot de données composé des acteurs V = {A,B,C,D} est placé sur une architecture U = {u0, u1} selon le placement m(A, B ) = u0et