Delen via


MPI_Scatterv functie

Spreidingsgegevens van één lid over alle leden van een groep. De functie MPI_Scatterv voert de inverse uit van de bewerking die wordt uitgevoerd door de functie MPI_Gatherv .

Syntaxis

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

Parameters

  • sendbuf [in]
    De aanwijzer naar een buffer die de gegevens bevat die door het hoofdproces moeten worden verzonden.

    De parameter sendbuf wordt genegeerd voor alle niet-hoofdprocessen.

    Als de parameter comm verwijst naar een intracommunicator, kunt u een in-place optie opgeven door MPI_IN_PLACE op te geven in het basisproces. De parameters recvcount en recvtype worden genegeerd. De spreidingsvector wordt nog steeds beschouwd als n segmenten, waarbij n de groepsgrootte is; het segment dat overeenkomt met het hoofdproces, wordt niet verplaatst.

  • sendcounts [in]
    Het aantal elementen dat naar elk proces moet worden verzonden. Als sendcount[i] nul is, is het gegevensgedeelte van het bericht voor dat proces leeg.

    De parameter sendcount wordt genegeerd voor alle niet-hoofdprocessen.

  • displs [in]
    De locaties van de gegevens die naar elk communicatorproces moeten worden verzonden. Elke locatie in de matrix is relatief ten opzichte van het bijbehorende element van de sendbuf-matrix .

    In de parameter matrices sendbuf, sendcounts en displs verwijst het element nth van elke matrix naar de gegevens die moeten worden verzonden naar het nth communicator-proces.

    Deze parameter is alleen van belang in het hoofdproces.

  • sendtype
    Het MPI-gegevenstype van elk element in de buffer.

    De parameter sendcount wordt genegeerd voor alle niet-hoofdprocessen.

  • recvbuf [uit]
    De aanwijzer naar een buffer die de gegevens bevat die tijdens elk proces worden ontvangen. Het aantal en het gegevenstype van de elementen in de buffer worden opgegeven in de parameters recvcount en recvtype .

  • recvcount
    Het aantal elementen in de ontvangstbuffer. Als het aantal nul is, is het gegevensgedeelte van het bericht leeg.

  • recvtype
    Het gegevenstype van de elementen in de ontvangstbuffer.

  • Root
    De positie in het verzendproces binnen de opgegeven communicator.

  • Comm
    De MPI_Comm communicator-ingang.

Retourwaarde

Retourneert MPI_SUCCESS bij succes. Anders is de retourwaarde een foutcode.

In Fortran wordt de retourwaarde opgeslagen in de parameter 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

Opmerkingen

De functie MPI_Scatterv breidt de functionaliteit van de functie MPI_Scatter uit door toe te staan dat een wisselend aantal gegevens, zoals opgegeven in de matrix sendcounts , naar elk proces kan worden verzonden.

De specificatie van aantallen, typen en verplaatsingen mag er niet toe leiden dat een locatie in de hoofdmap meer dan één keer wordt gelezen.

Alle functieparameters zijn belangrijk voor het basisproces, alleen de parameters recvbuf, recvtype, root en comm zijn significant voor de andere processen. De hoofd- en comm-parameters moeten identiek zijn voor alle processen.

De typehandtekening zoals opgegeven door de parameters sendcount en sendtype voor het basisproces moeten gelijk zijn aan de typehandtekening zoals opgegeven door de recvcount- en recvtypeparameters voor alle processen. Daarom moet de hoeveelheid verzonden gegevens gelijk zijn aan de hoeveelheid gegevens die wordt ontvangen tussen een paar processen. Afzonderlijke typekaarten tussen afzender en ontvanger zijn nog steeds toegestaan.

Als comm een intracommunicator is, is het resultaat alsof de hoofdmap n send-bewerkingen MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)heeft uitgevoerd; en elk proces heeft een ontvangstbewerking uitgevoerd, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

Als de comm-parameter verwijst naar een intercommunicator, omvat de aanroep alle processen in de intercommunicator, maar met één groep, groep A, die het basisproces definieert. Alle processen in de andere groep, groep B, stellen dezelfde waarde in de hoofdparameter in, dat wil gezegd, de rang van het basisproces in groep A. Met het basisproces wordt de waarde MPI_ROOT in de parameter root ingesteld. Alle andere processen in groep A stellen de waarde MPI_PROC_NULL in de parameter root . Gegevens worden vanuit het hoofdproces verzonden naar alle processen in groep B. De bufferparameters van de processen in groep B moeten consistent zijn met de bufferparameter van het basisproces.

Vereisten

Product

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

Header

Mpi.h; Mpif.h

Bibliotheek

Msmpi.lib

DLL

Msmpi.dll

Zie ook

Collectieve MPI-functies

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatter