• Aucun résultat trouvé

Algorithmes Parallèles et Distribués MPI 1. Introduction à la programmation avec MPI Camille Coti César Rodríguez Franck Butelle

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmes Parallèles et Distribués MPI 1. Introduction à la programmation avec MPI Camille Coti César Rodríguez Franck Butelle"

Copied!
45
0
0

Texte intégral

(1)

Algorithmes Parallèles et Distribués

MPI 1. Introduction à la programmation avec MPI

Camille Coti César Rodríguez Franck Butelle

LIPN, Université Paris 13 Formation Ingénieurs SupGalilée Info 3

04/2021

Transparents préparés par Camille Coti,

(2)

Plan

1 Modèle de mémoire Mémoire distribuée Exemples

2 Modèles de communications Passage de messages Mémoire Virtuelle RDMA

3 La norme MPI Introduction

Nommer les processus

Structure d’un programme MPI Un premier programme MPI Lancer l’exécution

Définir une liste de machines Deboguer un code MPI Sémantique

Communications Bloquantes point à point Communications non-bloquantes point à point

4 Documentation

(3)

Modèle de mémoire

Plan

1 Modèle de mémoire Mémoire distribuée Exemples

2 Modèles de communications Passage de messages Mémoire Virtuelle RDMA

3 La norme MPI Introduction

Nommer les processus

Structure d’un programme MPI Un premier programme MPI Lancer l’exécution

Définir une liste de machines Deboguer un code MPI Sémantique

Communications Bloquantes point à point

(4)

Modèle de mémoire Mémoire distribuée

Vision pratique du concept de Mémoire distribuée

Nœuds de calcul distribués

Chaquenœudpossède unbanc mémoire Lui seul peut y accéder

Les nœuds sont reliés par unréseau

Mémoire CPU

NIC

Réseau Mémoire

CPU

NIC

Mémoire CPU

NIC

Mémoire CPU

NIC

(5)

Modèle de mémoire Mémoire distribuée

Mise en œuvre

Réseau d’interconnexion

Dans ce modèle, les nœuds ont accès à unréseau d’interconnexion Tous les nœuds y ont accès

Communications point-à-point sur ce réseau (peut être vu comme un graphe complet)

Espace d’adressage

Chaque processus a accès à sa mémoire propre etuniquement sa mémoire Il nepeut pasaccéder à la mémoire des autres processus

Échange des données : communications point-à-point

C’est au programmeur de gérer les mouvements de données entre les processus

Système d’exploitation

Chaque nœud exécute sa propre instance du système d’exploitation

(6)

Modèle de mémoire Mémoire distribuée

Avantages et inconvénients

Avantages

Modèle plus réaliste que PRAM

Meilleur «passage à l’échelle» des machines (plus facile à réaliser) Pas de problème de cohérence de la mémoire

Inconvénients

Plus complexe à programmer

Ï Intervention du programmeur dans le parallélisme Temps d’accès aux données distantes

(7)

Modèle de mémoire Exemples

Exemples d’architectures

Cluster of workstations

Solutionéconomique

Composants produits en masse

Ï PC utilisés pour les nœuds

Ï Réseau Ethernet ou haute vitesse (InfiniBand, Myrinet...) Longtemps appelé « le supercalculateur du pauvre »

(8)

Modèle de mémoire Exemples

Exemples d’architectures

Supercalculateur massivement parallèle (MPP : Massively Parallel Processor) Solution spécifique

Composants spécifiques

Ï CPU différent de ceux des PC

Ï Réseaux spécifique (parfois propriétaire)

Ï Parfois sans disque dur Coûteux

(9)

Modèle de mémoire Exemples

Exemples d’architectures

Exemple : Cray XT5m

CPU : deux AMD Istanbul

Ï 6 cœurs chacun

Ï 2 puces par machine

Ï Empilées sur la même socket

Ï Bus : crossbar Pas de disque dur Réseau

Propriétaire : SeaStar Topologie : tore 2D

Connexion directe avec ses 4 voisins Environnement logiciel

