La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

DESA ANITSMessage Passing Interface1 Présentation Par : Khalil BADDOU Mohammed Ghaouth BELKASMI Mohammed SABER Mounir GRARI Said BENBOUAZA Encadrant: Dr.

Présentations similaires


Présentation au sujet: "DESA ANITSMessage Passing Interface1 Présentation Par : Khalil BADDOU Mohammed Ghaouth BELKASMI Mohammed SABER Mounir GRARI Said BENBOUAZA Encadrant: Dr."— Transcription de la présentation:

1 DESA ANITSMessage Passing Interface1 Présentation Par : Khalil BADDOU Mohammed Ghaouth BELKASMI Mohammed SABER Mounir GRARI Said BENBOUAZA Encadrant: Dr. Abdelhaq LAKHOUAJA Message Passing Interface

2 DESA ANITSMessage Passing Interface2 Plan o Tour dHorizon : Monde MPI et Structure Communication point to point Communication Collective o Types de Données MPI Dérivée

3 DESA ANITSMessage Passing Interface3 Monde MPI et Structure

4 DESA ANITSMessage Passing Interface4 MPI Structure o Header File : #include mpi.h o Format des Fonctions MPI : error = MPI_Xxxx ( Parametre, …); MPI_Xxxx ( Parametre, …); o Initialisation MPI : int MPI_Init(int argc, char *argv[]) //doit être le premier appel(seulement une fois)

5 DESA ANITSMessage Passing Interface5 MPI Communicator o Collection des processus réservés, qui vont communiquer entre eux. o Plus souvent, on utilise MPI_COMM_WORLD, le communicateur par défaut. o Définie dans MPI_Init()

6 DESA ANITSMessage Passing Interface6 Propriétés o Rank : Process ID, identifiant assigné par le système quand le processus est initialisé. o MPI_Comm_rank(MPI_Comm comm, int *rank) o Utilisé pour spécifier la source et la destination des messages. o Commence à partir de zéro. o Size : Combien de processus sont dans le communicateur? o MPI_Comm_size(MPI_Comm comm,int *size)

7 DESA ANITSMessage Passing Interface7 Quitter MPI o int MPI_Finalize() o doit être appelé à la fin par tous les processus o Exemple : #include mpi.h void main(int argc, char *argv[]) { int rank,size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&size); /*... code ici...*/ MPI_Finalize(); }

8 DESA ANITSMessage Passing Interface8 Communication Point à Point o Communication entre deux processus o Le processus source envoie un message au processus destination o Destination reçoit le message o La communication est établie à travers le Communicateur. o La source et la destination sont identifiées par leurs rangs dans le Communicateur.

9 DESA ANITSMessage Passing Interface9 Modes de communication ModeCompletion Condition Envoie Synchronisé (Synchronous send) Only completes when the receive has completed Buffered sendAlways completes (unless an error occurs), irrespective of receiver Standard sendMessage sent (receive state unknown) Ready sendAlways completes (unless an error occurs), irrespective of whether the receive has completed ReceiveCompletes when a message has arrived

10 DESA ANITSMessage Passing Interface10 Routine MODEMPI CALL Standard send MPI_SEND Synchronous send MPI_SSEND Buffered send MPI_BSEND Ready send MPI_RSEND Receive MPI_RECV o Envoie de Message : int MPI_Ssend(void *buf,int count,MPI_Datatype datatype, int dest,int tag,MPI_Comm comm)

11 DESA ANITSMessage Passing Interface11 Arguments Bufstarting address of the data to be sent Countnumber of elements to be sent DatatypeMPI datatype of each element Destrank of destination process Tagmessage marker (set by user) CommMPI communicator of processors involved MPI_Ssend(data,500,MPI_FLOAT,6,33,MPI_COMM_WORLD);

12 DESA ANITSMessage Passing Interface12 Communication Valide ! o Sender must specify a valid destination rank o Receiver must specify a valid source rank o The communicator must be the same o Tags must match o Receiver's buffer must be large enough De plus: o To receive from any source -- MPI_ANY_SOURCE o To receive with any tag -- MPI_ANY_TAG o Actual source and tag are returned in the receiver's status parameter.

13 DESA ANITSMessage Passing Interface13 Message Order o Les messages ne doublent pas l'un l'autre o Process 0 envoie deux messages; Process 2 post deux receives quégal les 2 messages l'ordre est conservé

14 DESA ANITSMessage Passing Interface14 Exemple ---------------------------- P: 0 Got data from processor 1 P: 0 Got 100 elements P: 0 value[5]=5.000000

15 DESA ANITSMessage Passing Interface15 Communication Collective

16 DESA ANITSMessage Passing Interface16 Définition Communication entre un groupe de processus Appelé par tous les processus dans le communicateur Exemples: Barrier synchronization Broadcast, scatter, gather, etc. (Data Distribution) Global sum, global maximum, etc. (Collective Operations) Broadcast : (One-to-all communication) les même données sont envoyés de root process aux autres dans le communicateur int MPI_Bcast ( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)

17 DESA ANITSMessage Passing Interface17 Exemple

18 DESA ANITSMessage Passing Interface18 MPI Data Type MPI DatatypeC datatype MPI_CHAR signed char MPI_SHORT signed short int MPI_INT signed int MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_BYTE MPI_PACKED

19 DESA ANITSMessage Passing Interface19 Derived Data Type

