RPN_COMM

(RPN_COMM_bloc)



integer function RPN_COMM_bloc(nblocx,nblocy)



ARGUMENTS


nblocx,nblocyNombre de blocs dans les directions X et YintegerI
RPN_COMM_bloc0 si ok, -1 si erreurintegerO

DESCRIPTION

Crée les communicateurs nécessaires à l'utilisation de blocs au sein d'un domaine. Ces communicateurs se nomment "BLOC" pour les communications intra-bloc et "BLOCMASTER" pour les communications extra-bloc, soit entre un processeur de chaque bloc.

Les blocs sont construits en divisant le nombre de processeurs en X par nblocx et en Y par nblocy. Ces divisions doivent être exactes pour former des blocs identiques. Il ne serait donc pas possible de former 2 blocs si une dimension comporte un nombre impair de processeurs (alors RPN_COMM_bloc=-1 et un message d'erreur s'affiche).

Utiliser le communicateur "BLOC" pour des communications relatives au bloc courant, avec son rang relatif au bloc tel que montré dans le bloc gris en haut à droite.

Utiliser le communicateur "BLOCMASTER" pour les échanges entre les processeurs #0 de chaque bloc (les processeurs en rouge sur la figure)

Une certaine confusion peut s'installer au niveau de la numérotation des processeurs. Ils ont en effet des rangs différents selon le contexte de la communication. Voyons un exemple avec deux domaines de 6 et 4 processeurs (3x2 et 2x2), divisés en 3 et 1 blocs respectivements, ce qui donne:

ALLDOMMBLOCBLOCMASTER
0000
111MPI_UNDEFINED
222MPI_UNDEFINED
333MPI_UNDEFINED
4000
5101
6202
731MPI_UNDEFINED
841MPI_UNDEFINED
951MPI_UNDEFINED


EXEMPLE

call RPN_COMM_bloc(nblocx, nblocy)
! On suppose que nblocx divise le nombre de PE selon X
! On suppose que nblocy divise le nombre de PE selon Y


VOIR AUSSI

RPN_COMM_*