Delen via


MPI_Alltoallw functie

Verzamelt gegevens van en spreiding van gegevens naar alle leden van een groep. De functie MPI_Alltoallw is de meest algemene vorm van volledige gegevensuitwisseling in deze API. MPI_Alltoallw maakt afzonderlijke specificatie van het aantal, de verplaatsing en het gegevenstype mogelijk.

Syntaxis

int MPIAPI MPI_Alltoallw(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts[],
  _In_  int          *sdispls[],
  _In_  MPI_Datatype sendtypes[],
  _Out_ void         *recvbuf,
  _In_  int          *recvcounts[],
  _In_  int          *rdispls[],
  _In_  MPI_Datatype recvtypes[],
        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 op te geven MPI_IN_PLACE 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 hetzelfde type toewijzing hebben, zoals opgegeven door de matrix recvcounts en de parameter recvtype , en worden gelezen van de locaties van de ontvangstbuffer zoals opgegeven door de parameter rdispls .

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

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

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

  • sendtypes [in]
    Het gegevenstype voor elk van de elementen in de verzendbuffer. Vermelding j geeft het type gegevens op dat wordt verzonden om j in de groep te verwerken.

  • 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, in bytes, ten opzichte van de recvbuf-parameter , van de gegevens van elk communicator-proces. Vermelding i geeft de verplaatsing op ten opzichte van de recvbuf-parameter waarop de binnenkomende gegevens van proces i moeten worden opgeslagen.

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

  • recvtypes [in]
    Het gegevenstype van elk element in de buffer. Vermelding i geeft het type gegevens op dat wordt ontvangen van proces i.

  • 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_ALLTOALLW(SENDBUF, SENDCOUNT, SDISPLS, SENDTYPE, RECVBUF, RECVCOUNTS, RDISPLS, RECVTYPE,COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPES(*), SDISPLS(*), RECVCOUNTS(*), RDISPLS(*), RECVTYPE, COMM, IERROR

Opmerkingen

Belangrijk

Voor maximale flexibiliteit wordt de verplaatsing van blokken binnen de verzend- en ontvangstbuffers opgegeven in bytes. 

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

Als de comm parameter verwijst naar een intracommunicator, dan 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.

De typehandtekening die is opgegeven door de parameters sendcounts[j] en sendtypes[j] voor proces i moet gelijk zijn aan de typehandtekening die is gekoppeld aan de recvcounts[i] en recvtypes[i] bij proces j. Daarom moet de hoeveelheid verzonden gegevens gelijk zijn aan de hoeveelheid gegevens die wordt ontvangen tussen een paar processen. Afzonderlijke typetoewijzingen tussen afzender en ontvanger zijn nog steeds toegestaan.

Het resultaat van een aanroep naar de functie MPI_Alltoallw is alsof elk proces een bericht naar elk ander proces heeft verzonden met MPI_Send(sendbuf+sdispls[i],sendcounts[i],sendtypes[i] ,i,...), en een bericht heeft ontvangen van elk ander proces met een aanroep naar MPI_Recv(recvbuf+rdispls[i],recvcounts[i],recvtypes[i] ,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.

Als de comm-parameter 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_Alltoallv

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv