Partager via


MPI_Scatterv, fonction

Diffuse les données d’un membre entre tous les membres d’un groupe. La fonction MPI_Scatterv effectue l’inverse de l’opération effectuée par la fonction MPI_Gatherv .

Syntaxe

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ 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 par le processus racine.

    Le paramètre sendbuf est ignoré pour tous les processus non racines.

    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 le processus racine. Les paramètres recvcount et recvtype sont ignorés. Le vecteur dispersé est toujours considéré comme contenant n segments, où n est la taille du groupe ; le segment qui correspond au processus racine n’est pas déplacé.

  • sendcounts [in]
    Nombre d’éléments à envoyer à chaque processus. Si sendcount[i] est égal à zéro, la partie données du message pour ce processus est vide.

    Le paramètre sendcount est ignoré pour tous les processus non racines.

  • displs [in]
    Emplacements des données à envoyer à chaque processus de communication. Chaque emplacement dans le tableau est relatif à l’élément correspondant du tableau sendbuf .

    Dans les tableaux de paramètres sendbuf, sendcounts et displs , le nièmeélément de chaque tableau fait référence aux données à envoyer au nièmeprocessus de communication.

    Ce paramètre n’est significatif qu’au niveau du processus racine.

  • sendtype
    Type de données MPI de chaque élément de la mémoire tampon.

    Le paramètre sendcount est ignoré pour tous les processus non racines.

  • recvbuf [out]
    Pointeur vers une mémoire tampon qui contient les données reçues sur chaque processus. Le nombre et le type de données des éléments dans la mémoire tampon sont spécifiés dans les paramètres recvcount et recvtype .

  • recvcount
    Nombre d’éléments dans la mémoire tampon de réception. Si le nombre est égal à zéro, la partie données du message est vide.

  • recvtype
    Type de données des éléments dans la mémoire tampon de réception.

  • root
    Classement dans le processus d’envoi 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_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

Remarques

La fonction MPI_Scatterv étend les fonctionnalités de la fonction MPI_Scatter en autorisant l’envoi d’un nombre variable de données, comme spécifié dans le tableau sendcounts , à chaque processus.

La spécification des nombres, des types et des déplacements ne doit pas entraîner la lecture d’un emplacement sur la racine plusieurs fois.

Tous les paramètres de fonction sont significatifs sur le processus racine, seuls les paramètres recvbuf, recvcount, recvtype, root et comm sont significatifs sur les autres processus. Les paramètres racine et comm doivent être identiques sur tous les processus.

La signature de type spécifiée par les paramètres sendcount et sendtype pour le processus racine doivent être égales à la signature de type spécifiée par les paramètres recvcount et recvtype pour tous les processus. Par conséquent, la quantité de données envoyées doit être égale à la quantité de données reçues entre n’importe quelle paire de processus. Les mappages de types distincts entre l’expéditeur et le destinataire sont toujours autorisés.

Si comm est un intracommunicateur, le résultat est comme si la racine exécutait n opérations MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)d’envoi ; et chaque processus exécutait une réception, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

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

Voir aussi

Fonctions collectives MPI

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatter