Vous êtes sur la page 1sur 13

Universit Technique de Moldova Filire Francophone "Informatique"

A la discipline : PPC Travail de laboratoire Nr. 4 Thme : MPI.

A effectu:

ltudiant du gr.FI-091 : Beliu Nicu le professeur : Ciorba Dumitru

A vrifi:

Chisinau 2012

Contents
Introduction 3 Modele SPMD 4 Fonctionement 5 Point a point 6 Developpement 7 Methode Send() 9 Methode Receive()10 Conclusions 11 Bibliographie 12 Annexe A 13

1. Introduction
1.1 Le modle de programmation squentiel : -le programme est excut par un et un seul processus ;

-toutes les variables et constantes du programme sont alloues dans la - mmoire alloue au processus ; -un processus sexcute sur un processeur physique de la machine.

1.2 Dans le modle de programmation par change de messages: -le programme est crit dans un langage classique (Fortran, C, C++, etc.) ; -chaque processus excute ventuellement des parties diffrentes dun programme ; -toutes les variables du programme sont prives et rsident dans la mmoire locale alloue chaque processus ; -une donne est change entre deux ou plusieurs processus via un appel, dans le programme, des sous-programmes particuliers.

1.3 Le modle dexcution SPMD: -Single Program, MultipleData; -le mme programme est excut par tous les processus ; -toutes les machines supportent ce modle de programmation etcertaines ne supportent que celui-l ; -cest un cas particulier du modle plus gnral MPMD(MultipleProgram, MultipleData), quil peut dailleurs muler.

1.4 Concepts de lechange de messages Si un message est envoy un processus, celui-ci doit ensuite lerecevoir.

Un message est constitu de paquets de donnes transitant du processus metteur au(x) processus rcepteur(s) En plus des donnes (variables scalaires, tableaux, etc.) transmettre, un message doit contenir les informations suivantes : - lidentificateur du processus metteur ; - le type de la donne ; - sa longueur ;
4

lidentificateur du processus rcepteur.

Les messages changs sont interprts et grs par un environnement qui peut tre compar la tlphonie, la tlcopie, au courrier postal, la messagerie lectronique, etc. - Le message est envoy une adresse dtermine - Le processus rcepteur doit pouvoir classer et interprter lesmessages qui lui ont t adresss - Lenvironnement en question est MPI (MessagePassingInterface). Une application MPI est un ensemble de processus autonomes excutant chacun leur propre code et communiquant via des appels des sous-programmes de la bibliothque MPI

2. Fonctionement Toutes les oprations effectues par MPI portent sur des communicateurs. Le communicateur par dfaut est MPI_COMM_WORLD qui comprend tous les processus actifs.

3. Comunications point a point Une communication dite point point a lieu entre deux processus, lun appel processus metteur et lautre processus rcepteur (oudestinataire).

Lmetteur et le rcepteur sont identifis par leur rang dans le communicateur. Ce que lon appelle lenveloppe dun messageest constitue : - du rang du processus metteur ; - du rang du processus rcepteur ; - de ltiquette (tag) du message ; - du communicateur qui dfini le groupe de processus et le contexte de communication. - Les donnes changes sont types(entiers, rels, etc ou types drivs personnels).

4. Tache a realiser Il faut crer une aplication simple qui va utiliser les principes MPI et utiliser pour developpement MPI.NET.

5. Realisation Pour implementation jai cree une aplication qui va calculer la somme des nombres entiers entre 1 10000000 et 10000000 200000000. Il sera divisee en 2 processus ,un pour faire la premiere somme et autre pour la deuxieme somme. Quand la premiere sera calculee le resultat sera envoye au deuxieme et va faire la somme totale.

