Delen via


MPI_Gatherv functie

Verzamelt variabele gegevens van alle leden van een groep tot één lid. De functie MPI_Gatherv voegt flexibiliteit toe aan de MPI_Gather-functie door een wisselende telling van gegevens uit elk proces toe te staan.

Syntaxis

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

Parameters

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

    Als de comm parameter verwijst naar een intracommunicator, kunt u een in-place optie opgeven door MPI_IN_PLACE in alle processen op te geven. De parameters sendcount en sendtype worden genegeerd. Elk proces voert gegevens in het bijbehorende ontvangstbufferelement in. Het nth-proces verzendt gegevens naar het nth-element van de ontvangstbuffer. De gegevens die door het hoofdproces worden verzonden, worden verondersteld op de juiste plaats in de ontvangstbuffer te staan.

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

  • sendtype
    Het gegevenstype van elk element in de buffer.

  • recvbuf [uit, optioneel]
    De ingang naar een buffer in het hoofdproces die de gegevens bevat die van elk proces worden ontvangen, inclusief gegevens die worden verzonden door het hoofdproces. Deze parameter is alleen van belang in het hoofdproces. De parameter recvbuf wordt genegeerd voor alle niet-hoofdprocessen.

  • aantallen[] [in, optioneel]
    Het aantal elementen dat van elk proces wordt ontvangen. Elk element in de matrix komt overeen met de rang van het verzendproces. Als het aantal nul is, is het gegevensgedeelte van het bericht leeg. Deze parameter is alleen van belang in het hoofdproces.

  • displs[] [in, optioneel]
    De locatie, ten opzichte van de parameter recvbuf , van de gegevens van elk communicatorproces. De gegevens die worden ontvangen van proces j worden in de ontvangstbuffer van de basisproces offset displs[j] elementen van de sendbuf-pointer geplaatst.

    In de parametermatrices recvbuf, recvcounts en displs verwijst het element nth van elke matrix naar de gegevens die worden ontvangen van het nth communicator-proces.

    Deze parameter is alleen van belang in het hoofdproces.

  • recvtype
    Het gegevenstype van elk element in de buffer. Deze parameter is alleen van belang in het hoofdproces.

  • Root
    De rang van het ontvangende proces 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_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, IERROR

Opmerkingen

Alle functieparameters zijn belangrijk voor het hoofdproces, alleen sendbuf, sendcount, sendtype, root en comm zijn van belang voor de andere processen. De hoofd- en comm-parameters moeten identiek zijn voor alle processen.

Over het algemeen zijn afgeleide gegevenstypen toegestaan voor zowel de parameters sendtype als recvtype . De typehandtekening zoals opgegeven door de parameters sendtype en recvtype voor elk proces moet gelijk zijn aan de typehandtekening van de parameters recvcount en sendcount in het hoofdproces. De hoeveelheid gegevens die wordt verzonden, moet gelijk zijn aan de hoeveelheid gegevens die wordt ontvangen tussen het hoofdproces en elk afzonderlijk proces. Afzonderlijke typetoewijzingen tussen afzender en ontvanger zijn nog steeds toegestaan.

De specificatie van aantallen en typen mag er niet toe leiden dat een locatie in de hoofdmap meer dan één keer wordt geschreven. Zo'n oproep is onjuist.

Als de comm-parameter verwijst naar een intracommunicator, sturen alle processen de inhoud van de verzendbuffer naar het hoofdproces. Het hoofdproces ontvangt de berichten en slaat deze op in rangschikkingsvolgorde. Het resultaat is alsof elk van de n-processen in de groep die worden uitgevoerd een aanroep naar MPI_Send(sendbuf, sendcount, sendtype, root, …); en de hoofdmap n-aanroepen naar MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)heeft uitgevoerd. De waarde van extent(recvtype) wordt verkregen met behulp van de functie MPI_Type_get_extent . Een alternatieve beschrijving van de functie is dat de n-berichten die worden verzonden door de processen in de groep, worden samengevoegd in rangschikkingsvolgorde en het resulterende bericht door de hoofdmap wordt ontvangen alsof door een aanroep naar MPI_RECV(recvbuf, recvcountn, recvtype, ...). De ontvangstbuffer wordt genegeerd voor alle niet-hoofdprocessen.

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