Supports de communication – TD

Transcription

Supports de communication – TD
Supports de communication – TD
Olivier Aumage
12 janvier 2007
1
1.1
Bibliothèque générique
Meta
Important : le présent sujet de travaux dirigés fera l’objet d’une évaluation pour le cours. Il vous est demandé
de me communiquer une archive .tar de vos sources ainsi qu’un bref rapport par email à l’adresse olivier.
[email protected] pour le mercredi 31 janvier 2007 au plus tard.
Le rapport sera de préférence de 2 à 5 pages, et présentera vos implémentations, commentaires, optimisations
implémentées et optimisations proposées.
1.2
Description
L’objectif de ce sujet est la réalisation d’une mini-bibliothèque de communication par échange de messages (message passing) générique permettant, avec la même interface, de communiquer en utilisant TCP et
en utilisant GM/Myrinet.
Caractéristiques générales :
– Chaque processus se voit attribuer un rang unique entre 0 et n − 1, n étant le nombre de processus
dans la session.
– La bibliothèque fonctionne en modèle fermé : tous les processus participants sont lancés au début de
la session et terminent ensemble en fin de session.
– Il n’est pas demandé que la bibliothèque soit “resistante” aux threads.
– Il n’est pas demandé que la bibliothèque gère les communications en boucle locale (c’est-à-dire, où la
source et la destination sont les mêmes).
– Le mode de lancement de la session est libre.
API :
– L’interface de programmation dispose au moins des cinq commandes suivantes :
int nb_processes(void);
int my_rank(void);
void send_packet_to(int destination, void *ptr, size_t len);
int receive_packet(void *ptr, size_t *p_len);
void receive_packet_from(int source, void *ptr, size_t len);
– La commande nb_processes renvoie le nombre de processus participants.
– La commande my_rank renvoie le rang du processus dans la session.
– La commande send_packet_to envoie un bloc de données de base ptr et de longeur len vers
le processus de rang destination.
– La commande receive_packet reçoit un paquet de n’importe quel émetteur dans la zone de base
ptr et de longueur *p_len, et retourne le rang de l’émetteur, ainsi que la longueur effective du
paquet reçu dans *p_len. Si le paquet à recevoir est plus grand que la zone de réception, il s’agit
d’une situation d’erreur et la session est abandonnée.
1
– La commande receive_packet_from reçoit un paquet d’un émetteur spécifique dans la zone de
base ptr et de longueur len.
1.3
Questions
1. Écrivez la partie générique de l’interface, c’est à dire tout le code indépendant du réseau.
2. Écrivez le pilote TCP.
3. Écrivez un programme ping-pong qui mesure le temps de transfert et le débit de communication de
votre bibliothèque pour différentes tailles de messages. Le programme permettra de choisir les deux
méthodes de mesures suivantes :
(a) n émissions, 1 réception
(b) n émissions, n réceptions
Le programme permettra optionnellement d’activer un contrôle du transfert des données (pour pouvoir vérifier si les données sont transmises convenablement).
4. Écrivez le pilote GM. Votre pilote utilisera deux méthodes de transferts, une pour les petits messages
(jusqu’à 4096 octets inclus) et une pour les gros messages (au-delà de 4096 octets). Le transfert des
gros messages se fera systématiquement en zéro-copie.
Note : L’installation de GM est située dans le répertoire /data/gm sur la ferme. Il s’agit d’une version
1.x.
La documentation concernant GM/Myrinet est disponible à l’URL suivante : http://www.myri.
com/scs/GM/doc/gm_toc.html.
5. Testez votre pilote GM avec votre programme ping-pong.
6. Implémentez l’algorithme parallèle de multiplication de matrices de Cannon en utilisant votre bibliothèque et testez le sur 4 nœuds. Voir ci-après pour l’algorithme de Cannon.
Algorithme de Cannon L’algorithme à pour but de calculer, de façon parallélisée, C = AB où A, B et C
sont des matrices de taille N × N .
On considère que le nombre p de processus est un carré parfait p = q 2 et que les-dits processus constituent une grille q × q. Chaque processus est désigné par ses coordonnées (i, j) dans la grille.
Les matrices sont découpées en blocs tels que ci-dessous. Chaque bloc est initialement placé sur le processus de coordonnées correspondantes (bloc Aij sur le processus (i, j)).


A00 A01 A02 A03
 A10 A11 A12 A13 

A=
 A20 A21 A22 A23 
A30 A31 A32 A33
L’algorithme, tel que donné dans [1] :
CANNON(A,B,C)
1: Décalage de A et B
2: Pour k=1 à sqrt{p} en parallèle :
3:
Produit en local de A, B et C
4:
Rotation verticale de B
5:
Rotation horizontale de A
6: Décalage inverse de A et B
Le décalage de l’étape 1 à pour but d’amener les matrices A et B dans l’état suivant (la matrice C ne
bouge pas et les coordonnées des blocs de C sont donc les coordonnées des processus) :
2

C00
 C10

 C20
C30
C01
C11
C21
C31
C02
C12
C22
C32
 
C03
A00
 A11
C13 
,
C23   A22
C33
A33
A01
A12
A23
A30
A02
A13
A20
A31
 
A03
B00
 B10
A10 
,
A21   B20
A32
B30
B11
B21
B31
B01
B22
B32
B02
B12

B33
B03 

B13 
B23
Le décalage de l’étape 6 à pour but de ramener les matrices A et B dans l’état initial.
1.4
1.4.1
Questions subsidiaires
Multiplexage
Étendez votre bibliothèque afin de supporter le multiplexage de communications, c’est à dire d’autoriser plusieurs flux de communication indépendants. Modifiez votre implémentation de l’algorithme de
C ANNON pour que les rotations de A et de B soient effectuées sur des unités de multiplexage différentes.
1.4.2
Hétérogénéité
Modifiez votre bibliothèque pour autoriser la projection des unités de multiplexage sur des réseaux différents (TCP pour certaines et GM pour d’autres) durant la même session. Testez cette version avec C AN NON en utilisant GM pour les rotations de A et TCP pour les rotations de B afin de simuler grossièrement
un fonctionnement sur une grille.
Références
[1] A. Legrand and Y. Robert. Algorithmique Parallèle – Cours et exercices corrigés. Dunod, 2003.
3

Documents pareils