• Aucun résultat trouvé

2.3 modèles de composants pour le calcul à haute performance

2.3.1 Composants parallèles

Une première fonctionnalité dédiée au calcul à haute performance consiste en un

sup-port de composants parallèles qui permettent le développement d’applications SPMD. Les

instances de composants parallèles sont formées d’un ensemble de processus qui

s’exé-cutent en parallèle en communiquant par passage de message comme présenté en 2.1.2.

Le nombre de processus à utiliser pour chaque instance de composant parallèle et leur

placement sont des choix fortement dépendant des ressources d’exécution. Similairement,

le choix des algorithmes utilisés pour les opérations de communication collective entre

processus ainsi que pour les appels de méthodes entre composants parallèles doivent être

fait en prenant en compte ces ressources.

Mise en œuvre dans CCA Les composants parallèles constituent une fonctionnalité de

base de CCA avec les concepts de Single Component / Multiple Data (SCMD) et de

Multi-ple Component / MultiMulti-ple Data (MCMD). La particularité d’une mise en œuvre parallèle de

composant est qu’elle peut s’appuyer sur une bibliothèque de passage de messages telle que

MPI ou PVM par exemple. Chaque instance d’un tel composant est formée d’un ensemble de

18 Chapitre 2. Contexte d’étude

processus appelécohorte. Les appels de méthodes entre composants parallèles sont décrits

par des portsusesetprovidesclassiques qui sont locaux à un processus. Puisque CCA est

un modèle de composants dynamique, il est possible de décrire des ports différents dans

chaque processus de lacohorte.

L’approche SCMD consiste à distribuer toutes les instances de composants parallèles

sur le même ensemble de nœuds et à effectuer une connexion sur chaque nœud comme

présenté sur la figure 2.1. Au contraire, l’approche MCMD consiste à distribuer chaque

composant parallèle de calcul sur un ensemble distinct de nœuds et à utiliser un

compo-sant de couplage distribué sur la totalité des nœuds. Les compocompo-sants de calculs sont tous

connectés au composant de couplage comme présenté sur la figure figure 2.2.

Interaction gérée

par CCA Bibliothèque de passagede messages

p1 p2 p3 p4

c1

c2

Figure 2.1 – Couplage SCMD de

deuxcohortesc1etc2sur quatre fils

d’exécution p1àp4.

Composant de couplage MCMD

p1 p2 p3 p4

c1 c2

Figure 2.2 – Couplage MCMD de

deuxcohortes c1 et c2 sur deux fils

d’exécution chacune.

À l’exécution, la gestion du parallélisme dans CCA est entièrement gérée par la

biblio-thèque choisie pour les communications entre processus. C’est cette bibliobiblio-thèque qui est

utilisée pour déployer les composants et pour les communications entre processus. Le code

de support de CCA lui même n’est utilisé que localement à chaque processus pour le

cou-plage des composants.

Cette approche est intéressante parce qu’elle simplifie le portage d’applications SPMD

existantes vers CCA. Cependant, elle ne permet pas d’adapter une telle application pour

utiliser une mise en œuvre destinée à d’autres types de ressources d’exécution. Le couplage

de codes parallèles en s’appuyant sur CCA permet de s’abstraire de problèmes comme la

compatibilité entre différents langages. Cependant si les données sont distribuées

différem-ment entre les composants ainsi couplés, ils doivent effectuer la redistribution eux même.

L’approche MCMD permet de déporter cette redistribution dans un composant dédié, mais

ce composant doit être ré-écrit pour chaque nouveau couplage.

Mise en œuvre dans SCIRun2 SCIRun2 [64] est une mise en œuvre de CCA qui en étend le

modèle pour y ajouter le support de l’appel parallèle de méthodes entre composants. Pour

profiter de ce support, il est nécessaire de spécifier dans l’interface du composant quels

ports uses ouprovides sont parallèles. Les ports uses et provides parallèles doivent être

connectés entre eux, il n’est pas possible de les connecter à des versions séquentielles.