OS : Cray Linux Environment Compilateurs, bibliothèques de calcul

(10)

Modèles de communications

Plan

1 Modèle de mémoire Mémoire distribuée Exemples

2 Modèles de communications Passage de messages Mémoire Virtuelle RDMA

3 La norme MPI Introduction

Nommer les processus

Structure d’un programme MPI Un premier programme MPI Lancer l’exécution

Définir une liste de machines Deboguer un code MPI Sémantique

Communications Bloquantes point à point Communications non-bloquantes point à point

4 Documentation

(11)

Modèles de communications Passage de messages

Implémentation de la communication inter-processus

Passage de messages

Envoi de messagesexpliciteentre deux processus Un processus A envoie à un processus B :

Ï A exécute la primitive :send( dest, &msgptr )

Ï B exécute la primitive :recv( dest, &msgptr )

Les processus émetteur et récepteur doivent exécuter une primitive : de réception pour le récepteur et d’envoi pour l’émetteur

Nommage des processus

On a besoin d’une façon unique de désigner les processus Association adresse / port→portabilité ?

On utilise un no derang de processus, unique, entre 0 et N-1

(12)

Modèles de communications Passage de messages

Gestion des données

Tampons des messages

Chaque processus (émetteur et récepteur) a un tampon (buffer) pour le message

La mémoire doit être allouée côté émetteuret côté récepteur

On n’envoie pas plus d’éléments que la taille disponible en émission

Linéarisation des données Les données doivent être sérialisées (marshalling)dans le tampon

On envoie un tampon, un tableau d’éléments, une suite d’octets...

send( P1, &addr )

recv( P0, &addr )

addr addr

P0

P1

(13)

Modèles de communications Passage de messages

Communications bilatérales

Communications bilatérales Primitivessend/recv

À toute primitive senddoit correspondre une primitiverecv, et réciproquement Conséquence : quand on échange des données entre deux processus, les deux processus participentactivementà l’échange.

P0

P1

a 2

b 4

a recv(&a,P0) send(&a,P1)

2

b

send(&b,P0) recv(&b,P1)

4

(14)

Modèles de communications Passage de messages

Communications bilatérales

Communications bilatérales Primitivessend/recv

À toute primitive senddoit correspondre une primitiverecv, et réciproquement Conséquence : quand on échange des données entre deux processus, les deux processus participentactivementà l’échange.

P0

P1

a 2

b 4 a

recv(&a,P0) send(&a,P1)

?

2

b

send(&b,P0) recv(&b,P1)

4

(15)

Modèles de communications Passage de messages

Communications bilatérales

Communications bilatérales Primitivessend/recv

À toute primitive senddoit correspondre une primitiverecv, et réciproquement Conséquence : quand on échange des données entre deux processus, les deux processus participentactivementà l’échange.

P0

P1

a 2

b 4 a

recv(&a,P0) send(&a,P1)

2

b

send(&b,P0) recv(&b,P1)

4

(16)

Modèles de communications Passage de messages

Communications bilatérales

Communications bilatérales Primitivessend/recv

À toute primitive senddoit correspondre une primitiverecv, et réciproquement Conséquence : quand on échange des données entre deux processus, les deux processus participentactivementà l’échange.

P0

P1

a 2

b 4 a

recv(&a,P0) send(&a,P1)

2

b

send(&b,P0) recv(&b,P1)

?

4

(17)

Modèles de communications Passage de messages

Communications bilatérales

Communications bilatérales Primitivessend/recv

À toute primitive senddoit correspondre une primitiverecv, et réciproquement Conséquence : quand on échange des données entre deux processus, les deux processus participentactivementà l’échange.

P0

P1

a 2

recv(&a,P0) send(&a,P1)

b

send(&b,P0) recv(&b,P1)

4

(18)

Modèles de communications Mémoire Virtuelle

Autre modèle : la mémoire virtuelle

Espace d’adressage global

Utilisation d’une mémoire partagée virtuelle : Virtuelle car elle est en fait distribuée ! Support d’uncompilateur spécifique

