Systèmes parallèles et distribués · Introduction Systèmesdistribués Miseencommunderesources...
Transcript of Systèmes parallèles et distribués · Introduction Systèmesdistribués Miseencommunderesources...
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 resourcesmaté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érenneOnly wimps use tape backup: real men just upload their important stuff onftp, and let the rest of the world mirror it. L.T.
Définition de LamportA distributed system is one that stops you from getting any work donewhen 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
AttentionUn programme distribué présente de nombreux désavantages! D’unemaniè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, gnutellacalcul distribué orienté performance: boinc, mpi, charm++, kaapi
OutilsIntergiciels, dépend de la plateforme viséeAlgorithmes, dépend du type d’intergiciel, de l’échelle visé, et bien sûrdu problème.
Grégory Mounié Systèmes parallèles et distribués 2013-12 6 / 58
Introduction
Exemple d’intergiciel: BOINC
issu de SETI@HOMEinfrastructure de calculnombreux projets: radioactive@home, docking@home, milkyway@home
Le 2 décembre 2013Actifs: 243883 volunteers, 509743 computers. 24-hour average: 8.11PetaFLOPS. (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, MPI2 cours: tolérance aux pannes/opérations de communication3 TP: lancé de rayon distribué (MPI)4 TP: lancé de rayon (MPI)5 TP: simgrid / déploiement d’applications6 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 courslangagues / bibliothèques parmi 20 choix arbitraire (transparentsuivant)make distribué
I compilationI 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 possiblesChaque groupe choisira un enviromment différents parmi les 20 suivants:
1 Les environnement de programmations parallèles distribuées:I MPI (Communication Asynchrone); MPI (Communication
uni-directionnelles Read/Write); MPI (Communication Collectives);MPI (avec l’interface fichier de MPI);
I Charm++ (Bibliothèque C++)I Python PPI Hadoop (Map-Reduce de Apache)I Python + Disco (map reduce en python)
2 Les languages dédiésI Julia (http://julialang.org); Erlang (http://erlang.org);
Chapel (http://chapel.cray.com)3 Les objets distribués
I Java-RMI; DO de Objective-C (gnustep); Distributed ADA (polyorb);Python + Pyro; RPC Go (http://golang.org); RPC C; Corba;
4 AutresI Zero-MQ (bibliothèque réseau de haut niveaux)I 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 instancessur les PCs
Lanceurs parallèlesIl 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 tempsLa 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 nanosecondeen distribuée
POSIXclock_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 calculparallèle sur m processeurs ( T1/Tm )
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 decalculs ( T1/(m ∗ Tm) ).
Accélération superlinéaire et super efficacitéNormalement l’accélération est plus petite que m et lefficacité plus petiteque 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
QuestionComment additionne-t-on deux entiers ? Quelle est le problème dans uneparallé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
QuestionQuelle est l’opération de base d’un tri ? Comment la paralléliser ?Pourquoi la compléxité d’un tri devient alors N2 ?.
Grégory Mounié Systèmes parallèles et distribués 2013-12 16 / 58
Performances
Algo 3: Tri MCSTL
QuestionComment améliorer le surcoût du tri ?
Idée du merge-sort parallèle (mémoire partagée)1 merge-sort local2 échange de pivots, tri et échanges des chunks correspondants3 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
Accélération de l’exécution
0
1
2
3
4
5
6
7
8
9
0 50000 100000 150000 200000 250000
T STL
/ T L
ibra
ry
Size
STL min element on 8 threads
X-KaapiKaSTL
PaSTeLTBBCilk
Comment commenter ces courbes rapidement?!
jeudi 3 septembre 2009Grégory 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 partieséquentielle
modèle du temps d’exécution : Tm = T1 × (1− f ) + T1×fm
limm→∞ Tm = T1 × (1− f )
Exemples :code parallèle à 50 % : T∞ = T1/2code parallèle à 80 % : T10 = 0.28T1
Grégory Mounié Systèmes parallèles et distribués 2013-12 20 / 58
Performances
Heuristiques à performance garantie
Problèmes NP-DifficilesUne exécution parallèle efficace demande la résolution des problèmesd’optimisation classiques: partition, ordonnancement, sac-à-dos, etc.Ils sont (tous) NP-Difficile. On ne cherche pas l’optimal, mais juste unebonne 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 < q∗I
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 dela 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 mprocesseurs homogènes.
Theorem (Graphe de tâches séquentielles)Un algorithme de liste a une garantie de performance de 2 sur mprocesseurs homogènes.
Theorem (Tâches indépendantes parallèles rigides)Un algorithme de liste a une garantie de performance de 2 sur mprocesseurs 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 secomparer avec deux bornes inférieures.
Le chemin critique du grapheLa plus longue tâche pour les tâches indépendantes
La somme du coût des noeuds divisée par le nombre de processeursLe 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 calculssi l’on a deux types de processeurs et donc des vitesses différentes pour lestâches.
l’approximation duale au sens de Schmoys permet d’obtenir unegarantie 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 statiqueMaître-esclaveVol de travailAdaptatif
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 efficaceLe 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îtreLes esclaves viennent demander du travail au maître lorsqu’ils n’ontplus 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-esclaveTous les noeuds ont une liste locale de tâchesLorsque sa liste locale est vide, le noeud vole du travail dans la listed’une victime tirée au hasard
Variations sur les volsProbabilité du choix de la victimevols 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 arrivepeu de surcoût par rapport au séquentiel: plus efficace pour lesproblè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éesDéploiementTolérance aux pannesHé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 distributionet des communications. Des bibliothèques/API comme MPI permettent deprogrammer les applications avec le paradigme simple à comprendre dupassage 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 chaquenoeuds, les communications (envoi ou réception) qu’il doit réaliser pourfaire correctement le calcul.Exemple:
sur le noeud 0
1 int tableau[3] = {1,2,3};2 int destinataire=3;34 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;34 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 del’application parallèle). Elles peuvent varier d’une implantation àl’autre.Implantations couramment utilisées: http://www.open-mpi.org (exLAM-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 debibliothèques d’échange de message (1980-1994, 1996 pour MPI-2).Elle permet ou fournit:
I la portabilité (standard),I l’exploitation des performances au plus près du matériel,I 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 unseul CPU.Elle a évolué pour faciliter l’exploitation de multi-coeursinter-connectés.Elle supporte l’hétérogénéité (verbeux) et la dynamicité (dépend del’implantation)
Grégory Mounié Systèmes parallèles et distribués 2013-12 39 / 58
Intergiciels
Hello world en MPI
1 #include <mpi.h>23 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.c2 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 lesnommer.Tous les processus lancés ensemble appartiennent à un même groupe(Communicateur). Le communicateur par défaut est MPI_COMM_WORLDDeux fonctions permettent d’obtenir la taille et le rang dans lecommunicateur.
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>34 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, hostname);12 MPI_Finalize();13 }
L’affichage est dans le désordre. Il dépend de l’ordonnancement desprocessus 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();23 double debut = MPI_Wtime();4 ...5 double fin = MPI_Wtime();6 printf("Temps ecoule %g\n", fin - debut);78 double MPI_Wtick(); (tick)
La précision de la mesure est disponible en utilisant la fonction de la lignetick.
Grégory Mounié Systèmes parallèles et distribués 2013-12 44 / 58
Intergiciels
Communications
MPI propose de nombreuses variantes pour les communicationspoint-à-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 desdonnées.
Grégory Mounié Systèmes parallèles et distribués 2013-12 47 / 58
Intergiciels
Exercice
Anneau à jetonLe premier processus envoie un entier au processus numéro 2. Chaqueautre processus passe un entier au processus suivant. Le dernier repassel’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, // jokers3 MPI_COMM_WORLD, &status);
Grégory Mounié Systèmes parallèles et distribués 2013-12 49 / 58
Intergiciels
Pourquoi avoir plusieurs type de communicationsExemple: 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, & status);
} 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, & status);
}}
Si Send envoie les données lorsque la réception est prête, quel est leproblè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 leurfin.
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_ProbeVersion 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 basesMPI_CHAR, MPI_WCHAR, MPI_SHORT, MPI_INT, MPI_LONG,MPI_FLOAT, MPI_DOUBLE, MPI_BYTE, etc.
Pour une structure1 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