Pour utiliser un port usesparallèle, tous les membres de lacohorte du composant avec

le port uses doivent effectuer l’appel simultanément. Chacun de ces membres envoie une

partie des paramètres, en fait uniquement la partie des données dont ils sont responsables.

Chaque appel est retransmit au membre de lacohortequi expose le port providesayant le

même identifiant modulo le nombre d’instances comme présenté dans la figure 2.3.

En tant qu’extension à CCA, SCIRun2 en possède les principaux avantages et

incon-vénients. Cette mise en œuvre simplifie le couplage de codes parallèles en permettant de

décrire des interactions qui ne sont plus locales à un processus mais globales à un

com-posant parallèle. La redistribution des données reste cependant du ressort des comcom-posants

2.3. modèles de composants pour le calcul à haute performance 19

c1

c2

p1

id0 ≡ 0[3]

p6

id1

p5

id0

p7

id2

p2

id1 ≡ 1[3]

p3

id2 ≡ 2[3]

p4

id3 ≡ 0[3]

Figure 2.3 – Couplage de composants parallèles enM×N dans SCIRun2.

utilisateurs, ce qui complexifie leur développement et limite leur réutilisation dans d’autres

contextes.

Mise en œuvre dans GridCCM GridCCM [52] est une extension à CCM qui introduit le

support des composants parallèles avec appel de méthode M×N entre composants. Une

mise en œuvre parallèle de composant dans GridCCM est formée de deux parties : un

des-cripteur de distribution des données et une mise en œuvre séquentielle. Le composant ainsi

mis en œuvre expose automatiquement un attribut CCM utilisé pour spécifier le nombre

d’instances de la mise en œuvre séquentielle à créer.

Comme dans CCA, les instances de la mise en œuvre séquentielle communiquent à l’aide

d’une bibliothèque de passage de message. Les interactions entre composants parallèles

se font par des port uses ou provides similaires à ceux des composants séquentiels. Le

descripteur de distribution des données permet de dériver de l’interface du composant une

interface interne utilisée par la mise en œuvre séquentielle comme présenté sur la figure 2.4.

Pour utiliser un port uses (réciproquement un port provides), chaque fil d’exécution du

composant exécute (réciproquement reçoit) un appel de méthode avec en paramètre la partie

des données qu’il gère.

Fil d'exécution

séquentiel

interface MatMult {

Matrix mult( in Matrix m1, in Matrix m2 );

};

interface MatMult {

Matrix mult( inMatrix m1, inMatrix m2 );

};

interface DistMatMult {

MatrixBlock mult( in Matrix m1, in MatrixLine m2 );

};

interface DistMatMult {

MatrixBlock mult( inMatrix m1, inMatrixLine m2 );

};

Distribution :

P.mult: block;

P.mult.m1: none;

P.mult.m2: line;

Distribution :

P.mult: block;

P.mult.m1: none;

P.mult.m2: line;

M

P

I P

Figure 2.4 – Mise en œuvre parallèle d’un composant dans GridCCM.

Quand un composant parallèle est connecté à un composant séquentiel ou à un autre

composant parallèle utilisant une distribution de données différente, il est nécessaire de

redistribuer les paramètres et la valeur de retour des méthodes exposées par les ports.

Cette redistribution est effectuée par du code inséré automatiquement à la compilation du

composant par un outil spécifique à GridCCM. L’instanciation de ce code de redistribution

20 Chapitre 2. Contexte d’étude

est effectuée de manière transparente lors de la connexion en s’appuyant sur une interface

d’introspection qui permet de découvrir si le composant auquel on se connecte est parallèle

et s’il l’est, quelle distribution de données il utilise.

Par rapport à CCA, GridCCM offre une interface de plus haut niveau qui conserve les

propriétés des ports uses et provides pour les composants parallèles. En supportant la

redistribution des données de manière transparente pour l’utilisateur, celui-ci n’a pas à

se préoccuper de ces aspects. L’adaptation du comportement du composant parallèle aux

ressources d’exécution est cependant limitée aux algorithmes présents dans la bibliothèque

