Dela via


funktionen MPI_Scatterv

Sprider data från en medlem över alla medlemmar i en grupp. Funktionen MPI_Scatterv utför inversen av den åtgärd som utförs av funktionen MPI_Gatherv .

Syntax

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
);

Parametrar

  • sendbuf [in]
    Pekaren till en buffert som innehåller de data som ska skickas av rotprocessen.

    Parametern sendbuf ignoreras för alla icke-rotprocesser.

    Om parametern comm refererar till en intracommunicator kan du ange ett alternativ på plats genom att ange MPI_IN_PLACE i rotprocessen. Parametrarna recvcount och recvtype ignoreras. Den spridda vektorn anses fortfarande innehålla n segment, där n är gruppstorleken; segmentet som motsvarar rotprocessen flyttas inte.

  • sendcounts [in]
    Antalet element som ska skickas till varje process. Om sendcount[i] är noll är datadelen av meddelandet för den processen tom.

    Parametern sendcount ignoreras för alla icke-rotprocesser.

  • displs [in]
    De dataplatser som ska skickas till varje kommunikationsprocess. Varje plats i matrisen är relativ till motsvarande element i sendbuf-matrisen .

    I parametermatriserna sendbuf, sendcounts och displs refererar det n:e elementet i varje matris till de data som ska skickas till n:e kommunikatorprocessen.

    Den här parametern är bara viktig i rotprocessen.

  • sendtype
    MPI-datatypen för varje element i bufferten.

    Parametern sendcount ignoreras för alla icke-rotprocesser.

  • recvbuf [ut]
    Pekaren till en buffert som innehåller de data som tas emot i varje process. Antalet och datatypen för elementen i bufferten anges i parametrarna recvcount och recvtype .

  • recvcount
    Antalet element i mottagningsbufferten. Om antalet är noll är datadelen av meddelandet tom.

  • recvtype
    Datatypen för elementen i mottagningsbufferten.

  • Root
    Rangordningen i sändningsprocessen inom den angivna kommunikatören.

  • Comm
    Den MPI_Comm kommunikationshandtaget.

Returvärde

Returnerar MPI_SUCCESS vid lyckat resultat. Annars är returvärdet en felkod.

I Fortran lagras returvärdet i parametern 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

Kommentarer

Funktionen MPI_Scatterv utökar funktionerna i funktionen MPI_Scatter genom att tillåta att ett varierande antal data, som anges i matrisen sendcounts , skickas till varje process.

Specifikationen av antal, typer och förskjutningar bör inte göra att någon plats i roten läse mer än en gång.

Alla funktionsparametrar är viktiga för rotprocessen, endast parametrarna recvbuf, recvcount, recvtype, root och comm är viktiga för de andra processerna. Rot- och kommaparametrarna måste vara identiska i alla processer.

Typsignaturen som anges av sendcount-parametrarna och sendtype-parametrarna för rotprocessen måste vara lika med typsignaturen som anges av recvcount- och recvtype-parametrarna för alla processer. Därför måste mängden data som skickas vara lika med mängden data som tas emot mellan ett par processer. Distinkta typmappningar mellan avsändare och mottagare tillåts fortfarande.

Om comm är en intracommunicator blir resultatet som om roten körde n send-åtgärder MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …); och varje process körde en mottagning, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

Om parametern comm refererar till en intercommunicator omfattar anropet alla processer i intercommunicator, men med en grupp, grupp A, som definierar rotprocessen. Alla processer i den andra gruppen, grupp B, anger samma värde i rotparametern, d.v.s. rotprocessens rangordning i grupp A. Rotprocessen anger värdet MPI_ROOT i rotparametern. Alla andra processer i grupp A anger värdet MPI_PROC_NULL i rotparametern . Data sänds från rotprocessen till alla processer i grupp B. Buffertparametrarna för processerna i grupp B måste vara konsekventa med buffertparametern för rotprocessen.

Krav

Produkt

HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package eller HPC Pack 2008 Client Utilities

Huvud

Mpi.h; Mpif.h

Bibliotek

Msmpi.lib

DLL

Msmpi.dll

Se även

MPI Collective Functions

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatter