RPN_COMM |
(RPN_COMM_bloc) |
integer function RPN_COMM_bloc(nblocx,nblocy)
nblocx,nblocy | Nombre de blocs dans les directions X et Y | integer | I |
RPN_COMM_bloc | 0 si ok, -1 si erreur | integer | O |
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:
ALL | DOMM | BLOC | BLOCMASTER |
0 | 0 | 0 | 0 |
1 | 1 | 1 | MPI_UNDEFINED |
2 | 2 | 2 | MPI_UNDEFINED |
3 | 3 | 3 | MPI_UNDEFINED |
4 | 0 | 0 | 0 |
5 | 1 | 0 | 1 |
6 | 2 | 0 | 2 |
7 | 3 | 1 | MPI_UNDEFINED |
8 | 4 | 1 | MPI_UNDEFINED |
9 | 5 | 1 | MPI_UNDEFINED |