MPI_Gatherv fonction
Collecte les données variables de tous les membres d’un groupe vers un seul membre. La fonction MPI_Gatherv ajoute de la flexibilité à la fonction MPI_Gather en autorisant un nombre variable de données de chaque processus.
Syntaxe
int MPIAPI MPI_Gatherv(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
_In_opt_ int *recvcounts[],
_In_opt_ int *displs[],
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
Paramètres
sendbuf [in]
Handle 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ème processus 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 se trouver à 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 de la mémoire tampon.recvbuf [out, facultatif]
Handle vers une mémoire tampon sur le processus racine qui contient les données reçues de chaque processus, y compris 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.recvcounts[] [in, facultatif]
Nombre d’éléments reçus de chaque processus. Chaque élément du tableau correspond au rang du processus d’envoi. 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.displs[] [in, facultatif]
Emplacement, par rapport au paramètre recvbuf , des données de chaque processus de communication. Les données reçues du processus j sont placées dans la mémoire tampon de réception des éléments de décalage du processus racine [j] du pointeur sendbuf .Dans les tableaux de paramètres recvbuf, recvcounts et displs , le nièmeélément de chaque tableau fait référence aux données reçues du nième processus de communication.
Ce paramètre n’est significatif qu’au niveau du processus racine.
recvtype
Type de données de chaque élément dans la mémoire tampon. Ce paramètre n’est significatif qu’au niveau du processus racine.root
Rang du processus de réception dans le communicateur spécifié.comm
Handle de communication 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_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), 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 à 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 qui sont exécutés 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 |
HpC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package ou HPC Pack 2008 Client Utilities |
En-tête |
Mpi.h ; Mpif.h |
Bibliothèque |
Msmpi.lib |
DLL |
Msmpi.dll |