Somme de distances dans un tore de PC

publicité
Somme de distances dans un tore de PC
Stéphane Vialle
Février 2007
Cet exercice consiste à implanter un calcul de somme de distances entre villes, sur un cluster
de PC.
Le cluster de PC : On considère un cluster de PC construit autour d’un simple réseau FastEthernet. On perçoit ce cluster comme un tore (en dimension deux), et on se limite
volontairement à des communications entre PC voisins. Chaque PC sera identifié par son
numéro de ligne et son numéro de colonne, disponibles dans deux variables : (MaLigne,
MaColonne). On suppose également connu la taille du coté du tore de PC : m.
PC
L : 0, C :
PC
L : 0, C : 1
PC
L : 0, C : m-1
PC
L : 1, C :
PC
L : 1, C : 1
PC
L : 1, C : m-1
PC
L : m-1, C : 0
PC
L : m-1, C : 1
PC
L : m-1, C : m-1
La bibliothèque de communication : on considère une bibliothèque proche de MPI. On
suppose disposer d’une instruction Send non bloquante et bufferisée, et d’une instruction
Recv bloquante :
• Send(Ptr sur les données à émettre, taille à émettre, destinataire)
• Recv(Ptr sur la zone à remplir, taille à recevoir, émetteur)
On peut donc émettre les données sans soucis (elles sont sauvegardées automatiquement) et
l’instruction Send rend la main immédiatement. L’instruction Recv bloque jusqu’à ce que les
données soient bien reçues.
Le problème : On considère un ensemble de n villes reliées par un réseau de routes. Toutes
les distances minimales entre les villes sont connues. On dispose d’un tableau (Tab) de nxn
cases, dont la case de coordonnée (ligne l, colonne c) représente la distance minimale pour
aller de la ville l à la ville c.
V0
V1
Vn-1
V0
Distances de la ville V1
vers les autres villes
V1
Tableau Tab
de nxn cases
Vn-1
Distances de toutes les
villes vers la ville Vn-1
Par conséquent, la ligne l contient les distances de la ville l vers toutes les autres. La colonne c
contient les distances de toutes les villes vers la ville c. La distance l → c peut être différente
de la distance c → l (présence de routes à sens unique).
On cherche à identifier la ville « la mieux située » : c’est-à-dire celle dont la somme des n-1
distances vers les autres villes et des n-1 distances depuis les autres villes est la plus petite.
Question 1 : On considère un tore de nxn PC (autant de PC que de cases du tableau, m = n).
Ainsi chaque PC contient une case du tableau :
le PC (ligne l, colonne c) contient la case Tab(ligne l, colonne c)
Concevez et décrivez une circulation de données et un algorithme exécuté sur chaque PC qui
permette à chaque PC de calculer la somme des distances de sa ville vers les autres villes : un
PC de la ligne l calcule la somme des distances de la ville l vers toutes les autres et la stocke
dans sa variable Somme_l. Cet algorithme doit évidemment fonctionner sur tous les PC.
Evidemment, à la fin, tous les PC de la ligne l contiennent la même somme :
0 10
10 0
2
4
…
2
4
1
12 3
6 16
11 5
5
1
2
8
1
7
8
1
8
48 48 48 48 48 48 48 48
39 39 39 39 39 39 39 39
40 40 40 40 40 40 40 40
…
Distribution des distances
entre villes
Distribution des sommes
des distances de chaque
ville vers les autres
N’hésitez pas à faire des schémas, donnez bien l’algorithme complet : condition d’arrêt et
valeurs initiales des variables que vous utiliserez.
Question 2 : On considère encore un tore de nxn PC (autant de PC que de cases du tableau).
Concevez et décrivez un algorithme qui permette à chaque PC de coordonnée (l,c) de calculer
la somme des distances de la ville l vers les autres (question précédente) et la somme des
distances des autres villes vers la ville c. Calculez ainsi deux variables (Somme_l, et
Somme_c). Après calculs, vous devez obtenir par exemple :
0 10
10 0
2
4
12 6
2 12
4
6
1 11
11 0
Distribution des distances
entre villes
24-24
20-24
18-24
29-24
24-20
20-20
18-20
29-20
24-18
20-18
18-18
29-18
24-29
20-29
18-29
29-29
Distribution des sommes
Somme_l et Somme_c
Ne calculez pas une somme puis l’autre en 2n étapes. Calculez ces deux sommes en n étapes
environ, en concevant une double circulation de données qui utilise les liens horizontaux et
verticaux à chaque étape.
Question 3 : écrivez l’implantation de l’algorithme de la question 2, à l’aide des routines
Send et Recv de l’énoncé. Soyez précis dans l’initialisation des diverses variables employées,
dans les bornes des compteurs de boucles, …
Question 4 : adaptez votre algorithme et votre implantation au cas d’un tore de pxp PC, en
supposant que n = k.p (n est multiple de p).
Téléchargement