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

publicité
Partage de mémoire en MPI-2
Qu’est-ce que MPI-2 ?
CNAM de Lorraine
Applications concurrentes : conception et
outils (ACCOV/NFP103)
• 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 !
5 - Ouverture : MPI-2
• MPI-2 étend MPI-1 aux nouvelles architectures :
- NUMA (Non Uniform Memory Access),
- clusters de SMP, clusters de NUMA.
Stéphane Vialle
• MPI-2 permet d’exploiter un Parallel File System
• MPI-2 permet de coupler des programmes MPI différents
[email protected]
http://www.metz.supelec.fr/~vialle
• MPI-2 permet d’exploiter une mémoire partagée non-uniforme
Partage de mémoire en MPI-2
Partage de mémoire en MPI-2
Création d’une mémoire partagée
Op. d’accès à la 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 :
int MPI_Win_create (
void *base,
MPI_Aint size,
int disp_unit,
MPI_Info info,
MPI_Comm comm,
MPI_Win *win)
Mémoire
partagée
NUMA
// initial address of window (choice);
// size of window in bytes;
// local unit size for displacements, in bytes;
// info argument;
// communicator;
// window object returned by the call;
PE-0
PE-1
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)
int MPI_Put (
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)
PE-#
// initial address of origin buffer (choice);
// number of entries in origin buffer;
// datatype of each entry in origin buffer;
// rank of target;
// displacement from start of window to;
// target buffer;
// number of entries in target buffer;
// datatype of each entry in target buffer;
// window object used for communication;
int MPI_Get (…)
int MPI_Accumulate (…, MPI_Op op, …)
Partage de mémoire en MPI-2
Partage de mémoire en MPI-2
3 types de synchronisations
3 types de synchronisations
II – mode « actif » à grain fin :
I – mode global (using « fence ») :
PUT
• 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 » !!
• POST : « vous pouvez modifier
ma zone RMA »
PUT
• START : « je souhaite modifier
une zone RMA une fois
autorisé »
GET
FENCE
FENCE
FENCE
• 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 »
1
Partage de mémoire en MPI-2
Partage de mémoire en MPI-2
3 types de synchronisations
3 types de synchronisations
II – mode « actif » à grain fin :
Le séquencement peut être
plus « serré ».
III – mode « passif » à grain fin :
• LOCK : « j’attend de
pouvoir verrouiller la zone
RMA d’un processus cible »
On exploite l’aspect
« relâché » des
synchronisations
• 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
2
Téléchargement