Freigeben über


MPI_Alltoall-Funktion

Sammelt Daten aus und verteilt Daten an alle Mitglieder einer Gruppe. Die MPI_Alltoall ist eine Erweiterung der MPI_Allgather-Funktion . Jeder Prozess sendet unterschiedliche Daten an jeden empfänger. Der jth-Block, der vom Prozess i gesendet wird, wird vom Prozess j empfangen und im ith-Block des Empfangspuffers platziert.

Syntax

int MPIAPI MPI_Alltoall(
  _In_  void         *sendbuf,
        int          sendcount,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        MPI_Comm     comm
);

Parameter

  • sendbuf [in]
    Der Zeiger auf die Daten, die an alle Prozesse in der Gruppe gesendet werden sollen. Die Anzahl und der Datentyp der Elemente im Puffer werden in den Parametern sendcount und sendtype angegeben.

    Wenn der comm-Parameter auf einen Intrakommunikationsgeber verweist, können Sie eine direkte Option angeben, indem Sie in allen Prozessen MPI_IN_PLACE angeben. Die Parameter sendcount und sendtype werden ignoriert. Jeder Prozess erfasst Daten im entsprechenden Empfangspufferelement. Der nth-Prozess sendet Daten an das nth-Element des Empfangspuffers.

  • sendcount
    Die Anzahl der Elemente im Puffer, die im sendbuf-Parameter angegeben ist. Wenn sendcount 0 ist, ist der Datenteil der Nachricht leer.

  • sendtype
    Der MPI-Datentyp der Elemente im Sendepuffer.

  • recvbuf [out]
    Der Zeiger auf einen Puffer, der die Daten enthält, die von jedem Prozess empfangen werden. Die Anzahl und der Datentyp der Elemente im Puffer werden in den Parametern recvcount und recvtype angegeben.

  • recvcount
    Die Anzahl der Elemente im Empfangspuffer. Wenn die Anzahl 0 ist, ist der Datenteil der Nachricht leer.

  • recvtype
    Der MPI-Datentyp der Elemente im Empfangspuffer.

  • comm
    Das MPI_Comm Communicatorhandle.

Rückgabewert

Gibt MPI_SUCCESS nach Erfolg zurück. Andernfalls ist der Rückgabewert ein Fehlercode.

In Fortran wird der Rückgabewert im IERROR-Parameter gespeichert.

Fortran

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

Hinweise

Alle Parameter sind für alle Prozesse von Bedeutung. Der comm-Parameter muss für alle Prozesse identisch sein.

Die typsignatur, die vom sendcount angegeben wird, und sendtype-Parameter für einen Prozess müssen gleich der Typsignatur sein, die durch den recvcount-Parameter und recvtype-Parameter angegeben wird. Daher muss die Menge der gesendeten Daten der Datenmenge entsprechen, die zwischen einem beliebigen Prozesspaar empfangen wird. Unterschiedliche Typzuordnungen zwischen Absender und Empfänger sind weiterhin zulässig.

Wenn der comm-Parameter auf einen Intrakommunikationsgeber verweist, ist das Ergebnis eines Aufrufs MPI_ALLGATHER(...) von so, als ob jeder Prozess einen Sendevorgang an jeden Prozess ausgeführt hat, einschließlich sich selbst, indem er verwendet MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)und von jedem anderen Prozess mit MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, I, …)empfängt.

Wenn der comm-Parameter auf einen Intercommunicator verweist, dann ist das Ergebnis, als sendet jeder Prozess in Gruppe A eine Nachricht an jeden Prozess in Gruppe B und umgekehrt. Der j-teSendepuffer des Prozesses i in Gruppe A sollte mit dem i. Empfangspuffer des Prozesses j in Gruppe B konsistent sein und umgekehrt.

Die Anzahl der Elemente, die von Prozessen in Gruppe A gesendet werden, muss nicht gleich der Anzahl von Elementen sein, die von Prozessen in Gruppe B gesendet werden. Insbesondere können Sie Daten nur in eine Richtung verschieben, indem Sie sendcount == 0 für die Kommunikation in umgekehrter Richtung angeben.

Anforderungen

Produkt

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

Header

Mpi.h; Mpif.h

Bibliothek

Msmpi.lib

DLL

Msmpi.dll

Weitere Informationen

MPI-Kollektivfunktionen

MPI_Datatype

MPI_Allgather

MPI_Send

MPI_Recv