6. Developpement 6.1 Intracommunicators sont la forme la plus couramment utilise de communicateur dans MPI. Chaque intracommunicator contient un ensemble de processus, dont chacun est identifi par son rang dans le communicateur. Les rangs sont numrots de 0 Taille1. Tout processus dans le communicateur pouvez envoyer un message un autre processus dans le communicateur ou de recevoir un message de tout autre procd dans le communicateur. Intracommunicators prennent galement en charge une varit d'oprations collectives qui impliquent l'ensemble des processus du communicateur. La plupart des communications MPI se produit dans intracommunicators, avec trs peu de programmes MPI ncessitant intercommunicators. [1]
using (new MPI.Environment(ref args)) { MPI.Intracommunicator comm = Communicator.world;

6.2 Communicator et Classification Un communicateur est un objet opaque avec un certain nombre d'attributs avec des rgles simples qui rgissent sa cration, l'utilisation et la destruction. Le communicateur dtermine l'tendue et l 'univers de communication" dans lequel un point-point ou une opration collective doit fonctionner. Chaque communicateur contient un groupe de participants valides. La source et la destination d'un message est identifi par rang processus au sein de ce groupe. - Intracommunicator le communicateur est utilis pour la communication au sein d'un seul groupe de processus. - Intercommunicator est utilise pour la communication l'intrieur de deux ou plusieurs groupes de processus. Dans MPI-1, un intercommunicator est utilis pour le
7

point--point entre deux groupes disjoints de processus. Dans MPI-2, le intercommunicator peut tre utilis pour la communication collective dans deux ou plusieurs groupes de processus. Les communicateurs sont dynamiques, c'est dire qu'ils peuvent tre crs et dtruits au cours de l'excution du programme. [3]
if (comm.Rank == 0) {

Console.WriteLine(comm.Rank); double[] sumTable =new double[1]; double sum = 0; for (double i = 0; i < 100000000; i++) { sum += i; } sumTable[0] = sum; Console.WriteLine(sum); comm.Send<double>(sumTable,1,0); } if (comm.Rank == 1) { Console.WriteLine(comm.Rank); double sum2 = 0; double sumTotal = 0; for (double i = 100000000; i < 200000000; i++) { sum2 += i; } Console.WriteLine(sum2); double sumPrimit = comm.Receive<double>(comm.Rank - 1, 0); sumTotal = sumPrimit + sum2; Console.WriteLine("Suma totala" +sumTotal); }

6.3 La methode Send() [5]


7. public void Send<T>( 8. T value, 9. int dest, 10. int tag 11. )

Paramtres value Type: T La valeur qui sera transmise avec le message. dest Type: System.Int32 Le rang du processus qui va recevoir ce message. Ce doit tre une valeur dans [0, Taille-1), mais il ne doit pas tre gal Rang. tag Type: System.Int32 Un message "tag" qui identifie ce type de message particulier. La rception doit utiliser la balise mme message recevoir ce message. 6.4 La methode Receive() [4]
public T Receive<T>( int source, int tag )

Paramtres source Type: System.Int32 Le processus qui a envoy (ou qui va envoyer) le message. Ce doit tre une valeur dans [0, Taille-1), mais il ne doit pas tre gal Rang. Sinon, cela pourrait avoir la valeur spciale anySource, si le message peut tre reu de tout autre procd dans cette communication. tag Type: System.Int32 Un message "tag" qui identifie ce type de message particulier. Seuls les messages envoys avec ce tag sera reu par cet appel. La valeur spciale permet anyTag messages envoys avec une valeur de la variable recevoir. Paramtres de type Valeur de retour La valeur reue.
9

Les resultats

Ici jai realise la somme des tous les entiers qui sont dans linterval indique dans le programme. Jai observe que lexecution est simultaine et ne necesite pas du temps pour chaque operation a part. Jai divisee les taches pour 2 processus pour obtenir une execution parralele.

10

Conclusions En realisant ce travail jai etudie les avantages et les incovenients du MPI. Comment envoyer un message entre les processus qui sont lies par un communicateur .La connexion est rapide et on peut envoyer et recevoir des differentes types des donnees . On peut diviser un grand programme en plusieurs petits et de les executer dans des processus differents. Lexecution est tres rapide et donne des resultats tres bons . Les classes implementees dans le langage C# permetent de crer vite des applications pour les architectures paralleles. Les methodes utilisees peuvent reliser la communication entre les procesus et faire lechange des donnees. Encore on peut proteger les donnees qui sont utilisees par chaque processus a part. Cette architecture ouvre des nouvelles posibilites pour developper des aplications paralelles et utiliser les resources hardware au maximum. Chaque processus peut etre executee sur un proceseur different ou sur une station PC distante et apres colecter les resultats obtenues. Cette travail de laboratoire a t tres interesant et utile pour moi , apres et pendant la realisation jai change le point de vue sur larchitecture et developpement des aplications.

11

Bibliographie
1. La classe System.Itracommunicator consultee le 2012 sur http://osl.iu.edu/research/mpi.net/documentation/reference/0.5.0/html/T_MPI_Intracommuni cator.htm 2. MPI.NET consultee le 2012 sur http://osl.iu.edu/research/mpi.net/ 3. Intracommunicator et Intercommunicator consultee le 2012 sur http://static.msi.umn.edu/tutorial/scicomp/general/MPI/communicator.html 4. La methode Receive() consultee le 2012 sur http://osl.iu.edu/research/mpi.net/documentation/reference/0.5.0/html/M_MPI_Communicat or_Receive__1.htm 5. La methode Send() consultee le 2012 sur http://osl.iu.edu/research/mpi.net/documentation/reference/0.5.0/html/M_MPI_Communicat or_Send__1.htm

12

Annexe A Le code source :


using using using using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Net.Sockets; System.Net; System.Threading; MPI;

namespace MPI_test { class Program { static void Main(string[] args) { using (new MPI.Environment(ref args)) { MPI.Intracommunicator comm = Communicator.world;

if (comm.Rank == 0) {

Console.WriteLine(comm.Rank); double[] sumTable =new double[1]; double sum = 0; for (double i = 0; i < 100000000; i++) { sum += i; } sumTable[0] = sum; Console.WriteLine(sum); comm.Send<double>(sumTable,1,0); } if (comm.Rank == 1) { Console.WriteLine(comm.Rank); double sum2 = 0; double sumTotal = 0; for (double i = 100000000; i < 200000000; i++) { sum2 += i; } Console.WriteLine(sum2); double sumPrimit = comm.Receive<double>(comm.Rank - 1, 0); sumTotal = sumPrimit + sum2; Console.WriteLine("Suma totala" +sumTotal); } } } } }

13