Travaux pratiques MPI Liste des exercices



Documents pareils
Introduction à MATLAB R

Plan du cours Cours théoriques. 29 septembre 2014

Cours Informatique Master STEP

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Cours d Algorithmique et de Langage C v 3.0

Algorithmique et Programmation, IMA

LES TYPES DE DONNÉES DU LANGAGE PASCAL

TP, première séquence d exercices.

TP : Gestion d une image au format PGM

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Conventions d écriture et outils de mise au point

Cours d initiation à la programmation en C++ Johann Cuenin

Les communications collectives. Caractéristiques. Communications dans un groupe de processus. Dans un communicateur donné.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1. Structure d'un programme FORTRAN 95

1 Description générale de VISFIELD

Programmation C. Apprendre à développer des programmes simples dans le langage C

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Introduction à la Programmation Parallèle: MPI

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation linéaire

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

Fonctions de plusieurs variables

Optimisation des fonctions de plusieurs variables

Compilation (INF 564)

Simulation de variables aléatoires

Corrigé des TD 1 à 5

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Bases de programmation. Cours 5. Structurer les données

Architecture des Systèmes d Information Architecture des Systèmes d Information

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

LES TOUT PREMIERS PAS

Programmation parallèle et distribuée

3 Approximation de solutions d équations

Plan du cours. Historique du langage Nouveautés de Java 7

Parallélisme et Répartition

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Chap III : Les tableaux

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

La fonction exponentielle

Initiation à LabView : Les exemples d applications :

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Chapitre 1 : La gestion dynamique de la mémoire

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Cours Programmation Système

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Arguments d un programme

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Bernard HAMM, Évelyne LAVOISIER

Championnat de France de Grilles Logiques Finale 7 juin Livret d'instructions

Limitations of the Playstation 3 for High Performance Cluster Computing

Communications performantes par passage de message entre machines virtuelles co-hébergées

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Rappels sur les suites - Algorithme

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Organigramme / Algorigramme Dossier élève 1 SI

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

4. Les structures de données statiques

Analyse dialectométrique des parlers berbères de Kabylie


TP3 : Manipulation et implantation de systèmes de fichiers 1

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Généralités sur le Langage Java et éléments syntaxiques.

Cours d algorithmique pour la classe de 2nde

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Projet Matlab : un logiciel de cryptage

3.2. Matlab/Simulink Généralités

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

de calibration Master 2: Calibration de modèles: présentation et simulation d

Perl Orienté Objet BioPerl There is more than one way to do it

Optimisation, traitement d image et éclipse de Soleil

Présentation du PL/SQL

«Manuel Pratique» Gestion budgétaire

Chapitre 5 : Flot maximal dans un graphe

Cours de Programmation Impérative: Zones de mémoires et pointeurs

UE C avancé cours 1: introduction et révisions

Une bibliothèque de templates pour CUDA

Introduction à l algorithmique et à la programmation (Info 2)

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

UE Programmation Impérative Licence 2ème Année

Cours de Systèmes d Exploitation

VoIP - TPs Etude et implémentation

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

C.F.A.O. : Conception et Fabrication Assistées par Ordinateur.

Algorithmique et structures de données I

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Transcription:

Travaux pratiques MPI Liste des exercices 1 T.P. MPI Exercice 1 : Environnement MPI... 2 2 T.P. MPI Exercice 2 : Ping-pong... 3 3 T.P. MPI Exercice 3 : Communications collectives et réductions... 5 4 T.P. MPI Exercice 4 : Transposée d une matrice....8 5 T.P. MPI Exercice 5 : Produit réparti de matrices... 9 6 T.P. MPI Exercice 6 : Communicateurs... 15 7 T.P. MPI Exercice 7 : Lecture d un fichier en mode parallèle...16 8 T.P. MPI Exercice 8 : Équation de Poisson....17

2/26 1 T.P. MPI Exercice 1 : Environnement MPI Travaux pratiques MPI Exercice 1 : Environnement MPI Gestion de l environnement de MPI : faire afficher un message par chacun des processus, mais différent selon qu ils sont de rang pair ou impair Soit par exemple pour les processus de rang pair un message du genre : Je suis le processus pair de rang M Et pour les processus de rang impair un message du genre : Je suis le processus impair de rang N Remarque : la fonction intrinsèque Fortran à utiliser pour tester la parité est mod : mod(nombre1,nombre2)

3/26 2 T.P. MPI Exercice 2 : Ping-pong Travaux pratiques MPI Exercice 2 : Ping-pong Communications point à point : ping-pong entre deux processus 1 Dans le premier sous-exercice, on fera uniquement un ping (envoi d un message (balle) du processus 0 au processus 1) 2 Dans le deuxième sous-exercice, on enchaînera le pong après le ping (le processus 1 renvoyant le message reçu du processus 0) 3 Dans le troisième sous-exercice, on effectuera une répétition du ping-pong en faisant varier à chaque fois la taille du message à échanger Soit : 1 Envoyer un message contenant 1000 nombres réels du processus 0 vers le processus 1 (il s agit alors seulement d un ping) 2 Faire une version ping-pong où le processus 1 renvoie le message reçu au processus 0 et mesurer le temps de communication à l aide de la fonction MPI_WTIME() 3 Faire une version où l on fait varier la taille du message dans une boucle et mesurer les temps de communication respectifs ainsi que les débits

4/26 2 T.P. MPI Exercice 2 : Ping-pong Remarques : La génération de nombres réels pseudo-aléatoires uniformément répartis dans l intervalle [0., 1.[ se fait en Fortran par un appel au sous-programme random_number : call random_number(variable) variable pouvant être un scalaire ou un tableau Les mesures de temps peuvent s effectuer de la façon suivante :... temps_debut=mpi_wtime()... temps_fin=mpi_wtime() print ( ("... en",f8.6," secondes.") ),temps_fin-temps_debut...

5/26 3 T.P. MPI Exercice 3 : Communications collectives et réductions T.P. MPI Exercice 3 : Communications collectives et réductions En simulant un tirage à pile ou face sur chacun des processus, boucler jusqu à ce que tous les processus fassent le même choix ou bien jusqu à ce qu on atteigne un nombre maximum, fixé a priori, d essais La fonction Fortran nint(a) renvoie l entier le plus proche du réel a. Une boucle à nombre d itérations inconnu se programme en Fortran à l aide de la structure do while : do while (condition(s))... end do

6/26 3 T.P. MPI Exercice 3 : Communications collectives et réductions 0 Recommencer 1 Recom. 0 P0 P2 Recom. P0 P2 0 Recom. P1 P1 P3 P3 P1 0 1 P0 1 0 P2 Recommencer Recom. Recom. P0 Recom. P1 P2 P3 P3 P1 1 1 P0 1 1 P2 Arrêter Arrêter Arrêter P0 Arrêter P1 P2 P3 P3 Figure 1 Tirage à pile ou face jusqu à l unanimité de tous les processus

7/26 3 T.P. MPI Exercice 3 : Communications collectives et réductions Si chaque processus génère directement un nombre pseudo-aléatoire via le sous-programme random_number, tous généreront le même lors du premier tirage et il y aura donc d emblée unanimité, ce qui rendrait le problème sans objet. Il est donc nécessaire de changer le comportement par défaut (légitime pour une reproduction similaire des exécutions d un code sur une machine donnée). Pour ce faire, il faut fixer sur chaque processus une valeur différente du germe qui sert à générer la série aléatoire, via un appel au sous-programme random_seed. Comme ces valeurs doivent être différentes sur chaque processus, on utilise ce qui les distingue, à savoir le temps d horloge (mais la précision habituelle du centième de seconde, hors quelques fonctions système non portables qui sont plus précises, n est pas suffisante sur certaines machines) et le rang. De plus, la taille du germe utilisé pour la génération des séquences de nombres pseudo-aléatoires n est pas la même selon les algorithmes employés, et donc selon les compilateurs. Pour obtenir un code portable, il convient de récupérer tout d abord la taille du germe à fournir, via un appel à random_seed avec l argument size, d allouer dynamiquement un tableau de la taille correspondante puis d initialiser celui-ci. Ensuite, ce tableau peut-être fourni lors d un nouvel appel à random_seed, cette fois avec l argument put, pour fixer le germe qui servira ultérieurement à générer des séquences différentes de nombres pseudo-aléatoires sur chacun des processus, via random_number.

8/26 4 T.P. MPI Exercice 4 : Transposée d une matrice Travaux pratiques MPI Exercice 4 : Transposée d une matrice Dans cet exercice, on se propose de se familiariser avec les types dérivés On se donne une matrice A de 5 lignes et 4 colonnes sur le processus 0 Il s agit pour le processus 0 d envoyer au processus 1 cette matrice mais d en faire automatiquement la transposition au cours de l envoi 1. 6. 11. 16. 2. 7. 12. 17. 1. 2. 3. 4. 5. 3. 8. 13. 18. 6. 7. 8. 9. 10. 4. 9. 14. 19. 11. 12. 13. 14. 15. 5. 10. 15. 20. 16. 17. 18. 19. 20. Processus 0 Processus 1 Figure 2 Transposée d une matrice Pour ce faire, on va devoir se construire deux types dérivés, un type type_ligne et un type type_transpose

9/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices Travaux pratiques MPI Exercice 5 : Produit réparti de matrices Communications collectives et réductions : produit de matrices C = A B On se limite au cas de matrices carrées dont l ordre est un multiple du nombre de processus Les matrices A et B sont sur le processus 0. Celui-ci distribue une tranche horizontale de la matrice A et une tranche verticale de la matrice B à chacun des processus. Chacun calcule alors un bloc diagonal de la matrice résultante C. Pour calculer les blocs non diagonaux, chaque processus doit envoyer aux autres processus la tranche de A qu il possède (voir la figure 3) Après quoi le processus 0 peut collecter les résultats et vérifier les résultats

10/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices B 0 1 2 3 0 1 2 3 A C Figure 3 Produit parallèle de matrices

11/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices Toutefois, l algorithme qui peut sembler le plus immédiat, et qui est le plus simple à programmer, consistant à faire envoyer par chaque processus sa tranche de la matrice A à chacun des autres, n est pas performant parce que le schéma de communication n est pas du tout équilibré. C est très facile à voir en faisant des mesures de performances et en représentant graphiquement les traces collectées. Voir les fichiers produit_matrices_v1_n3200_p4.slog2, produit_matrices_v1_n6400_p8.slog2 et produit_matrices_v1_n6400_p16.slog2, à utiliser via l outil jumpshot de MPE (MPI Parallel Environment).

12/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices Figure 4 Produit parallèle de matrices sur 4 processus, pour une taille de matrice de 3200 (premier algorithme)

13/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices Figure 5 Produit parallèle de matrices sur 16 processus, pour une taille de matrice de 6400 (premier algorithme)

14/26 5 T.P. MPI Exercice 5 : Produit réparti de matrices Mais en changeant l algorithme pour faire glisser le contenu des tranches de processus à processus, on peut obtenir un équilibre parfait des calculs et des communications, et gagner ainsi un facteur 2. Voir la représentation produite par le fichier produit_matrices_v2_n6400_p16.slog2. Figure 6 Produit parallèle de matrices sur 16 processus, pour une taille de matrice de 6400 (second algorithme)

15/26 6 T.P. MPI Exercice 6 : Communicateurs Travaux pratiques MPI Exercice 6 : Communicateurs En partant de la topologie cartésienne définie ci-dessous, subdiviser en 2 communicateurs suivant les lignes via MPI_COMM_SPLIT() v(:)=1,2,3,4 1 w=1. w=2. w=3. w=4. 1 3 5 7 v(:)=1,2,3,4 0 w=1. w=2. w=3. w=4. 0 2 4 6 0 1 2 3 Figure 7 Subdivision d une topologie 2D et communication suivant la topologie 1D obtenue

16/26 7 T.P. MPI Exercice 7 : Lecture d un fichier en mode parallèle T.P. MPI Exercice 7 : Lecture d un fichier en mode parallèle On dispose du fichier binaire donnees.dat, constitué d une suite de 484 valeurs entières En considérant un programme parallèle mettant en œuvre 4 processus, il s agit de lire les 121 premières valeurs sur le processus 0, les 121 suivantes sur le processus 1, etc. et d écrire celles-ci dans quatre fois quatre fichiers appelés fichier_xxx0.dat fichier_xxx3.dat On emploiera pour ce faire 4 méthodes différentes, parmi celles présentées : lecture via des déplacements explicites, en mode individuel ; lecture via les pointeurs partagés, en mode collectif ; lecture via les pointeurs individuels, en mode individuel ; lecture via les pointeurs partagés, en mode individuel. Pour compiler et exécuter le code, utilisez la commande make et pour vérifier les résultats utilisez la commande make verification qui exécute un programme de visualisation graphique correspondant aux quatre cas à traiter

17/26 8 T.P. MPI Exercice 8 : Équation de Poisson Travaux pratiques MPI Exercice 8 : Équation de Poisson On considère l équation de Poisson suivante : 2 u x 2 + 2 u y 2 = f(x,y) dans [0,1]x[0,1] u(x,y) = 0. sur les frontières f(x,y) = 2. ( x 2 x+y 2 y ) On va résoudre cette équation avec une méthode de décomposition de domaine : L équation est discretisé sur le domaine via la méthode des différences finies. Le système obtenu est résolu avec un solveur Jacobi. Le domaine global est découpé en sous domaines. La solution exacte est connue et est u exacte(x,y) = xy(x 1)(y 1)

18/26 8 T.P. MPI Exercice 8 : Équation de Poisson Pour discrétiser l équation, on définit une grille constituée d un ensemble de points (x i,y j) x i = i h x pour i = 0,...,ntx+1 y j = j h y pour j = 0,...,nty +1 h x = h y = h x : h y : ntx : nty : 1 (ntx+1) 1 (nty +1) pas suivant x pas suivant y nombre de points intérieurs suivant x nombre de points intérieurs suivant y Il y a au total ntx+2 points suivant x et nty+2 points suivant y

19/26 8 T.P. MPI Exercice 8 : Équation de Poisson Soit u ij l estimation de la solution à la position x i = ih x et x j = jh y. La méthode de jacobi consiste à calculer u n+1 ij = c 0(c 1(u n i+1j +u n i 1j)+c 2(u n ij+1 +u n ij 1) f ij) avec : c 0 = 1 h 2 xh 2 y 2 h 2 x +h 2 y c 1 = 1 h 2 x c 2 = 1 h 2 y

20/26 8 T.P. MPI Exercice 8 : Équation de Poisson En parallèle, les valeurs aux interfaces des sous domaines doivent être échangées entre les voisins. On utilise des cellules fantomes, ces cellules servent de buffer de réception pour les échanges entre voisins.

21/26 8 T.P. MPI Exercice 8 : Équation de Poisson N W S Figure 8 Échange de points aux interfaces E

22/26 8 T.P. MPI Exercice 8 : Équation de Poisson y x u(sx-1,sy) u(sx,sy-1) u(sx,sy) sy sy-1 u(sx,ey) u(sx,ey+1) ey ey+1 sx-1 sx ex ex+1 u(ex+1,sy) u(ex,sy) Figure 9 Numérotation des points dans les différents sous-domaines

23/26 8 T.P. MPI Exercice 8 : Équation de Poisson y x 0 1 2 3 Figure 10 Rang correspondant aux différents sous-domaines

24/26 8 T.P. MPI Exercice 8 : Équation de Poisson Process 0 Process 1 File Process 2 Process 3 Figure 11 Ecriture de la matrice u globale dans un fichier Il s agit de définir : Une vue, pour ne voir dans le fichier que la partie de la matrice u globale que l on possède ; Un type afin d écrire la matrice u locale (sans les interfaces) ; Appliquer la vue au fichier; Faire l écriture en une fois.

25/26 8 T.P. MPI Exercice 8 : Équation de Poisson initialiser l environnement MPI ; créer la topologie cartésienne 2D ; déterminer les indices de tableau pour chaque sous-domaine ; déterminer les 4 processus voisins d un processus traitant un sous-domaine donné ; créer deux types dérivés type_ligne et type_colonne ; échanger les valeurs aux interfaces avec les autres sous-domaines ; calculer l erreur globale. Lorsque l erreur globale sera inférieure à une valeur donnée (précision machine par exemple), alors on considérera qu on a atteint la solution. reformer la matrice u globale (identique à celle obtenue avec la version monoprocesseur) dans un fichier donnees.dat.

26/26 8 T.P. MPI Exercice 8 : Équation de Poisson Répertoire : tp8/poisson Un squelette de la version parallèle est proposé : il s agit d un programme principal (poisson.f90) et de plusieurs sous-programmes. Les modifications sont à effectuer dans le fichier module_parallel_mpi.f90. Pour compiler et exécuter le code, utilisez la commande make et pour vérifier les résultats utilisez la commande make verification qui exécute un programme de relecture du fichier donnees.dat et le compare avec la version monoprocesseur