• Aucun résultat trouvé

Chapitre 4 : Les objets de ParObj 47

4.2 Le mod•le ˆ objets

4.2.1 GranularitŽ

Comme nous voulons gŽrer des entitŽs ˆ la fois relativement grosses (comme des fi-chiers, des documents, des matrices, etc), et relativement petites (comme des listes cha”nŽes, des ŽlŽments dÕune matrices, etc.) il para”t normal de sÕorienter vers un sys-t•me qui supporte des objets ˆ gros grains, et des objets ˆ grains intermŽdiaires.

En revanche, en raison de lÕapproche mod•le hybride choisi, qui permet donc une pro-grammation ˆ la fois standard et ˆ objets (comme C++ par exemple [St87]), nous pen-sons que les objets ˆ grains fins. comme les types de base du langage (entier, boolŽen, etc) et les ÒpetitsÓ objets en gŽnŽral, qui sont locaux ˆ une exŽcution dÕun processus, doivent •tre directement gŽrŽs par les compilateurs, ceci afin de rŽduire le nombre dÕob-jets gŽrŽs par le syst•me.

Cette technique a dÕailleurs ŽtŽ choisie dans de nombreux SDO tels que par exemple Guide [De90], SOS [SGHM89], et Cool [HMA90].

Mais le grain dÕun objet nÕest pas la seule notion intŽressante dans un syst•me parall•le. ConsidŽrons par exemple la situation suivante : supposons que lÕon dispose dÕune ma-chine parall•le sans mŽmoire commune, chaque processeur ayant 1 Mo de mŽmoire dont 200 Ko occupŽs par le syst•me (i.e. 800 Ko sont disponibles pour les applica-tions), et supposons que nous ayons besoin de calculer le produit C de deux matrices A=[aij]nxp et B=[bij]pxq, avec(n,p,q)=(4,5,6).

Alors C=[cij]nxq est donnŽ par : cij = p

k=1

Chapitre 4 : Des objets pour Parx

En supposant que lÕon travaille sur des ŽlŽments qui font 20 Ko (par exemple des images), on obtient : taille(A) = 400 Ko, taille(B) = 600 Ko, taille(C) = 480 Ko.

On pourrait donc avoir par exemple, les placements suivants :

C A

B C A B

C Processeur 1 Processeur 2 Processeur 1

Sans mŽmoire virtuelle

Processeur 3 Processeur 2

Un placement possible avec une mŽmoire virtuelle distribuŽe noyau kj b ik a 1 Mo

Figure 4.3. Placement dÕobjets (matrices) sur des processeurs

On se rend compte Žvidement que ces solutions prŽsentent lÕinconvŽnient de gŽnŽrer un grand nombres de messages (envoi de donnŽes de 20 Ko pour chaque ŽlŽment de la ma-trice) entre les diffŽrents processeurs.

Heureusement cet algorithme est parallŽlisable. Il suffit de remarquer que C=A xB, peut aussi sÕŽcrire : \—/jC-[1..q],C[j]= A xB[j] o• les B[j] (respectivement C[j]) sont des matrices colonne extraites de B (respectivement de

C

) [Ch92].

Alors si les objets matrices B et C peuvent •tre divisŽes en sous-objets que nous appele-rons fractions, le placement devient celui de la figure 4.4 (les fractions de B sont les matrices colonne B[j], et taille(A) = 400 Ko, taille(B[j]) = 100 Ko, taille(C[j]) = 80 Ko). Nous utiliserons la notation ÒOBjÓ:i pour dŽsigner la i•me fraction dÕun objet ÒOBjÓ.

A

C/C:1 C:2 C:3 C:4 C:5 C:6

A A A A A

B/B:1 B:2 B:3 B:4 B:5 B:6

Processeur 1 Processeur 2 Processeur 3 Processeur 4 Processeur 5 Processeur 6

B

C

1 Mo

Chapitre 4 : Des objets pour Parx

Les objets fractionnŽs permettent donc une gestion plus fine des applications en aug-mentant le degrŽ le parallŽlisme des acc•s [CCL89], tout en permettant une diminution notable des transferts de donnŽes entre processeurs.

DŽfinition dÕun objet fractionnŽ

Un objet fractionnŽ est un objet qui a ŽtŽ dŽcoupŽ en plusieurs sous-objets de taille quelconque. Chaque partie est appelŽe une fraction dÕobjet ou Ä-objet.

La dŽcision de dŽcouper un objet en plusieurs fractions et de placer les fractions sur les processeurs est uniquement prise au niveau utilisateur (par exemple, au moyen dÕins-tructions particuli•res intŽgrŽes dans le langage de programmation,), car seul le dŽve-loppeur de lÕapplication est vraiment capable de savoir sÕil a besoin ou non dÕexploiter cette propriŽtŽ des objets. Ceci permet de plus de conna”tre statiquement les identifica-teurs de chaque fraction, et donc de simplifier leur gestion au niveau du syst•me (puisque par exemple tout message sera directement envoyŽ au fraction visŽ, sans pas-ser par des intermŽdiaires).

PropriŽtŽs

Les objets fractionnŽs dÕun m•me objet sont tous indŽpendants les uns par rapport aux autres, ce qui signifie par exemple, quÕune Ä-objet ne peut communiquer avec une autre Ä-objet. Un objet fragmentŽ est toujours reliŽ ˆ un objet racine (B/B:1 et C/C:1 dans lÕexemple prŽcŽdent). En particulier, son identificateur est dŽrivŽ de lÕidentificateur de lÕobjet racine.

Lorsque la dŽcision est prise de dŽtruire la ÒracineÓ, tous ses Ä-objets associŽes seront aussi dŽtruites. En revanche, la racine peut supporter la destruction dÕun ou plusieurs de ses Ä-objets sans que cela affecte son comportement ou celui des autres Ä-objets (puisquÕil nÕy a pas de dŽpendances entre elles). Cette propriŽtŽ est extr•mement intŽ-ressante dans le cas o• par exemple, le syst•me ˆ besoin de faire de la place en mŽ-moire, et sait quÕune fraction nÕest plus rŽfŽrencŽe (par exemple parce que lÕutilisateur lÕaura lui-m•me dŽsallouŽe). Il est aussi possible de spŽcifier que la destruction dÕune Ä-objet implique la destruction de la totalitŽ de lÕobjet (afin dÕŽviter par exemple dÕŽventuels probl•mes de cohŽrence, si lÕobjet doit •tre sauvegardŽ sur disque).

Notes

On pourra constater que cette dŽfinition dÕobjet fractionnŽ est tr•s diffŽrente de la no-tion dÕobjet fragmentŽ utilisŽe dans SOS [SGHM89] o• par exemple les diffŽrents fragments dÕun objet peuvent communiquer entre eux. Nous pensons cependant que lÕapproche choisie dans SOS est plus complexe et ne sÕadapte pas efficacement dans un environnement ˆ parallŽlisme massif. Elle peut entra”ner en effet des inconvŽnients que nous voulons Žviter, comme un surcožt au niveau des performances (ˆ cause des ÒtalonsÓ qui relaient les messages et qui donc augmentent le temps des communication, et de la migration des mandataires qui surchargent ˆ la fois le rŽseau et le processeur sur

Chapitre 4 : Des objets pour Parx

lequel ils sont migrŽs) et lÕintroduction de probl•mes Žventuels de cohŽrence (quand les objets fragmentŽs conservent en mŽmoire locale des copies de donnŽes distantes).