Ï Traduction des accès aux adresses distantes en communications

Ï Passage de message "caché" à l’utilisateur, géré de façon transparente par l’environnement d’exécution

Opération de transfert de mémoireimplicite(générée par le compilateur) Plus facile à programmer en apparence, maisdifficilesi on veut debonnes performances

Exemples : UPC, CoArray Fortran, Titanium...

(19)

Modèles de communications RDMA

Autre modèle : Accès direct à la Mémoire distante

Remote Direct Memory Access

Accès direct à la mémoire distante

Les processusaccèdent directement à la mémoireles unsdes autres

Les processus déposent des données dans la mémoire des autres processus ou vont lire dedans

Opération de transfert de mémoireexplicite(écrite par le programmeur) Nécessité d’un matériel particulier

Gestion de la cohérence mémoire (risque de race conditions) Exemples : InfiniBand, OpenSHMEM

NUMA en réseau

L’interconnexion entre les processeurs et les bancs de mémoire est fait par un réseau à faible latence

(20)

La norme MPI

Plan

1 Modèle de mémoire Mémoire distribuée Exemples

2 Modèles de communications Passage de messages Mémoire Virtuelle RDMA

3 La norme MPI Introduction

Nommer les processus

Structure d’un programme MPI Un premier programme MPI Lancer l’exécution

Définir une liste de machines Deboguer un code MPI Sémantique

Communications Bloquantes point à point Communications non-bloquantes point à point

4 Documentation

(21)

La norme MPI Introduction

La norme MPI

Message Passing Interface

Normede factopour la programmation parallèle parpassage de messages Née d’un effort de standardisation

Ï Chaque fabriquant avait son propre langage

Ï Portabilité des applications !

Effort commun entre industriels et laboratoires de recherche (MPI Forum) But : être à la fois portable et offrir de bonnes performances

Implémentations

En C/C++ ou Fortran (mais aussi maintenant en Python, OCaml, Perl,Java,. . .) officielles (logiciels libres) : MPICH, OpenMPI

Fonctions MPI

Interface définie enC, C++, Fortran77 et 90 Listées et documentées dans la norme

(22)

La norme MPI Introduction

Historique de MPI

Évolution

Appel à contributions : SC 1992 1994 : MPI 1.0

Ï Communications point-à-point de base

Ï Communications collectives

1995 : MPI 1.1 (clarifications de MPI 1.0) 1997 : MPI 1.2 (clarifications et corrections) 1998 : MPI 2.0

Ï Gestion Dynamique des processus

Ï Accès distant à la mémoire des processus (RDMA) 2008 : MPI 2.1 (clarifications)

2009 : MPI 2.2 (corrections, peu d’additions) 2012 : MPI 3.0 (collectives non bloquantes) 2015 : MPI 3.1 (corrections)

En cours : MPI 4.0

Ï Modèles de programmation hybrides

Ï Tolérance aux pannes

(23)

La norme MPI Nommer les processus

Désignation des processus

Communicateur( = ensemble de processus = espace de communication) Les processus communiquant ensemble sont dans un«communicateur»

Ils sont tous dansMPI_COMM_WORLD

Chacun est tout seul dans sonMPI_COMM_SELF MPI_COMM_NULLne contient personne

. . .On peut aussi créer ses propres «communicateurs». . .

Rang ( = identifiant de processus) Les processus sont désignés par unrang

Unique dans un communicateur donné

Ï Rang dansMPI_COMM_WORLD= rang absolu dans l’application Utilisé pour les envois / réception de messages

(24)

La norme MPI Structure d’un programme MPI

Structure d’un programme MPI

Début / fin du programme

MPI_Init(&argc, &argv);// Initialisation de la bibliotheque MPI MPI_Finalize (); \ \ \// Terminaison du programme

Si un processus quitte avantMPI_Finalize(), ce sera considéré comme une erreur.

"Ces deux fonctions sontOBLIGATOIRES! ! !

Quelques fonctions utiles

