RMA Remote memory access Types de communication Collective

  • Slides: 27
Download presentation
RMA (Remote memory access)

RMA (Remote memory access)

Types de communication • Collective: Tous les processus du commutator participent activement • Point-à-point,

Types de communication • Collective: Tous les processus du commutator participent activement • Point-à-point, Cible active: Communication entre deux processus. Les deux sont actifs. • Point-à-point, Cible passive: Communication entre deux processus. Un seul est actif.

RMA (Remote memory access): permet plus de souplesse dans la communication entre les processus.

RMA (Remote memory access): permet plus de souplesse dans la communication entre les processus. Un processus « origine » indique tous les paramètres de la communication avec un processus « cible » C’est ce que l’on appelle une « communication à sens unique » .

Communication 3 types de communication: • Put • Get • Accumulate Tous ces appels

Communication 3 types de communication: • Put • Get • Accumulate Tous ces appels sont non-bloquants

Synchronisation 3 types de synchronisation: • Fence • Start, Complete, Post, Wait • Lock,

Synchronisation 3 types de synchronisation: • Fence • Start, Complete, Post, Wait • Lock, unlock

Fenêtre (Window) Mémoire allouée par chaque processus et éventuellement accessible à tous les autres.

Fenêtre (Window) Mémoire allouée par chaque processus et éventuellement accessible à tous les autres. La création d’une fenêtre se fait à l’aide de la commande MPI_Win_Create

Époques • Époque d’accès: période entre deux synchronisation pendant laquelle la communication est possible.

Époques • Époque d’accès: période entre deux synchronisation pendant laquelle la communication est possible. • Époque d’exposition: Période pendant laquelle un processus accepte de rendre disponible sa partie de fenêtre.

Création d’une fenêtre MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win

Création d’une fenêtre MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win); Il s’agit d’un appel collectif

Libérer une fenêtre int MPI_Win_free(MPI_Win *win) Il s’agit aussi d’un appel collectif

Libérer une fenêtre int MPI_Win_free(MPI_Win *win) Il s’agit aussi d’un appel collectif

Allocation de l’espace mémoire int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) Permet d’informer le

Allocation de l’espace mémoire int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) Permet d’informer le compilateur que la mémoire sera utilisée en RMA.

Libérer la moimoire int MPI_Free_mem(void *base)

Libérer la moimoire int MPI_Free_mem(void *base)

MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype

MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)

MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype,

MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)

MPI_Accumulate int MPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count,

MPI_Accumulate int MPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)

Barrière int MPI_Win_fence(int assert, MPI_Win win) Il s’agit d’un appel collectif qui débute et/ou

Barrière int MPI_Win_fence(int assert, MPI_Win win) Il s’agit d’un appel collectif qui débute et/ou termine une époque.

Début d’une époque d’accès int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) Sur certains système,

Début d’une époque d’accès int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) Sur certains système, l’assertion peut être MPI_MODE_NOCHECK mais 0 est toujours valide. Seul le nœud origine fait cet appel

Fin d’une époque d’accès MPI_Win_complete(MPI_Win win) Seul le nœud origine fait cet appel

Fin d’une époque d’accès MPI_Win_complete(MPI_Win win) Seul le nœud origine fait cet appel

Début d’une époque d’exposition int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) Seul le nœud

Début d’une époque d’exposition int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) Seul le nœud cible fait cet appel

Fin d’une époque d’exposition int MPI_Win_wait(MPI_Win win) Seul le nœud origine fait cet appel

Fin d’une époque d’exposition int MPI_Win_wait(MPI_Win win) Seul le nœud origine fait cet appel

Cible active

Cible active

Communicator Deux principale composante: • Groupe: Collection ordonnée de processus • Contexte: permet la

Communicator Deux principale composante: • Groupe: Collection ordonnée de processus • Contexte: permet la gestion des messages Ex. tags) Permet aussi de créer une topologie

Groupe int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) Retourne le groupe associé à un communicator

Groupe int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) Retourne le groupe associé à un communicator

Créer un nouveau groupe int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup)

Créer un nouveau groupe int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup)

Cible passive int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) Le type est

Cible passive int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) Le type est MPI_LOCK_EXCLUSIVE ou MPI_LOCK_SHARED Cet appel est fait par le processus origine seulement.

Cible passive int MPI_Win_unlock(int rank, MPI_Win win) Cet appel est fait par le processus

Cible passive int MPI_Win_unlock(int rank, MPI_Win win) Cet appel est fait par le processus origine seulement.

Cible passive

Cible passive

Exemples Exemple 1 Exemple 2

Exemples Exemple 1 Exemple 2