Vous êtes sur la page 1sur 24

Cour : Programmation parallle et communication entre processus par envoie de message.

Prsentation gnral :
Une machine parallle (appele aussi systme

multiprocesseur) est un systme compos de plusieurs processeurs. Les processeurs travaillent d'une manire indpendante et peuvent communiquer entre eux pour changer les donnes ou partager une mmoire commune. Les processeurs fonctionnent, soit en mode asynchrone (chaque processeur a sa propre unit de contrle), soit en mode synchrone (tous les processeurs sont dirigs par la mme unit de contrle).

Communication entre processus : Les communications entre les processeurs sonteffectues, soit : via une mmoire globale (architecture mmoire partage). via l'intermdiaire d'un rseau d'interconnexion (architecture mmoire distribue) qui relie physiquement les processeurs entre eux. - Application parallle : Un ensemble de processus indpendants schangeant des messages. - Implantation nave : Un processus par processeur transit des messages via le rseau.

Architecture des machines parallles:

Les Machines Passage de Messages (ou MessagePassing Architectures) sont des Multiprocesseurs Mmoire Distribue fonctionnant en mode MIMD. Cette classe d'architectures est drive de la classe des Multiprocesseurs Mmoire Partage. Les Machines Passage de Messages se diffrencient essentiellement des Multiprocesseurs Mmoire Partage par le fait que l'on passe d'une mmoire centralise, ayant le mme espace d'adressage visible de tous les processeurs, une mmoire distribue o chaque processeur ne voit que l'espace d'adressage de sa propre mmoire locale.

Dfinition de la communication par Passage de Messages :

Il n'y pas d'espace d'adressage global des donnes, mais un espace global de processus. Les processus ne connaissent que leurs donnes locales et l'adresse des processus avec qui ils doivent communiquer. La communication entre deux processus se fait par copie de donnes et envoi de la copie dans un message. Un message est donc compos de l'adresse du processus destinataire et de la copie de la donne transfrer.

Modle de programmation parallle entre processus :

Programmation par change de messages :

Un des aspects du calcul parallle, indpendamment de la machine-cible, consiste exploiter au mieux le paralllisme dune application. Pour rpondre ce problme, plusieurs environnements de programmation parallles sinspirent du paradigme de programmation par processus communicants. On va tudier deux environnements de programmation par processus communicants les plus populaires : PVM et MPI.

La bibliothque de passage de messages PVM :

PVM (Parallel virtual Machine) est un environnement de programmation parallle, par processus communicants, trs populaire. Dvelopp et distribu par luniversit du Tennessee et par le Oak Ridge National Laboratory, il est devenu un standard de fait. Dvelopp lorigine pour utiliser des rseaux de stations de travail homognes ou htrognes comme des machines parallles virtuelles, il est galement disponible sur la plupart des machines parallles ddies.

Figure1 : Machine PVM

L'envoi d'un message se subdivise en 3 tapes:


1) Initialisation d'un buffer : Avant d'envoyer un message, il faut demander PVM (Parallel Virtual

Machine) d'initialiser un buffer dans lequel sera recopi le message


transmettre. Ceci se fait l'aide de la primitive. 2) Copie du message dans le buffer : Avant d'tre transmis le message doit tre copi dans le buffer. Pour des raisons d'optimisation de transmission, PVM compresse le message avant de l'envoyer. 3) Envoi des donnes contenues dans le buffer :

L'envoi des donnes ainsi stockes dans le buffer se fait en utilisant la primitive.

La bibliothque MPI :

MPI (Message-Passing Interface) est la spcification dun ensemble de fonctions pour la communication par change de messages. Elle a t dveloppe en regroupant les meilleurs aspects des bibliothques de communications existantes.
Informations ncessaires pour un message :

- l'expditeur et/ou le receveur, - l'tiquette du message ("tag"), - le communicateur

Pour L'envoi d'un message il y a 6 sousprogrammes : Initialisation de l'environnement : MPI_INIT Identification du processus d'une application : MPI_COMM_RANK Rcupration du nombre de processeurs : MPI_COMM_SIZE Envoi de message dun processus un autre : MPI_SEND Rception dun message: MPI_RECV Sortie de MPI : MPI_FINALIZE

Voici un premier programme qui permet de prendre contact avec lenvironnement MPI :
///////////////////////////////////////////// // hello.c // Hello world parallle ///////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #include <mpi.h> int main(int argc, char** argv) { int myrank, size; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Comm_rank(MPI_COMM_WORLD,&myrank); printf("Hello world, je suis le processus %d.\n",myrank); MPI_Finalize(); exit(EXIT_SUCCESS); }
Aprs compilation : %hcc o hello hello.c et excution : %mpirun np 2 hello, on obtient le rsultat suivant : Hello world, je suis le processus 0. Hello world, je suis le processus 1.

1-Communication point point : 1-Un processeur source envoie un message un processeur, destinataire. 2-La communication se passe lintrieur dun communicateur. 3-Le processeur destinataire est identifi par son rang dans le communicateur.
Envoi bloquant (blocking send) : mpi_send

Le processus qui envoie le message se bloque jusqu' rception du message Envoi non bloquant (nonblocking send) : mpi_isend Le processus envoie le message et continue son excution Rception bloquante (blocking receive) : mpi_recv Le processus rcepteur bloque jusqu' ce qu'un message soit disponible Rception non bloquante (nonblocking receive) : mpi_irecv Le processus reoit soit un message, soit un null.

Figure2: Modle de communication Point Point

2-Communications collectives : MPI permet galement la communication collective. Pour ce faire, on doit dabord dfinir diffrents groupes parmi les units de traitement disponible. Ensuite, il faut affecter chacun des groupes un communicateur qui permettra de diffuser un message parmi toutes les units du groupe.

Modles de communication : Modle unidirectionnel : on ne peut pas effectuer simultanment l'envoi de Pi vers Pj et de Pj vers Pi sur le mme canal.

Modle bidirectionnel : envoi et rception (simultanment) sur le mme canal

Exemple :
But : envoyer un message M de taille m d'un processeur Pi vers Pj, distants de h (h est le nombre de liens entre Pi et Pj).

1er solution :
Envoyer le message M (complet) de proche en proche en passant par les processeurs intermdiaires (store-and-forward) :

2me solution :
Utilisation de la technique du pipeline : le message est dcoup en q paquets, M1, , Mq de mme taille m/q.

Problmes :

On va maintenant voir les problmes rencontrs dans les modles passage de message : 1-Problme de satisfaisabilit d'un circuit. Solution : Approche modulo pour allouer chacune des 65536 affectations aux p processeurs : for (i = id; i < 65536; i += p) La fonction check_circuit (id, z) id : rang du processus z : reprsentation entire dune affectation possible la transformation de z en binaire donne les 16 valeursdentre du circuit for (i = 0; i < 16; i++) V[i] = EXTRACT_BITS(z, i); le if de 9 lignes est le codage la dure du circuit

2-Verrous mortels (deadlocks) : Un processus est dans un tat de deadlock sil est bloqu en attendant une condition qui ne deviendra jamais vraie. 3-Difficult de programmation (compliqu utiliser): -Gestion explicite de: La distribution des donnes. L'ordonnancement des tches. La communication entre les tches. - Consquences: Peut prendre beaucoup de temps. Peut mener plusieurs erreurs. Cots additionnels de dveloppement.

Ordinateur parallle Romeo (SunFire 6800)


SMP 24 X UltraSparc III 900 Mhz 24 Go de mmoire 210 Go d'espace disque

Bibliographie:
*http://www.limsi.fr/~jps/enseignement/enseignement.ht m *Cours DESA ANITS Abdelhak LAKHOUAJA.
*Cours Modle passage de messages de Pierre
Delisle(http://wwwens.uqac.ca/~pdelisle/fichiers/ppm/

Cours4-PassageMessages.pdf)

Merci pour votre attention