MPI_Comm_size(MPI_COMM_WORLD, &size);//Nbre de ps dans l’application MPI_Comm_rank(MPI_COMM_WORLD, &rank);//Identité (rang) du ps courant

MPI_Get_processor_name(hostname, &len);//Nom de la machine sur laquelle est ce ps, attention réserverMPI_MAX_PROCESSOR_NAMEcaractères.

(25)

La norme MPI Un premier programme MPI

Hello World en MPI

1 #include<stdio.h>

2 #include<stdlib.h>

3 #include<mpi.h>

45 intmain (intargc,char∗∗ argv) { 6 intsize, rank;

7

8 MPI_Init(&argc, &argv); /∗ Obligatoire ! ∗/

109 MPI_Comm_size(MPI_COMM_WORLD, &size);

11 MPI_Comm_rank(MPI_COMM_WORLD, &rank);

12 printf ("Hello world, I am rank %d in %d\n", rank, size);

13

14 MPI_Finalize(); /∗ Obligatoire ! ∗/

1516 returnEXIT_SUCCESS;

(26)

La norme MPI Un premier programme MPI

Hello World en MPI

Compilation : mpicc

Wrapperautour du compilateur C installé Fournit les chemins vers lempi.het la lib MPI

Équivalent à gcc -L/path/to/mpi/lib -lmpi -I/path/to/mpi/include Exemple : mpicc -Wall -o helloworld helloworld.c

(27)

La norme MPI Lancer l’exécution

Exécution de l’application MPI

Lancement

mpiexec lance les processus sur les machines distantes

Lancement = exécution d’un programme sur la machine distante

Ï Lebinaire doit être accessible de la machine distante Possibilité d’exécuter un binaire différent suivant les rangs

Ï "vrai" MPMD

Transmission des paramètres de la ligne de commande

Redirections

Lesentrées-sortiessontredirigées

stderr, stdout, stdinsont redirigés vers le lanceur MPI-IO pour les I/O

Finalisation

(28)

La norme MPI Lancer l’exécution

Exécution de l’application MPI (suite)

Exécution : mpiexec ou mpirun

On fournit une liste de machines (par--hostfile fichierou par-H mach1,mach2,mach3)

Le nombre de processus à lancer (sinon c’est le nbre de machines de la liste)

Exemple ( mpiexec --hostfile ./hostfile -n 4 ./helloworld)

Hello, I am rank 1 in 4 Hello, I am rank 2 in 4 Hello, I am rank 0 in 4 Hello, I am rank 3 in 4

(29)

La norme MPI Définir une liste de machines

Définir une liste de machines pour l’application

--hostfile hostfileou--machinefile hostfile

Syntaxe

Si pas de liste fournie : exécution uniquement en local

Possibilité de citer deux fois la même machine pour avoir (au moins) 2 ps sur cette machine

Plus généralement préciser le nombre de slots parslots=

Par défaut (pas d’option slots) on autorise MPI à lancer plusieurs exécutions sur la même machine

Exemple (hostfile) mach1 slots=2 mach2 slots=3 localhost

(30)

La norme MPI Deboguer un code MPI

Comment déboguer un programme MPI ?

Séparer les affichages des différents ps dans différents xterm

mpirun -n 3 --xterm -1\! monAppli

on peut préciser une liste d’intervalles derrière xterm ou juste -1 pour dire tous. le ! précise de ne pas fermer ces fenêtres même après la fin demonAppli

Enregistrer les affichages dans des fichiers différents (un par ps) mpirun -n 4 --output-filename monFic

Cela va créer monFic.0 monFic.1 monFic.2 et monFic.3

Solutions Open Source

par exemple avec le débogueurgdb(ouvre deux terminaux avec gdb dedans) : mpirun -n 2 xterm -e gdb monAppli

ou encore (un peu plus graphique grâce àddd:) mpirun -n 2 ddd monAppli

Solutions payantes

vrais débogueurs parallèles : ddt, TotalView

mpirun --debug -n 4 monAppli ; ddt -n 4 -start monAppli

(31)

La norme MPI Deboguer un code MPI

Comment déboguer un programme MPI ? (suite)

Où s’exécutent les processus ?

mpirun –hostfile hostfile hostname ou encore :

mpirun –report-bindings –hostfile hostfile -n 3 ./demoMPI

"Les contraintes de l’exécution distante

même version de MPI de préférence même user

même répertoire dans lequel se trouve les exécutables pas de parefeu

(32)

La norme MPI Sémantique

Terminologie officielle dans la norme

Tout dépends des buffers...

"Sémantique spécifique à MPI

Non bloquant(Immédiat) : une fonction est non bloquante si elle peut retourner avant la fin de l’opération associée et avant que l’utilisateur ne soit autorisé de réutiliser les ressources (buffers).

Bloquant: Une fonction est bloquante si quand elle est retourne l’utilisateur est autorisé à réutiliser les ressources (buffer) spécifiées dans l’appel.

Synchone: La fonction ne retourne que si le receveur commence à recopier le buffer et que l’émetteur peut commencer à réutiliser cebuffer.

Collective: Une fonction est dite collective si TOUS les ps du communicateur concerné doivent appeler cette fonction (peut ne pas être synchrone). Les appels des collectives doivent être faites dans le même ordre par TOUS les ps du groupe.

(33)

La norme MPI Communications Bloquantes point à point

Modes de communications Bloquantes dans MPI

Communications Bloquantes Mode standard (détail à suivre)

Mode bufferisé (Buffered) : copie du message dans un buffer qui doit être alloué par le programmeur, pas d’attente.

Mode synchrone (Synchronous) : bloquant et assure transmission faite dans le buffer de réception (mode rendez-vous forcé).

Mode prêt (Ready) : le programmeur doit s’assurer que recv est appelée avant send, évite le surcoût du rendez-vous mais dangereux.

Exemples

Les possibilités d’envoiBloquanten point à point :

MPI_Send() MPI_Bsend() MPI_Ssend() MPI_Rsend()

(34)

La norme MPI Communications Bloquantes point à point

Modes de Communication Bloquantes (suite)

Mode standard

Eager(«impatient», souvent pour des petits messages)

Ï L’émetteur envoie le message sur le réseau et retourne dès qu’il a fini (pas vraiment bloqué)

Ï Si le destinataire n’est pas dans unrecv, le message est copié dans un buffer système

Ï Quand le destinataire appellerecv, il commence par regarder dans ses buffers s’il n’a pas déjà reçu

Rendez-vous(souvent pour des gros messages, quasi synchrone)

Ï L’émetteur et le destinataire doivent être dans une communication

Ï Mécanisme de rendez-vous :

F Envoi d’un petit message F Le destinataire acquitte F Envoi du reste du message

Ï L’émetteur ne sort desendque s’il envoyé l’intégralité du mesg., donc que le destinataire est dans unrecv: pas de mise en buffer

C’est l’implémentation de MPI qui décide pour essayer de faire au mieux en terme de buffers. . .

Dans la documentation officielle de MPI ce mode est ditBloquant.

(35)

La norme MPI Communications Bloquantes point à point

Communications standard point-à-point

Communications standardBloquantes Envoi :

int MPI_Send(void∗buf,intcount,MPI_Datatypedatatype,intdest,inttag, MPI_Commcomm)

Réception :

int MPI_Recv(void∗buf,intcount,MPI_Datatypedatatype,intorig,inttag, MPI_Commcomm,MPI_Status∗status)

"En général, ces fonctions se comportent automatiquement en mode Eager dans le cas

de petits messages donc sont alors non bloquantes dans le sens commun !

(36)

La norme MPI Communications Bloquantes point à point

Communications bloquantes point-à-point standard

Prototypes

Données

buf : tampon d’envoi / réception

count : nombre d’éléments de typedatatype datatype : type de données

Ï Utilisation de types standard MPI ou définir de nouveaux

Ï Assure la portabilité (notamment 32/64 bits, environnements hétérogènes...)

Identification des processus

Utilisation du couple communicateur / rang

En réception : possibilité d’utilisation deMPI_ANY_SOURCE

Ï Après réception, l’émetteur du message est dans status.MPI_SOURCE

Identification de la communication Utilisation du tag

En réception : possibilité d’utilisation deMPI_ANY_TAG

Ï Après réception, le tag du message est dans status.MPI_TAG

(37)

La norme MPI Communications Bloquantes point à point

Récupération des informations en réception

Ignorer les infos

Si status pas utile on peut mettre dans l’appel de recvMPI_STATUS_IGNORE

Message trop long !

Si plus d’infos que attendues :MPI_ERR_TRUNCATEest retournée

Récupérer l’émetteur etc

status.MPI_SOURCEdonne le rang de l’émetteur, status.MPI_TAGdonne le Tag reçu,

status.MPI_ERRORl’éventuel code d’erreur.

Recevoir un nbre quelconque de données

int MPI_Probe(intsource,inttag, MPI_Commcomm,MPI_Status∗status)

(38)

La norme MPI Communications Bloquantes point à point

Exemple complet de code MPI

Ping-pong entre deux processus 1 #include<stdio.h>

2 #include<stdlib.h>

3 #include<mpi.h>

45 intmain(intargc,char∗∗argv ) { 6 intrang, vois;

7 intjeton = 17, recu, tag = 0;

89 MPI_Init( &argc, &argv );

10 MPI_Comm_rank(MPI_COMM_WORLD, &rang );

11 if( 0 == rang ) {

12 vois = 1;

13 // quoi, quelle taille, quel type, à qui, tag, communicateur 14 MPI_Send( &jeton, 1,MPI_INT, vois, tag,MPI_COMM_WORLD);

15 MPI_Recv( &recu, 1,MPI_INT, vois, tag,MPI_COMM_WORLD,MPI_STATUS_IGNORE);

16 }else if( 1 == rang ) {

17 vois = 0;

18 MPI_Recv( &recu, 1,MPI_INT, vois, tag,MPI_COMM_WORLD,MPI_STATUS_IGNORE);

19 MPI_Send( &recu, 1,MPI_INT, vois, tag,MPI_COMM_WORLD);

20 }

21 MPI_Finalize();

2223 returnEXIT_SUCCESS;

24 }

(39)

La norme MPI Communications Bloquantes point à point

Ping-pong entre deux processus

Remarques sur ce code

À un envoi correspond toujoursune réception

Ï Même communicateur, même tag

On utilise le rang pour déterminer ce que l’on fait

Ï Rang de l’émetteur et rang du destinataire On envoie des entiers →MPI_INT

Sources d’erreurs fréquentes

Ledatatypedoit êtreidentiqueen émission et en réception (sauf cas très particuliers) Lenombre d’élémentsen réception doit êtreau moinsle nombre en émission

Ï UtiliserMPI_Get_count(status,type,count) pour récupérer le nombre d’éléments reçus Attention à la correspondanceMPI_SendetMPI_Recv

Ï Deadlock si deux Send ou deux recv d’abord !

(40)

La norme MPI Communications non-bloquantes point à point

Communications non-bloquantes point-à-point

But

La communication a lieu pendant qu’on fait autre chose Superposition communication/calcul

Plusieurs communications simultanées sans risque de deadlock

Quand on a besoin des données, on attend que la communication soit effectuée complètement

Communications(I=Immediate) Envoi :

int MPI_Isend(void∗buf, int count, MPI_Datatypedatatype,intdest,int tag, MPI_Commcomm,MPI_Request∗request )

Réception :

int MPI_Irecv(void∗buf, int count, MPI_Datatypedatatype,intorig, int tag, MPI_Commcomm,MPI_Request∗request )

Remarque : le param.requestdoit être déclaré avant l’appel et sera utilisé en retour de l’appel pour tester/annuler la requête. . ..

(41)

La norme MPI Communications non-bloquantes point à point

Communications non-bloquantes point-à-point

Attente de réalisation de la communication

Pour une communication :

int MPI_Wait(MPI_Request∗request,MPI_Status∗status ) Attendre plusieurs communications :MPI_{Waitall,Waitany,Waitsome}

Tester la réalisation Pour une communication :

int MPI_Test(MPI_Request∗request,int∗flag,MPI_Status∗status ) Tester plusieurs communications :MPI_{Testall,Testany,Testsome}

Annuler une communication en cours

Communication non-bloquante identifiée par sarequest int MPI_Cancel(MPI_Request∗request) Différences

(42)

La norme MPI Communications non-bloquantes point à point

Détails sur MPI_Waitall

int MPI_Waitall(intcount, MPI_RequesttabRequests[],MPI_Status∗tabStatus);

count: nbre de requêtes à attendre (taille des tableaux tabRequests et tabStatus) tabRequest: peut contenir des éléments àMPI_REQUEST_NULL(ignorés).

tabStatuscontiendra en sortie les résultats (on peut mettre MPI_STATUS_IGNOREà la place).

et les autres

Syntaxe similaire pour les tableaux de requêtes passées àMPI_Testall,MPI_Waitany,...

La commande en ligne man vous donnera toujours plus de détails. . .

(43)

La norme MPI Communications non-bloquantes point à point

Exemple d’envoi en non-bloquant

1 #defineMONTAG 1

2 intmain (intargc,char∗∗argv) { 3 intrank,vois;

4 inttoken = 42;

5 MPI_Requestrequest;

6 MPI_Init(&argc, &argv);

7 MPI_Comm_rank(MPI_COMM_WORLD, &rank);

8 vois = 1−rank;

9 switch(rank) {

10 case0:

11 MPI_Isend(&token, 1,MPI_INT, vois, MONTAG,MPI_COMM_WORLD, &request);

12 MPI_Wait(&request,MPI_STATUS_IGNORE);

13 break;

14 case1:

15 token=17 ;/∗ Pour tester ∗/

16 MPI_Irecv(&token, 1,MPI_INT, vois, MONTAG,MPI_COMM_WORLD, &request);

17 printf("ps 1 : avant wait, token=%d\n",token);

18 MPI_Wait(&request,MPI_STATUS_IGNORE);

19 printf("ps 1 : après wait, token=%d\n",token);

20 break;

21 default:

22 break;

23 }

(44)

Documentation

Plan

1 Modèle de mémoire Mémoire distribuée Exemples

2 Modèles de communications Passage de messages Mémoire Virtuelle RDMA

3 La norme MPI Introduction

Nommer les processus

Structure d’un programme MPI Un premier programme MPI Lancer l’exécution

Définir une liste de machines Deboguer un code MPI Sémantique

Communications Bloquantes point à point Communications non-bloquantes point à point

4 Documentation

(45)

Documentation

Documentation

http ://www.mcs.anl.gov/research/projects/mpi/learning.html (tutoriels, perfs) http ://mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf (la version 3.1 de la norme MPI)

Références

Documents relatifs

Constantes, types et fonctions pour C et F77 Op´ erations de communications point-` a-point Op´ erations de communications collectives Groupes de processus.. Interface de suivi

Parallélisme au niveau matériel Processeur super-scalaire.

1962 premier ordinateur multiprocs (4) mais système non parallèle 1964 premier ordi double cœur et premier ordinateur à structure parallèle.. 1965 premier

Algorithmes distribués classiques (1ère partie) Éveil distribué par inondation.

Tout mesg envoyé à un site est placé dans sa file d’attente.. L’ordonnanceur du réseau permet aux

Si on a un algo d’élection alors on a un algo d’AC (en ajoutant 2m messages et D unités de temps). AC −→ élection (en ajoutant n − 1 messages et h unités de temps, où h est

pire des cas atteint pour un anneau avec identités en ordre décroissant et tous initiateurs... Donc 3n −

Ï Rang dans MPI_COMM_WORLD = rang absolu dans l’application Utilisé pour les envois / réception de messages. La norme MPI Structure d’un