20 DESA ANITSMessage Passing Interface20 Procédure Dans les communications, les données échangées sont typées : MPI_INT, MPI_FLOAT,MPI_DOUBLE, etc. On peut créer des structures de données plus complexes à laide de sous- programmes tels que: MPI_Type_contiguous, MPI_Type_vector, MPI_Type_ struct MPI_Type_indexed, MPI_Type_hvector, MPI_Type_hindexed chaque fois que lon crée un type de données, il faut le valider à laide du sous-programme MPI_TYPE_COMMIT(). Si on souhaite réutiliser le même type, on doit le libérer avec le sous- programme MPI_TYPE_FREE(). MPI_Type_extent : sert à déterminer la taille (in bytes) du Data Type MPI_Type_extent (MPI_Datatype datatype, int* extent).

21 DESA ANITSMessage Passing Interface21 Types contigus MPI_TYPE_CONTIGUOUS() crée une structure de données à partir dun ensemble homogène de type prédéfini de données contiguës en mémoire. int MPI_Type_contiguous (int count, MPI_Datatype oldtype, MPI_Datatype *newtype )

22 DESA ANITSMessage Passing Interface22 Exemple ---------------------------- P:1 received coords are (15,23,6)

23 DESA ANITSMessage Passing Interface23 MPI_TYPE_VECTOR() crée une structure de données à partir dun ensemble homogène de type prédéfini de données distantes dun pas constant en mémoire. Le pas est donné en nombre déléments. Types Vector (avec un pas constant) MPI_TYPE_VECTOR (6,1,5, MPI_FLOAT,nouveau_type,code) Synopsis int MPI_Type_vector( int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype *newtype )

24 DESA ANITSMessage Passing Interface24 Types HVECTOR (avec un pas constant) MPI_TYPE_HVECTOR() crée une structure de données à partir dun ensemble homogène de type prédéfini de données distantes dun pas constant en mémoire. Le pas est donné en nombre doctets. Cette instruction est utile lorsque le type générique nest plus un type de base (MPI_INT, MPI_FLOAT,...) mais un type plus complexe construit à laide des sous-programmes MPI vus précédemment. Le pas ne peut plus alors être exprimé en nombre déléments du type générique. Synopsis int MPI_Type_hvector( int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype *newtype ) Input Parameters count number of blocks (nonnegative integer) blocklength number of elements in each block (nonnegative integer) stride number of bytes between start of each block (integer) old_type old datatype (handle)

25 DESA ANITSMessage Passing Interface25 Types INDEXED (homogènes à pas variable) MPI_TYPE_INDEXED() permet de créer une structure de données composée dune séquence de blocs contenant un nombre variable déléments et séparés par un pas variable en mémoire. Ce dernier est exprimé en éléments. Synopsis int MPI_Type_indexed( int count, int blocklens[], int indices[], MPI_Datatype old_type, MPI_Datatype *newtype ) Input Parameters count number of blocks -- also number of entries in indices and blocklens blocklens number of elements in each block (array of nonnegative integers) indices displacement of each block in multiples of old_type (array of integers) old_type old datatype (handle)

26 DESA ANITSMessage Passing Interface26 Types HINDEXED (homogènes à pas variable) MPI_TYPE_HINDEXED() a la même fonctionnalité que MPI_TYPE_INDEXED() sauf que le pas séparant deux blocs de données est exprimé en octets. Cette instruction est utile lorsque le type générique nest pas un type de base MPI (MPI_INT, MPI_FLOAT,...) mais un type plus complexe construit avec les sous-programmes MPI vus précédemment. On ne peut exprimer alors le pas en nombre déléments du type générique doù le recours à MPI_TYPE_HINDEXED(). Attention à la portabilité avec MPI TYPE HINDEXED() ! Synopsis int MPI_Type_hindexed( int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_type, MPI_Datatype *newtype ) Input Parameters count number of blocks -- also number of entries in indices and blocklens blocklens number of elements in each block (array of nonnegative integers) indices byte displacement of each block (array of MPI_Aint) old_type old datatype (handle)

27 DESA ANITSMessage Passing Interface27 Types INDEXED

28 DESA ANITSMessage Passing Interface28 Types HINDEXED

29 DESA ANITSMessage Passing Interface29 Types STRUCT (hétérogènes) Le sous-programme MPI_TYPE_STRUCT() est le constructeur de types le plus général. Il a les mêmes fonctionnalités que MPI_TYPE_INDEXED() mais permet en plus la réplication de blocs de données de types différents. Les paramètres de MPI_TYPE_STRUCT() sont les mêmes que ceux de MPI_TYPE_INDEXED() avec en plus : le champ anciens types est maintenant un vecteur de types de données MPI ; compte tenu de lhétérogénéité des données et de leur alignement en mémoire, le calcul du déplacement entre deux éléments repose sur la différence de leurs adresses. MPI, via MPI_ADDRESS(), fournit un sous-programme portable qui permet de retourner ladresse dune variable.

30 DESA ANITSMessage Passing Interface30

31 DESA ANITSMessage Passing Interface31

32 DESA ANITSMessage Passing Interface32 Exemple P:1 my a is 6 3.140000 0.000000 1.000000 2.000000 3.000002


Télécharger ppt "DESA ANITSMessage Passing Interface1 Présentation Par : Khalil BADDOU Mohammed Ghaouth BELKASMI Mohammed SABER Mounir GRARI Said BENBOUAZA Encadrant: Dr."

Présentations similaires


Annonces Google