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