Pr sentation
This presentation is the property of its rightful owner.
Sponsored Links
1 / 32

Présentation PowerPoint PPT Presentation


  • 63 Views
  • Uploaded on
  • Presentation posted in: General

Présentation. Message Passing Interface. Par : Khalil BADDOU Mohammed Ghaouth BELKASMI Mohammed SABER Mounir GRARI Said BENBOUAZA Encadrant: Dr. Abdelhaq LAKHOUAJA. Plan. Tour d’Horizon : Monde MPI et Structure Communication point to point Communication Collective

Download Presentation

Présentation

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Pr sentation

Présentation

Message Passing Interface

Par :Khalil BADDOU

Mohammed Ghaouth BELKASMI

Mohammed SABER

Mounir GRARI

Said BENBOUAZA

Encadrant: Dr. Abdelhaq LAKHOUAJA

Message Passing Interface


Pr sentation

Plan

  • Tour d’Horizon :Monde MPI et Structure

  • Communication point to point

  • Communication Collective

  • Types de Données MPI Dérivée

Message Passing Interface


Monde mpi et structure

Monde MPI et Structure

Message Passing Interface


Mpi structure

MPI Structure

  • Header File :

  • #include ‘’mpi.h’’

  • Format des Fonctions MPI :

  • error = MPI_Xxxx ( Parametre , …);

  • MPI_Xxxx ( Parametre , …);

  • Initialisation MPI :

  • int MPI_Init(int argc , char *argv[])

  • //doit être le premier appel(seulement une fois)

Message Passing Interface


Mpi communicator

MPI Communicator

  • Collection des processus réservés, qui vont communiquer entre eux.

  • Plus souvent, on utilise MPI_COMM_WORLD, le communicateur par défaut.

  • Définie dans MPI_Init()

Message Passing Interface


Propri t s

Propriétés

  • Rank : Process ID, identifiant assigné par le système quand le processus est initialisé.

  • MPI_Comm_rank(MPI_Comm comm, int *rank)

  • Utilisé pour spécifier la source et la destination des messages.

  • Commence à partir de zéro.

  • Size : Combien de processus sont dans le communicateur?

  • MPI_Comm_size(MPI_Comm comm,int *size)

Message Passing Interface


Quitter mpi

Quitter MPI

  • int MPI_Finalize()

  • doit être appelé à la fin par tous les processus

  • 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();

}

Message Passing Interface


Communication point point

Communication Point à Point

  • Communication entre deux processus

  • Le processus source envoie un message au processus destination

  • Destination reçoit le message

  • La communication est établie à travers le Communicateur.

  • La source et la destination sont identifiées par leurs rangs dans le Communicateur.

Message Passing Interface


Modes de communication

Modes de communication

Message Passing Interface


Routine

Routine

  • Envoie de Message :

    • int MPI_Ssend(void *buf,int count,MPI_Datatype datatype, int dest,int tag,MPI_Comm comm)

Message Passing Interface


Arguments

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);

Message Passing Interface


Communication valide

Communication Valide !

  • Sender must specify a valid destination rank

  • Receiver must specify a valid source rank

  • The communicator must be the same

  • Tags must match

  • Receiver's buffer must be large enough

  • De plus:

    • To receive from any source -- MPI_ANY_SOURCE

    • To receive with any tag -- MPI_ANY_TAG

    • Actual source and tag are returned in the receiver's status parameter.

Message Passing Interface


Message order

Message Order

  • Les messages ne doublent pas l'un l'autre

  • Process 0 envoie deux messages; Process 2 post deux receives qu’égal les 2 messages

  •  l'ordre est conservé

Message Passing Interface


Exemple

Exemple

----------------------------

P: 0 Got data from processor 1

P: 0 Got 100 elements

P: 0 value[5]=5.000000

Message Passing Interface


Communication collective

Communication Collective

Message Passing Interface


D finition

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)

Message Passing Interface


Exemple1

Exemple

Message Passing Interface


Mpi data type

MPI Data Type

Message Passing Interface


Derived data type

Derived Data Type

Message Passing Interface


Proc dure

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 à l’aide 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 l’on crée un type de données, il faut le valider à l’aide 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).

Message Passing Interface


Types contigus

Types contigus

  • MPI_TYPE_CONTIGUOUS() crée une structure de données à partir d’un 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 )

Message Passing Interface


Exemple2

Exemple

----------------------------

P:1 received coords are (15,23,6)

Message Passing Interface


Types vector avec un pas constant

Types Vector (avec un pas constant)

  • MPI_TYPE_VECTOR() crée une structure de données à partir d’un ensemble homogène de type prédéfini de données distantes d’un pas constant en mémoire.

  • Le pas est donné en nombre d’éléments.

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 )

Message Passing Interface


Types hvector avec un pas constant

Types HVECTOR (avec un pas constant)

  • MPI_TYPE_HVECTOR() crée une structure de données à partir d’un ensemble homogène de type prédéfini de données distantes d’un pas constant en mémoire.

  • Le pas est donné en nombre d’octets.

  • Cette instruction est utile lorsque le type générique n’est plus un type de base (MPI_INT, MPI_FLOAT,...) mais un type plus complexe construit à l’aide 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)

Message Passing Interface


Types indexed homog nes pas variable

Types INDEXED (homogènes à pas variable)

  • MPI_TYPE_INDEXED() permet de créer une structure de données composée d’une 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)

Message Passing Interface


Pr sentation

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 n’est 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 d’où 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)

Message Passing Interface


Pr sentation

Types INDEXED

Message Passing Interface


Pr sentation

Types HINDEXED

Message Passing Interface


Types struct h t rog nes

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 l’hé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 l’adresse d’une variable.

Message Passing Interface


Pr sentation

Message Passing Interface


Pr sentation

Message Passing Interface


Exemple3

Exemple

P:1 my a is 6 3.140000 0.000000 1.000000 2.000000 3.000002

Message Passing Interface


  • Login