Delen via


MPI_Scatter functie

Spreiding van gegevens van één lid over alle leden van een groep. De functie MPI_Scatter voert de inverse uit van de bewerking die wordt uitgevoerd door de functie MPI_Gather .

Syntaxis

int MPIAPI MPI_Scatter(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parameters

  • sendbuf [in]
    De ingang 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 comm-parameter verwijst naar een intracommunicator, kunt u een in-place optie opgeven door MPI_IN_PLACE op te geven in het hoofdproces. De parameters recvcount en recvtype worden genegeerd. De verspreide vector wordt nog steeds geacht n segmenten te bevatten, waarbij n de groepsgrootte is; het segment dat overeenkomt met het hoofdproces, wordt niet verplaatst.

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

    De parameter sendcount wordt genegeerd voor alle niet-hoofdprocessen.

  • sendtype
    Het gegevenstype van elk element in de buffer.

    De parameter sendcount wordt genegeerd voor alle niet-hoofdprocessen.

  • recvbuf [uit]
    De ingang naar een buffer die de gegevens bevat die voor 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 rang van het verzendproces binnen de opgegeven communicator.

  • Comm
    De MPI_Comm communicatorgreep.

Retourwaarde

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

In Fortran wordt de retourwaarde opgeslagen in de parameter IERROR .

Fortran

    MPI_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Opmerkingen

Het effect van de functie MPI_Scatter is alsof het hoofdproces een bericht verzendt met behulp van de functie MPI_Send . Dit bericht wordt gesplitst in n gelijke segmenten, één voor elk lid van de groep. Het ith-segment wordt verzonden naar het ith-proces in de groep.

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

De typehandtekening die is opgegeven door de parameters sendcount en sendtype voor het hoofdproces moet gelijk zijn aan de typehandtekening die is opgegeven door de recvcount en parameters voor het opnieuw typen voor alle processen. Daarom moet de hoeveelheid gegevens die wordt verzonden gelijk zijn aan de hoeveelheid gegevens die wordt ontvangen tussen een paar processen. Afzonderlijke typetoewijzingen tussen afzender en ontvanger zijn nog steeds toegestaan.

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

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

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 hoofdproces in groep A. Met het hoofdproces wordt de waarde MPI_ROOT in de hoofdparameter ingesteld. Alle andere processen in groep A stellen de waarde MPI_PROC_NULL in de hoofdparameter . 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 hoofdproces.

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_Scatterv