Qu`est-ce que MPI-2 ? Création d`une mémoire partagée Op. d

1
CNAM de Lorraine
Applications concurrentes : conception et
outils (ACCOV/NFP103)
5 - Ouverture : MPI-2
Stéphane Vialle
http://www.metz.supelec.fr/~vialle
Partage de mémoire en MPI-2
Qu’est-ce que MPI-2 ?
• MPI-2 est une extension de MPI-1 …
• MPI-1 : envois de messages entre processeurs d’architectures
distribuées (ex : clusters)
MPI-1 : conçu il y a « longtemps » et adapté aux anciennes
architectures distribuées !
MPI-2 étend MPI-1 aux nouvelles architectures :
- NUMA (Non Uniform Memory Access),
- clusters de SMP, clusters de NUMA.
MPI-2 permet d’exploiter un Parallel File System
MPI-2 permet de coupler des programmes MPI différents
MPI-2 permet d’exploiter une mémoire partagée non-uniforme
Partage de mémoire en MPI-2
Création d’une mémoire partagée
• Inspirée des « shmem » (Cray – 1990+) ?
• Dénomination MPI-2 : Remote Memory Access (RMA)
• Chaque processeur exécute un : MPI_Win_Create
et met une partie de sa RAM dans la mémoire partagée NUMA :
Mémoire
partagée
NUMA PE-0 PE-1 PE-#
int MPI_Win_create (
void *base, // initial address of window (choice);
MPI_Aint size, // size of window in bytes;
int disp_unit, // local unit size for displacements, in bytes;
MPI_Info info, // info argument;
MPI_Comm comm, // communicator;
MPI_Win *win) // window object returned by the call;
Partage de mémoire en MPI-2
Op. d’accès à la mémoire partagée
int MPI_Put (
void *origin_addr, // initial address of origin buffer (choice);
int origin_count, // number of entries in origin buffer;
MPI_Datatype origin_datatype, // datatype of each entry in origin buffer;
int target_rank, // rank of target;
MPI_Aint target_disp, // displacement from start of window to;
// target buffer;
int target_count, // number of entries in target buffer;
MPI_Datatype target_datatype, // datatype of each entry in target buffer;
MPI_Win win) // window object used for communication;
int MPI_Get (…)
int MPI_Accumulate (…, MPI_Op op, …)
3 opérations d’accès seulement (simple) + des synchronisations :
• PUT : dépose des données dans une window de la mémoire partagée,
• GET : lit des données dans une window de la mémoire partagée,
• ACCUMULATE (combine des données à celles déjà présentes)
Partage de mémoire en MPI-2
3 types de synchronisations
I – mode global (using « fence ») : PUT
PUT
GET
FENCE FENCE FENCE
• FENCE : « j’attends que toutes
les opérations sur ma zone RMA
soient terminées »
Tous les processus exécutent un
« FENCE »
Æ
sorte de barrière
de synchronisation (relâchée) sur
les mises à jour de l’ensemble de
la mémoire partagée.
Une seule opération conseillée
entre deux « FENCES » !!
Partage de mémoire en MPI-2
3 types de synchronisations
II – mode « actif » à grain fin :
• POST : « vous pouvez modifier
ma zone RMA »
• START : « je souhaite modifier
une zone RMA une fois
autorisé »
• COMPLETE : « j’ai fini de
modifier une zone RMA
autorisé »
• WAIT : « j’attends la fin des
modifications de ma zone RMA,
et je la re-vérouille »
2
Partage de mémoire en MPI-2
3 types de synchronisations
II – mode « actif » à grain fin :
Le séquencement peut être
plus « serré ».
On exploite l’aspect
« relâché » des
synchronisations
Partage de mémoire en MPI-2
3 types de synchronisations
III – mode « passif » à grain fin :
• LOCK : « j’attend de
pouvoir verrouiller la zone
RMA d’un processus cible »
• Je lis ou j’écris (suis seul à le
faire)
• UNLOCK : « je dévérouille
la zone RMA d’un
processus cible ».
Le processus « cible » ne
contrôle rien! (passif)
Partage de mémoire en MPI-2
FIN
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!