Dela via


funktionen MPI_Alltoall

Samlar in data från och sprider data till alla medlemmar i en grupp. MPI_Alltoall är ett tillägg för funktionen MPI_Allgather. Varje process skickar distinkta data till var och en av mottagarna. Den jth block som skickas från processen jag tas emot av process j och placeras i i: e blocket i mottagande bufferten.

Syntax

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        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 .

    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 och sendtype ignoreras. Varje process anger data i motsvarande mottagningsbuffertelement. Den n:e processen skickar data till det n:e elementet i mottagningsbufferten.

  • sendcount
    Antalet element i bufferten som anges i parametern sendbuf . Om sendcount är noll är datadelen av meddelandet tom.

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

  • recvbuf [out]
    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 .

  • recvcount
    Antalet element i mottagningsbufferten. Om antalet är noll är datadelen av meddelandet tom.

  • recvtype
    MPI-datatypen för elementen i mottagarbufferten.

  • Comm
    MPI_Comm communicator-handtaget.

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

Alla parametrar är viktiga för alla processer. Kommaparametern måste vara identisk i alla processer.

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

Om comm-parametern refererar till en intracommunicator är resultatet av ett anrop till MPI_ALLGATHER(...) som om varje process körde en sändning till varje process, inklusive sig själv med hjälp MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)av , och att ta emot från alla andra processer med hjälp MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)av .

Om kommaparametern 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. J: e skicka buffert av process i i grupp A bör vara konsekvent med ith ta emot bufferten av process j i grupp B, och vice versa.

Antalet objekt som skickas av processer i grupp A behöver inte vara lika med antalet objekt som skickas av processer i grupp B. I synnerhet kan du flytta data i endast en riktning genom att ange sendcount == 0 för kommunikationen i omvänd riktning.

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

Kollektiva MPI-funktioner

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv