Systèmes parallèles et distribués



Documents pareils
Introduction à la Programmation Parallèle: MPI

Introduction to Parallel Programming with MPI

INFO-F-404 : Techniques avancées de systèmes d exploitation

Grid Computing. Plan du cours. Plan. Composants d une Grille. Nouredine.Melab@lifl.fr. Besoin d intergiciels robustes

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

Introduction à MapReduce/Hadoop et Spark

Programmation parallèle et distribuée

Initiation au HPC - Généralités

MPI-1 2ème partie : Programmation «non bloquante» et communications de groupe

Conception des systèmes répartis

Systèmes distribués et virtualisation de ressources

Grid Computing. Mihaela JUGANARU-MATHIEU École Nationale Supérieure des Mines de St Etienne

Algorithmique et Programmation, IMA

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Programmation parallèle pour le calcul scientifique

Plan de la formation. Calcul parallèle avec MPI. Pourquoi paralléliser? Parallélisation. Présentation, environnement MPI. Communications point à point

Les environnements de calcul distribué

Plan du cours. Autres modèles pour les applications réparties Introduction. Mode de travail. Introduction

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI.

D2.2 Définition des mécanismes minimaux d un runtime tolérant aux pannes dans les infrastructures Petascale

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Contributions à l expérimentation sur les systèmes distribués de grande taille

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


IRL : Simulation distribuée pour les systèmes embarqués

Parallélisme et bioinformatique

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

1 Mesure de la performance d un système temps réel : la gigue

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Groupe calcul parallèle

Parallélisme et Répartition

Cours Programmation Système

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Big Data et Graphes : Quelques pistes de recherche

I. Introduction aux fonctions : les fonctions standards

Le modèle client-serveur

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Le prototype de la fonction main()

Programmation parallèle et distribuée (Master 1 Info )

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Big Data et Graphes : Quelques pistes de recherche

Métriques de performance pour les algorithmes et programmes parallèles

Introduction à CUDA.

Diagrammes de Package, de déploiement et de composants UML

MEAD : temps réel et tolérance aux pannes pour CORBA

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Cours de Master Recherche

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

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

Rapport d activité. Mathieu Souchaud Juin 2007

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

Certificat Big Data - Master MAthématiques

Déploiement d une architecture Hadoop pour analyse de flux. françois-xavier.andreu@renater.fr

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Exécutif temps réel Pierre-Yves Duval (cppm)

POP-Java : Parallélisme et distribution orienté objet

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Programmation système de commandes en C

Mise en oeuvre TSM 6.1

Ricco Rakotomalala R.R. Université Lyon 2

Our experience in using Apache Giraph for computing the diameter of large graphs. Paul Bertot - Flavian Jacquot

Algorithmique I. Algorithmique I p.1/??

Equilibrage de charge (Load

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Gestion de mémoire secondaire F. Boyer, Laboratoire Sardes

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

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

Contribution à la conception à base de composants logiciels d applications scientifiques parallèles.

I00 Éléments d architecture

Compression de Données - Algorithme de Huffman Document de Conception

Multiprogrammation parallèle générique des méthodes de décomposition de domaine

ORDONNANCEMENT CONJOINT DE TÂCHES ET DE MESSAGES DANS LES RÉSEAUX TEMPS RÉELS 4. QUELQUES EXEMPLES DU DYNAMISME ACTUEL DU TEMPS RÉEL

Systèmes de fichiers répartis

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

Programmation parallèle et distribuée

Cours Bases de données

Cours de Programmation 2

Programmation parallèle et distribuée

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

XtremWeb-HEP Interconnecting jobs over DG. Virtualization over DG. Oleg Lodygensky Laboratoire de l Accélérateur Linéaire

Happy birthday ZSet High performance computing dans ZSet

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours de Systèmes d Exploitation

Le langage C. Séance n 4

Ordonnancement temps réel

Cours 1 : La compilation

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

Les processus légers : threads. Système L3, /31

Temps Réel. Jérôme Pouiller Septembre 2011

Évaluation et implémentation des langages

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

Transcription:

Systèmes parallèles et distribués Grégory Mounié 2013-12 Grégory Mounié Systèmes parallèles et distribués 2013-12 1 / 58

Outline 1 Introduction 2 Performances 3 Problèmes du calcul parallèle 4 Intergiciels Grégory Mounié Systèmes parallèles et distribués 2013-12 2 / 58

Introduction Systèmes distribués Mise en commun de resources matérielles : CPU, mémoire, logiciels, données Grégory Mounié Systèmes parallèles et distribués 2013-12 3 / 58

Introduction Tolérance aux pannes Stockage pérenne Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it. L.T. Définition de Lamport A distributed system is one that stops you from getting any work done when a machine you ve never heard of, crashes. Grégory Mounié Systèmes parallèles et distribués 2013-12 4 / 58

Introduction Systèmes distribués Attention Un programme distribué présente de nombreux désavantages! D une manière générale il vaut mieux éviter le recours aux programmes distribués. Grégory Mounié Systèmes parallèles et distribués 2013-12 5 / 58

Introduction Dans ce cours Objectif vers des systèmes à très grand échelle réseaux pair-à-pair: edonkey, freenet, gnutella calcul distribué orienté performance: boinc, mpi, charm++, kaapi Outils Intergiciels, dépend de la plateforme visée Algorithmes, dépend du type d intergiciel, de l échelle visé, et bien sûr du problème. Grégory Mounié Systèmes parallèles et distribués 2013-12 6 / 58

Introduction Exemple d intergiciel: BOINC issu de SETI@HOME infrastructure de calcul nombreux projets: radioactive@home, docking@home, milkyway@home Le 2 décembre 2013 Actifs: 243883 volunteers, 509743 computers. 24-hour average: 8.11 PetaFLOPS. (rang 5.5 au top500) Grégory Mounié Systèmes parallèles et distribués 2013-12 7 / 58

Introduction Déroulement des séances 1 cours: Speedup, Amdahl, Graham, équilibrage, MPI 2 cours: tolérance aux pannes/opérations de communication 3 TP: lancé de rayon distribué (MPI) 4 TP: lancé de rayon (MPI) 5 TP: simgrid / déploiement d applications 6 cours: présentation de votre projet devant les autres étudiants (10 min) Grégory Mounié Systèmes parallèles et distribués 2013-12 8 / 58

Introduction Projet trinome (10 min de présentation+5min question) implantation des techniques du cours langagues / bibliothèques parmi 20 choix arbitraire (transparent suivant) make distribué compilation blender analyse de performances : jusqu à 80 coeurs sur 40 PCs Grégory Mounié Systèmes parallèles et distribués 2013-12 9 / 58

Introduction Les environnements et bibliothèques possibles Chaque groupe choisira un enviromment différents parmi les 20 suivants: 1 Les environnement de programmations parallèles distribuées: MPI (Communication Asynchrone); MPI (Communication uni-directionnelles Read/Write); MPI (Communication Collectives); MPI (avec l interface fichier de MPI); Charm++ (Bibliothèque C++) Python PP Hadoop (Map-Reduce de Apache) Python + Disco (map reduce en python) 2 Les languages dédiés Julia (http://julialang.org); Erlang (http://erlang.org); Chapel (http://chapel.cray.com) 3 Les objets distribués Java-RMI; DO de Objective-C (gnustep); Distributed ADA (polyorb); Python + Pyro; RPC Go (http://golang.org); RPC C; Corba; 4 Autres Zero-MQ (bibliothèque réseau de haut niveaux) Simgrid (simulation) Grégory Mounié Systèmes parallèles et distribués 2013-12 10 / 58

Introduction Lanceurs parallèles Pour lancer vos applications, il faudra être capable de déployer les instances sur les PCs Lanceurs parallèles Il faut éviter la boucle for séquentielle de ssh qui ne passe pas à l échelle: taktuk est le lanceur conseillé ssh-add et taktuk -c "ssh -A" Grégory Mounié Systèmes parallèles et distribués 2013-12 11 / 58

Performances Évaluation de performance La mesure du temps La mesure précise du temps est un problème dès qu il y a plusieurs horloges déjà sur un multi-coeur, pour avoir des temps à la nanoseconde en distribuée POSIX clock_gettime() de <time.h>. Grégory Mounié Systèmes parallèles et distribués 2013-12 12 / 58

Performances Accélération Definition (L accélération (Speedup)) C est le temps du meilleur calcul séquentiel divisé par le temps de calcul parallèle sur m processeurs ( T 1 /T m ) Grégory Mounié Systèmes parallèles et distribués 2013-12 13 / 58

Performances L efficacité L efficacité (Efficiency) C est l accélération multiplié par l inverse du nombre m de ressources de calculs ( T 1 /(m T m ) ). Accélération superlinéaire et super efficacité Normalement l accélération est plus petite que m et lefficacité plus petite que 1. Ce n est pas toujours vrai (cache, algorithme non déterministe). Grégory Mounié Systèmes parallèles et distribués 2013-12 14 / 58

Performances Algorithme 1: l Addition Question Comment additionne-t-on deux entiers? Quelle est le problème dans une parallélisation de cet algorithme? Comment faire? Grégory Mounié Systèmes parallèles et distribués 2013-12 15 / 58

Performances Algo 2: Tri PRAM Question Quelle est l opération de base d un tri? Comment la paralléliser? Pourquoi la compléxité d un tri devient alors N 2?. Grégory Mounié Systèmes parallèles et distribués 2013-12 16 / 58

Performances Algo 3: Tri MCSTL Question Comment améliorer le surcoût du tri? Idée du merge-sort parallèle (mémoire partagée) 1 merge-sort local 2 échange de pivots, tri et échanges des chunks correspondants 3 fusion des chunks Grégory Mounié Systèmes parallèles et distribués 2013-12 17 / 58

Performances Tri rapide Grégory Mounié Systèmes parallèles et distribués 2013-12 18 / 58

Performances Merge Comment commenter ces courbes rapidement?! Accélération de l exécution 9 STL min element on 8 threads 8 7 T STL / T Library 6 5 4 3 X-Kaapi 2 KaSTL PaSTeL 1 TBB Cilk 0 0 50000 100000 150000 200000 250000 Size jeudi 3 septembre Grégory 2009 Mounié Systèmes parallèles et distribués 2013-12 19 / 58

Performances Loi d Amdahl Dans chaque code on trouve une partie parallèle et une partie séquentielle modèle du temps d exécution : T m = T 1 (1 f ) + T 1 f m lim m T m = T 1 (1 f ) Exemples : code parallèle à 50 % : T = T 1 /2 code parallèle à 80 % : T 10 = 0.28T 1 Grégory Mounié Systèmes parallèles et distribués 2013-12 20 / 58

Performances Heuristiques à performance garantie Problèmes NP-Difficiles Une exécution parallèle efficace demande la résolution des problèmes d optimisation classiques: partition, ordonnancement, sac-à-dos, etc. Ils sont (tous) NP-Difficile. On ne cherche pas l optimal, mais juste une bonne solution. Definition (Une heuristique a une garantie de performance de q) si pour toute instance I d un problème et σi la valeur la solution optimale, l heuristique produit une solution de valeur σ I tel que I, σ I < qi Grégory Mounié Systèmes parallèles et distribués 2013-12 21 / 58

Performances Graham Definition (Algorithme de liste) Les tâches à ordonnancer sont rangées dans une liste de priorité Lorsqu une ressource de calcul est disponible, on y démarre le calcul de la tâche prête (ou qui démarrera le plus tôt) la plus prioritaire. Grégory Mounié Systèmes parallèles et distribués 2013-12 22 / 58

Performances Garantie des algorithmes de listes Theorem (Tâches indépendantes séquentielles) Un algorithme de liste a une garantie de performance de 2 sur m processeurs homogènes. Theorem (Graphe de tâches séquentielles) Un algorithme de liste a une garantie de performance de 2 sur m processeurs homogènes. Theorem (Tâches indépendantes parallèles rigides) Un algorithme de liste a une garantie de performance de 2 sur m processeurs homogènes. Grégory Mounié Systèmes parallèles et distribués 2013-12 23 / 58

Performances Bornes inférieures On ne peut pas comparer avec la solution optimale, mais on peut se comparer avec deux bornes inférieures. Le chemin critique du graphe La plus longue tâche pour les tâches indépendantes La somme du coût des noeuds divisée par le nombre de processeurs Le travail total divisé par le nombre de processeurs Grégory Mounié Systèmes parallèles et distribués 2013-12 24 / 58

Performances Preuve pour les tâches indépendantes Montrer le 2 en utilisant les bornes inférieures de la solution optimale. Grégory Mounié Systèmes parallèles et distribués 2013-12 25 / 58

Performances Preuve des graphes Illustrer l importance du 1 + 1 Grégory Mounié Systèmes parallèles et distribués 2013-12 26 / 58

Performances Approximation duale Comment répartir les calculs si l on a deux types de processeurs et donc des vitesses différentes pour les tâches. l approximation duale au sens de Schmoys permet d obtenir une garantie de 2 facilement. Grégory Mounié Systèmes parallèles et distribués 2013-12 27 / 58

Problèmes du calcul parallèle Équilibrage de la charge 4 grandes stratégies: Découpe statique Maître-esclave Vol de travail Adaptatif Grégory Mounié Systèmes parallèles et distribués 2013-12 28 / 58

Problèmes du calcul parallèle Découpage statique Répartition efficace Le but est de minimiser les communications et les synchronisations. "Owner compute rule" Les calculs sont effectués là où sont rangées les données. Découpage automatique efficace avec des partitionneurs de graphes (Scotch et Metis) Grégory Mounié Systèmes parallèles et distribués 2013-12 29 / 58

Problèmes du calcul parallèle Maître-esclave (Master-Worker) Découpage du travail en petit morceau indépendant: les tâches (jobs, tasks) La liste des tâches est conservé par le maître Les esclaves viennent demander du travail au maître lorsqu ils n ont plus de travail Grégory Mounié Systèmes parallèles et distribués 2013-12 30 / 58

Problèmes du calcul parallèle Vol de travail Variante distribuée du maître-esclave Tous les noeuds ont une liste locale de tâches Lorsque sa liste locale est vide, le noeud vole du travail dans la liste d une victime tirée au hasard Variations sur les vols Probabilité du choix de la victime vols multiples si temps de vols très différents. Grégory Mounié Systèmes parallèles et distribués 2013-12 31 / 58

Problèmes du calcul parallèle Adaptatif Le travail n est découpé que lorsqu une demande de vol arrive peu de surcoût par rapport au séquentiel: plus efficace pour les problèmes de petites tailles. Grégory Mounié Systèmes parallèles et distribués 2013-12 32 / 58

Problèmes du calcul parallèle Autres problèmes Données Déploiement Tolérance aux pannes Hétérogénéité Grégory Mounié Systèmes parallèles et distribués 2013-12 33 / 58

Intergiciels Programmation distribuée Le point difficile lors de la programmation, est la gestion de la distribution et des communications. Des bibliothèques/api comme MPI permettent de programmer les applications avec le paradigme simple à comprendre du passage de message. D autres abstractions sont possibles (OpenMP, OpenMP avec des tâches, RMI+J2EE, DO, DCOM, etc.). Grégory Mounié Systèmes parallèles et distribués 2013-12 34 / 58

Intergiciels Le passage de message Le paradigme consiste à écrire dans le code séquentiel exécuté par chaque noeuds, les communications (envoi ou réception) qu il doit réaliser pour faire correctement le calcul. Exemple: sur le noeud 0 1 int tableau[3] = {1,2,3}; 2 int destinataire=3; 3 4 Calcul(tableau, 3); 5 Envoi(tableau, 3, INT, destinataire); Grégory Mounié Systèmes parallèles et distribués 2013-12 35 / 58

Intergiciels Le passage de message (suite) sur le noeud 3 1 int tableaucalcule[3] = {}; 2 int emetteur=0; 3 4 Recevoir(tableauCalcule, 3, INT, emetteur); 5 ContinuerCalcul(tableauCalcule, 3); Grégory Mounié Systèmes parallèles et distribués 2013-12 36 / 58

Intergiciels MPI MPI est un standard définissant l API de fonctions permettant d implanter des applications parallèles avec passage de message. Le standard ne définit pas les opérations de gestion (lancement de l application parallèle). Elles peuvent varier d une implantation à l autre. Implantations couramment utilisées: http://www.open-mpi.org (ex LAM-mpi) et MPICH Grégory Mounié Systèmes parallèles et distribués 2013-12 37 / 58

Intergiciels Histoire L API est défini pour C, C++ et Fortran. Elle est la somme de l expertise des concepteurs autour de l écriture de bibliothèques d échange de message (1980-1994, 1996 pour MPI-2). Elle permet ou fournit: la portabilité (standard), l exploitation des performances au plus près du matériel, elle fournit de nombreuses fonctionnalité et est disponible presque partout. Grégory Mounié Systèmes parallèles et distribués 2013-12 38 / 58

Intergiciels Mémoire distribuée MPI a été conçu pour des architectures à mémoire distribuée avec un seul CPU. Elle a évolué pour faciliter l exploitation de multi-coeurs inter-connectés. Elle supporte l hétérogénéité (verbeux) et la dynamicité (dépend de l implantation) Grégory Mounié Systèmes parallèles et distribués 2013-12 39 / 58

Intergiciels Hello world en MPI 1 #include <mpi.h> 2 3 int main(int argc, char **argv) { 4 MPI_Init(& argc, &argv); 5 printf("hello world!\n"); 6 MPI_Finalize(); 7 } Grégory Mounié Systèmes parallèles et distribués 2013-12 40 / 58

Intergiciels Compilation 1 mpicc -o hello hello.c 2 mpirun -np 100./hello # et hop! 100 Hello! 3 mpirun -np 100 --hostfile listedemachines./hello Grégory Mounié Systèmes parallèles et distribués 2013-12 41 / 58

Intergiciels Nommage des processus Pour pouvoir différencier les calculs des noeuds, il faut pouvoir les nommer. Tous les processus lancés ensemble appartiennent à un même groupe (Communicateur). Le communicateur par défaut est MPI_COMM_WORLD Deux fonctions permettent d obtenir la taille et le rang dans le communicateur. Grégory Mounié Systèmes parallèles et distribués 2013-12 42 / 58

Intergiciels Hello world et nommage 1 #include <mpi.h> 2 #include <stdio.h> 3 4 int main(int argc, char **argv) { 5 int taille, rang, len; 6 char hostname[mpi_max_processor_name]={}; 7 MPI_Init(& argc, &argv); 8 MPI_Comm_size(MPI_COMM_WORLD, &taille); 9 MPI_Comm_rank(MPI_COMM_WORLD, &rang); 10 MPI_Get_processor_name(hostname, &len); 11 printf("hello world %d parmi %d sur %s!\n", rang, taille, 12 MPI_Finalize(); 13 } L affichage est dans le désordre. Il dépend de l ordonnancement des processus lancés. Grégory Mounié Systèmes parallèles et distribués 2013-12 43 / 58

Intergiciels Mesure du temps écoulé 1 double MPI_Wtime(); 2 3 double debut = MPI_Wtime(); 4... 5 double fin = MPI_Wtime(); 6 printf("temps ecoule %g\n", fin - debut); 7 8 double MPI_Wtick(); (tick) La précision de la mesure est disponible en utilisant la fonction de la ligne tick. Grégory Mounié Systèmes parallèles et distribués 2013-12 44 / 58

Intergiciels Communications MPI propose de nombreuses variantes pour les communications point-à-point (un processus emetteur et un processus récepteur). Grégory Mounié Systèmes parallèles et distribués 2013-12 45 / 58

Intergiciels MPI_Send / MPI_Recv 1 float tableau[10]; 2 int recepteur; int TAG=123456; 3... 4 MPI_Send(tableau, 10, MPI_FLOAT, 5 recepteur, TAG, 6 MPI_COMM_WORLD); 1 float tableaur[10]; 2 MPI_Status status; int emetteur; 3... 4 MPI_Recv( tableaur, 10, MPI_FLOAT, 5 emetteur, TAG, 6 MPI_COMM_WORLD, &status); Grégory Mounié Systèmes parallèles et distribués 2013-12 46 / 58

Intergiciels Sémantique MPI_Send() et MPI_Recv() sont bloquants jusqu à ce que les données puissent être réutilisé, MPI_Recv() est donc bloquant jusqu à la réception du message, MPI_Send() est bloquant jusqu à ce que l envoi ou la copie des données. Grégory Mounié Systèmes parallèles et distribués 2013-12 47 / 58

Intergiciels Exercice Anneau à jeton Le premier processus envoie un entier au processus numéro 2. Chaque autre processus passe un entier au processus suivant. Le dernier repasse l entier au premier. Grégory Mounié Systèmes parallèles et distribués 2013-12 48 / 58

Intergiciels Joker en réception 1 MPI_Recv( tableaur, 10, MPI_FLOAT, 2 MPI_ANY_SOURCE, MPI_ANY_TAG, // jokers 3 MPI_COMM_WORLD, &status); Grégory Mounié Systèmes parallèles et distribués 2013-12 49 / 58

Intergiciels Pourquoi avoir plusieurs type de communications Exemple: tous les processus échangent avec le processus 0 if (rang!= 0) { MPI_Send(donnees, nb, MPI_DOUBLE, 0, TAG, MPI_COMM_WORLD); MPI_Recv(donnees, nbr, MPI_DOUBLE, 0, TAG, MPI_COMM_WORLD, & } else { for(int dest =1; dest < taille; dest++, donnees += nbr) { MPI_Send(donnees, nb, MPI_DOUBLE, dest, TAG, MPI_COMM_WORLD MPI_Recv(donnees, nb, MPI_DOUBLE, dest, TAG, MPI_COMM_WORLD } } Si Send envoie les données lorsque la réception est prête, quel est le problème? Si Send envoie les données dès qu il commence, quel est le problème? Grégory Mounié Systèmes parallèles et distribués 2013-12 50 / 58

Intergiciels Envoi et Réception Asynchrone MPI permet de démarrer des communications puis d attendre plus tard leur fin. MPI_Request req; MPI_Status status; MPI_IRecv(donnees, nb, MPI_INT, emetteur, TGA, MPI_COMM_WORLD, &req);... MPI_Wait(&req, &status); mais aussi MPI_Test(), MPI_Testall(), MPI_Testany(), MPI_Testsome(), MPI_Waitall(), MPI_Waitany(), MPI_Waitsome() Grégory Mounié Systèmes parallèles et distribués 2013-12 51 / 58

Intergiciels Envoi synchrone L envoi terminera après le début de la réception MPI_Ssend(donnees, nb, MPI_INT, destinataire, TAG, MPI_COMM_WORLD); Grégory Mounié Systèmes parallèles et distribués 2013-12 52 / 58

Intergiciels Envoi tamponné Les données seront copiées dans un tampon intermédiaire MPI_Buffer_attach(& buffer, taille); MPI_Bsend(donnees, nb, MPI_INT, destinataire, TAG, MPI_COMM_WORLD); MPI_Buffer_detach(& buffer, taille); Cela à un coût non négligeable par rapport à une transmission avec 0 copie. Grégory Mounié Systèmes parallèles et distribués 2013-12 53 / 58

Intergiciels Envoi et réception simultanée Le code d échange précédent mais avec deux tampons différents. if (rang!= 0) { MPI_Sendrecv(donnees, nb, MPI_DOUBLE, 0, STAG donnees2, nb2, MPI_DOUBLE, 0, RTAG, MPI_COMM_WORLD, & status); } else { for(int dest =1; dest < taille; dest++, donnees += nbr) { MPI_Sendrecv(donnees, nb, MPI_DOUBLE, dest, STAG, donnees2, nb2, MPI_DOUBLE, dest, RTAG, MPI_COMM_WORLD, & status); } } Grégory Mounié Systèmes parallèles et distribués 2013-12 54 / 58

Intergiciels Envoi prêt (ready) à être reçu Le programmeur indique que la réception est déjà place. MPI_Rsend(donnees, nb, MPI_INT, destinataire, TAG, MPI_COMM_WORLD); Grégory Mounié Systèmes parallèles et distribués 2013-12 55 / 58

Intergiciels Et encore MPI_Waitall(), MPI_Waitany(), MPI_Waitsome() Attente mais sans faire vraiment la réception : MPI_Probe Version incomplète des envois Grégory Mounié Systèmes parallèles et distribués 2013-12 56 / 58

Intergiciels Communication collective 1 MPI_Barrier(MPI_COMM_WORLD); 2 MPI_Bcast( donnees, 20, MPI_INT, root, MPI_COMM_WORLD ); 3 MPI_Scatter( donnees, 20, MPI_INT, 4 donneesr, 20, MPI_INT, 5 root, MPI_COMM_WORLD); 6 MPI_Gather( donnees, 20, MPI_INT, 7 donneesr, 20, MPI_INT, 8 root, MPI_COMM_WORLD); 9 MPI_Allgather( donnees, 20, MPI_INT, 10 donneesr, 20, MPI_INT, 11 root, MPI_COMM_WORLD); 12 MPI_Reduce( donnees, donneesr, 20, MPI_INT, 13 OP, root, MPI_COMM_WORLD); 14 // OP: MPI_MAX, MPI_SUM, MPI_PROD, etc. Grégory Mounié Systèmes parallèles et distribués 2013-12 57 / 58

Intergiciels Construction de type dérivé les types de bases MPI_CHAR, MPI_WCHAR, MPI_SHORT, MPI_INT, MPI_LONG, MPI_FLOAT, MPI_DOUBLE, MPI_BYTE, etc. Pour une structure 1 struct T { int a; float b; }; 2 T tmp; 3 int nb=2; 4 int len[2] = {1, 1}; 5 MPI_Aint indices[2] = { (&tmp.a) - (&tmp), (&tmp.b) - (&tmp) 6 MPI_Datatype old[2] = { MPI_INT, MPI_FLOAT }; 7 MPI_Datatype new; 8 MPI_Type_struct( nb, len, indices, old, & new ); Grégory Mounié Systèmes parallèles et distribués 2013-12 58 / 58