MPI_Gather, fonction
Collecte les données de tous les membres d’un groupe vers un seul membre.
Syntaxe
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Paramètres
sendbuf [in]
Pointeur vers une mémoire tampon qui contient les données à envoyer au processus racine.Si le paramètre comm fait référence à un intracommunicateur, vous pouvez spécifier une option sur place en spécifiant MPI_IN_PLACE dans tous les processus. Les paramètres sendcount et sendtype sont ignorés. Chaque processus entre des données dans l’élément de mémoire tampon de réception correspondant. Le nièmeprocessus envoie des données au nièmeélément de la mémoire tampon de réception. Les données envoyées par le processus racine sont supposées être à l’emplacement correct dans la mémoire tampon de réception.
sendcount
Nombre d’éléments dans la mémoire tampon d’envoi. Si sendcount est égal à zéro, la partie données du message est vide.sendtype
Type de données de chaque élément dans la mémoire tampon.recvbuf [out, facultatif]
Pointeur vers une mémoire tampon sur le processus racine qui contient les données reçues de chaque processus. Il inclut les données envoyées par le processus racine. Ce paramètre n’est significatif qu’au niveau du processus racine. Le paramètre recvbuf est ignoré pour tous les processus non racines.recvcount
Nombre d’éléments reçus de chaque processus. Ce nombre n’est pas le nombre total d’éléments dans la mémoire tampon. Si le nombre est égal à zéro, la partie données du message est vide. Ce paramètre n’est significatif qu’au niveau du processus racine.recvtype
Type de données MPI de chaque élément dans la mémoire tampon. Ce paramètre n’est significatif qu’au niveau du processus racine.root
Classement du processus de réception dans le communicateur spécifié.comm
Handle de communicateur MPI_Comm.
Valeur retournée
Retourne MPI_SUCCESS en cas de réussite. Sinon, la valeur de retour est un code d’erreur.
Dans Fortran, la valeur de retour est stockée dans le paramètre IERROR .
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
Remarques
Tous les paramètres de fonction sont significatifs sur le processus racine, seuls sendbuf, sendcount, sendtype, root et comm sont significatifs sur les autres processus. Les paramètres racine et comm doivent être identiques sur tous les processus.
En règle générale, les types de données dérivés sont autorisés pour les paramètres sendtype et recvtype . La signature de type spécifiée par les paramètres sendtype et recvtype sur chaque processus doit être égale à la signature de type des paramètres recvcount et sendcount sur le processus racine. La quantité de données envoyées doit être égale à la quantité de données reçues entre le processus racine et chaque processus individuel. Les mappages de types distincts entre l’expéditeur et le destinataire sont toujours autorisés.
La spécification des nombres et des types ne doit pas entraîner l’écriture d’un emplacement sur la racine plusieurs fois. Un tel appel est erroné.
Si le paramètre comm fait référence à un intracommunicateur, tous les processus envoient le contenu de sa mémoire tampon d’envoi au processus racine. Le processus racine reçoit les messages et les stocke dans l’ordre de classement. Le résultat est comme si chacun des n processus dans le groupe exécutait un appel à MPI_Send(sendbuf, sendcount, sendtype, root, …)
; et que la racine avait exécuté n appels à MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)
. La valeur de extent(recvtype)
est obtenue à l’aide de la fonction MPI_Type_get_extent . Une autre description de la fonction est que les n messages envoyés par les processus du groupe sont concaténés dans l’ordre de classement, et que le message résultant est reçu par la racine comme si par un appel à MPI_RECV(recvbuf, recvcountn, recvtype, ...)
. La mémoire tampon de réception est ignorée pour tous les processus non racines.
Si le paramètre comm fait référence à un intercommunicateur, l’appel implique tous les processus de l’intercommunicateur, mais avec un groupe, le groupe A, qui définit le processus racine. Tous les processus de l’autre groupe, le groupe B, définissent la même valeur dans le paramètre racine , c’est-à-dire le rang du processus racine dans le groupe A. Le processus racine définit la valeur MPI_ROOT dans le paramètre racine . Tous les autres processus du groupe A définissent la valeur MPI_PROC_NULL dans le paramètre racine . Les données sont diffusées à partir du processus racine vers tous les processus du groupe B. Les paramètres de mémoire tampon des processus du groupe B doivent être cohérents avec le paramètre de mémoire tampon du processus racine.
Configuration requise
Produit |
Package redistribuable MS-MPI HPC Pack 2012, package redistribuable HPC Pack 2008 R2 MS-MPI, package redistribuable MS-MPI HPC Pack 2008 ou utilitaires clients HPC Pack 2008 |
En-tête |
Mpi.h ; Mpif.h |
Bibliothèque |
Msmpi.lib |
DLL |
Msmpi.dll |