de passage de messages et dans son code de redistribution.

Une autre difficulté peut être liée à l’utilisation de deux bibliothèques différentes pour

les communications entre processus distants : une bibliothèque de passage de message

et Corba. Cet aspect a rendu nécessaire le développement d’un outil permettant d’utiliser

plusieurs bibliothèques de communication au sein d’une même application : PadicoTM [26].

Mise en œuvre par des composants répliquants Le concept de répliquants [BP07] a

été proposé comme une autre extension à CCM. Cette extension est destinée à permettre

la mise en œuvre de composants parallèles en tant que composite contenant un ensemble

d’instances du composant séquentiel. Elle introduit deux concepts dans ce but : les mises en

œuvre répliquantes de composant et les connexionsAnyToAny. Ces extensions sont utilisées

pour la mise en œuvre de composants parallèles mais aussi pour faciliter leurs interactions

avec la mise en œuvre d’un composant de communication collective.

Une mise en œuvre répliquante de composant met en œuvre un type de composant à

l’aide d’un autre composant qui est répliqué. Elle est formée de quatre parties : le type

du composant répliqué, un ensemble de connexionsAnyToAnyinternes et une mise en

cor-respondance des autres ports du composant répliqué avec ceux exposés par la mise en

œuvre répliquante. Le degré de réplication peut être spécifié soit explicitement soit lié aux

ressources d’exécution.

Une connexion AnyToAnyregroupe plusieurs portsAnyToAnyentre eux. Un portAnyToAny

est typé par une interface objet, comme les portuses ouprovides. Il se traduit en pratique

par deux ports du même type, un port uses multiple et un port provides. Une connexion

AnyToAny se traduit par une connexion uses/provides entre chaque port uses multiple et

chaque port provides participant. Ces ports permettent d’offrir des interactions

relative-ment similaires aux interactions de passage de message point à point.

Le composant de communication collective est utilisé pour permettre aux composants

dans une mise en œuvre répliquante de communiquer par ces opérations de passage de

message de plus haut niveau que celles point à point. Il ne s’agit pas d’une extension du

modèle de composants à proprement parler, mais d’un composant exposant un port

pro-videsavec une interface dédiée et dont la mise en œuvre est répliquante.

Au déploiement, lorsque les ressources d’exécution sont connues, une opération de

transformation de l’assemblage est appliquée dont un exemple est présenté sur la

fi-gure 2.5. Les composants répliquants sont remplacés par un ensemble d’instances du

com-posant répliqué et les connexionsAnyToAnysont remplacées par leur équivalent en terme de

connexions entre ports uses multiple et provides. Le résultat est un assemblage CCM qui

ne comporte plus de spécificités et peut être déployé par les outils classiques.

En permettant aux composants parallèles d’être formés d’un ensemble d’instance de

composant séquentiels, cette approche permet de réduire la granularité à laquelle les

posants peuvent être utilisés par rapport à GridCCM. Les interactions efficaces entre

com-posant parallèles ne sont cependant pas évoquées pour cette mise en œuvre qui nécessite

donc comme pour CCA que les composants les gèrent entièrement. De plus, en

nécessi-tant le passage par des ports du modèle de composants pour les communications entre

processus du composant parallèle, le portage d’applications existantes peut être complexe.

A l’inverse, ce choix a l’avantage de permettre le remplacement du code de mise en œuvre

des communications entre processus de manière simple pour s’adapter à de nouvelles

res-sources d’exécution.

2.3. modèles de composants pour le calcul à haute performance 21

MyReplicating

MyReplicating

.

.

.

P1

P2

Pn

P1

P2

Pn

User

Code

User

Code

User

Code

User

Code

User

Code

User

Code

.

.

.

Replicate

Replicate

Replicate

Replicate

Replicate

Replicate

User

Code

User

Code

User

Code

User

Code

User

Code

User

Code

Replicate

Replicate

Replication

level :

Process

AnyToAny

MyReplicating

Figure 2.5 – Exemple de transformations d’un assemblage comportant un composant

ré-pliquant.