Delen via


MPI_Alltoallv functie

Verzamelt gegevens uit en verspreidt gegevens naar alle leden van een groep. De functie MPI_Alltoallv voegt flexibiliteit toe aan de functie MPI_Alltoall door een wisselende telling van gegevens uit elk proces toe te staan.

Syntaxis

int MPIAPI MPI_Alltoallv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *sdispls,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts,
  _In_  int          *rdispls,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parameters

  • sendbuf [in]
    De aanwijzer naar de gegevens die naar alle processen in de groep moeten worden verzonden. Het aantal en het gegevenstype van de elementen in de buffer worden opgegeven in de parameters sendcount en sendtype . Elk element in de buffer komt overeen met een proces in de groep.

    Als de comm-parameter verwijst naar een intracommunicator, kunt u een in-place optie opgeven door MPI_IN_PLACE op te geven in alle processen. De parameters sendcount, sdispls en sendtype worden genegeerd. Elk proces voert gegevens in het bijbehorende ontvangstbufferelement in.

    Gegevens die worden verzonden en ontvangen, moeten dezelfde typetoewijzing hebben als die is opgegeven door de matrix recvcounts en de parameter recvtype . Gegevens worden gelezen vanaf de locaties van de ontvangstbuffer die is opgegeven door de parameter rdispls .

  • sendcounts [in]
    Het aantal gegevenselementen dat met dit proces wordt verzonden in de buffer die is opgegeven in de parameter sendbuf . Als een element insendcount nul is, is het gegevensgedeelte van het bericht van dat proces leeg.

  • sdispls [in]
    De locatie, ten opzichte van de sendbuf-parameter , van de gegevens voor elk communicator-proces.

    Vermelding j geeft de verplaatsing aan ten opzichte van de parameter sendbuf waaruit de uitgaande gegevens moeten worden opgehaald die bestemd zijn voor proces j.

  • sendtype
    Het MPI-gegevenstype van de elementen in de verzendbuffer.

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

  • recvcounts [in]
    Het aantal gegevenselementen van elk communicatorproces in de ontvangstbuffer.

  • rdispls [in]
    De locatie, ten opzichte van de parameter recvbuf , van de gegevens van elk communicator-proces.

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

  • recvtype
    Het MPI-gegevenstype van elk element in buffer.

  • Comm
    Hiermee geeft u 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_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Opmerkingen

De typehandtekening die is opgegeven door de parameters sendcount en sendtype voor een proces, moeten gelijk zijn aan de typehandtekening die is opgegeven door de parameters recvcount en recvtype van het ontvangende proces. 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.

Alle parameters zijn belangrijk voor alle processen. De parameter comm moet identiek zijn voor alle processen.

Als de comm parameter verwijst naar een intracommunicator, wordt het jth blok dat wordt verzonden van proces i ontvangen door proces j en in het ith blok van de ontvangstbuffer geplaatst. Deze blokken hoeven niet allemaal even groot te zijn.

Het resultaat van het aanroepen van de MPI_Alltoallv-functie is alsof elk proces een bericht heeft verzonden naar elk ander proces met, MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)en een bericht heeft ontvangen van elk ander proces met een aanroep naar MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …).

Als u de optie in-place opgeeft, wordt aangegeven dat dezelfde hoeveelheid en hetzelfde type gegevens worden verzonden en ontvangen tussen twee processen in de groep van de communicator. Verschillende paren van processen kunnen verschillende hoeveelheden gegevens uitwisselen. Gebruikers moeten ervoor zorgen dat recvcounts[j] en recvtype op proces overeenkomen met recvcounts[i] en recvtype op proces j. Deze symmetrische uitwisseling kan nuttig zijn in toepassingen waarbij de gegevens die moeten worden verzonden, niet worden gebruikt door het verzendproces na de MPI_Alltoallv functie-aanroep.

Als de parameter comm verwijst naar een intercommunicator, is het resultaat alsof elk proces in groep A een bericht verzendt naar elk proces in groep B en omgekeerd. De jth send buffer van proces i in groep A moet consistent zijn met de ith receive buffer van proces j in groep B, en vice versa.

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_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv