funktionen MPI_Alltoallv

Samlar in data från och sprider data till alla medlemmar i en grupp. Funktionen MPI_Alltoallv ger flexibilitet till funktionen MPI_Alltoall genom att tillåta ett varierande antal data från varje process.

Syntax

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

Parametrar

  • sendbuf [in]
    Pekaren till de data som ska skickas till alla processer i gruppen. Antalet och datatypen för elementen i bufferten anges i parametrarna sendcount och sendtype . Varje element i bufferten motsvarar en process i gruppen.

    Om comm-parametern refererar till en intracommunicator kan du ange ett alternativ på plats genom att ange MPI_IN_PLACE i alla processer. Parametrarna sendcount, sdispls och sendtype ignoreras. Varje process anger data i motsvarande mottagningsbuffertelement.

    Data som skickas och tas emot måste ha samma typkarta som anges av matrisen recvcounts och parametern recvtype . Data läss från platserna för den mottagningsbuffert som anges av parametern rdispls .

  • sendcounts [in]
    Antalet dataelement som den här processen skickar i bufferten som anges i sendbuf-parametern . Om ett element isendcount är noll är datadelen av meddelandet från den processen tom.

  • sdispls [in]
    Platsen, i förhållande till parametern sendbuf , för data för varje kommunikationsprocess.

    Entry j anger förskjutningen i förhållande till sendbuf-parametern som utgående data som är avsedda för process j ska tas från.

  • sendtype
    MPI-datatypen för elementen i sändningsbufferten.

  • recvbuf [ut]
    Pekaren till en buffert som innehåller de data som tas emot från varje process. Antalet och datatypen för elementen i bufferten anges i parametrarna recvcount och recvtype .

  • recvcounts [in]
    Antalet dataelement från varje kommunikationsprocess i mottagningsbufferten.

  • rdispls [in]
    Platsen, i förhållande till parametern recvbuf , för data från varje kommunikationsprocess.

    I parametermatriserna recvbuf, recvcounts och rdispls refererar det n:e elementet i varje matris till de data som tas emot från n:e kommunikatorprocessen.

  • recvtype
    MPI-datatypen för varje element i bufferten.

  • Comm
    Anger MPI_Comm communicator-referensen.

Returvärde

Returnerar MPI_SUCCESS vid lyckat resultat. Annars är returvärdet en felkod.

I Fortran lagras returvärdet i parametern IERROR .

Fortran

    MPI_ALLTOALL(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE,
                COMM, IERROR)
        <type> SENDBUF(*), R.ECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

Kommentarer

Typsignaturen som anges av sendcount- och sendtype-parametrarna för en process måste vara lika med den typsignatur som anges av recvcount- och recvtype-parametrarna för den mottagande processen. Därför måste mängden data som skickas vara lika med mängden data som tas emot mellan ett par processer. Distinkta typmappningar mellan avsändare och mottagare tillåts fortfarande.

Alla parametrar är viktiga för alla processer. Parametern comm måste vara identisk på alla processer.

Om comm-parametern refererar till en intracommunicator, kommer j:e blocket som skickas från process i tas emot av process j och placeras i det i:e blocket i mottagningsbufferten. Dessa block behöver inte alla ha samma storlek.

Resultatet av att anropa funktionen MPI_Alltoallv är som om varje process skickade ett meddelande till alla andra processer med , MPI_Send(sendbuf + sdispls[i]*extent(sendtype), sendcounts[i], sendtype, I, …)och tog emot ett meddelande från alla andra processer med ett anrop till MPI_Recv(recvbuf + rdispls[i]*extent(recvtype), recvcounts[i], recvtype, I, …).

Om du anger alternativet på plats anger du att samma mängd och typ av data skickas och tas emot mellan två processer i gruppen för kommunikatören. Olika processpar kan utbyta olika mängder data. Användarna måste se till att recvcounts[j] och recvtype på process i matchar recvcounts[i] och recvtype på process j. Det här symmetriska utbytet kan vara användbart i program där de data som ska skickas inte används av sändningsprocessen efter MPI_Alltoallv funktionsanrop.

Om parametern comm refererar till en intercommunicator blir resultatet som om varje process i grupp A skickar ett meddelande till varje process i grupp B och vice versa. Jth send buffer of process i in group A should be consistent with the ith receive buffer of process j in group B, and vice versa.

Krav

Produkt

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

Huvud

Mpi.h; Mpif.h

Bibliotek

Msmpi.lib

DLL

Msmpi.dll

Se även

MPI Collective Functions

MPI_Datatype

MPI_Alltoall

MPI_Gather

MPI_Scatter

MPI_Send

MPI_Recv