Freigeben über


MPI_Gather-Funktion

Sammelt Daten von allen Mitgliedern einer Gruppe zu einem Mitglied.

Syntax

int MPIAPI MPI_Gather(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
            int          recvcount,
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

Parameter

  • sendbuf [in]
    Der Zeiger auf einen Puffer, der die Daten enthält, die an den Stammprozess gesendet werden sollen.

    Wenn der comm-Parameter auf einen Intrakommunikations-Parameter 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 gibt Daten in das entsprechende Empfangspufferelement ein. Der nth-Prozess sendet Daten an das nth-Element des Empfangspuffers. Es wird davon ausgegangen, dass sich die vom Stammprozess gesendeten Daten an der richtigen Stelle im Empfangspuffer befinden.

  • sendcount
    Die Anzahl der Elemente im Sendepuffer. Wenn sendcount null ist, ist der Datenteil der Nachricht leer.

  • sendtype
    Der Datentyp jedes Elements im Puffer.

  • recvbuf [out, optional]
    Der Zeiger auf einen Puffer im Stammprozess, der die Daten enthält, die von jedem Prozess empfangen werden. Sie enthält Daten, die vom Stammprozess gesendet werden. Dieser Parameter ist nur beim Stammprozess von Bedeutung. Der parameter recvbuf wird für alle Nicht-Stammprozesse ignoriert.

  • recvcount
    Die Anzahl der Elemente, die von jedem Prozess empfangen werden. Diese Zahl ist nicht die Gesamtanzahl der Elemente im Puffer. Wenn die Anzahl null ist, ist der Datenteil der Nachricht leer. Dieser Parameter ist nur beim Stammprozess von Bedeutung.

  • recvtype
    Der MPI-Datentyp jedes Elements im Puffer. Dieser Parameter ist nur beim Stammprozess von Bedeutung.

  • root
    Der Rang des empfangenden Prozesses innerhalb des angegebenen Kommunikators.

  • 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_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Hinweise

Alle Funktionsparameter sind für den Stammprozess von Bedeutung, nur sendbuf, sendcount, sendtype, root und comm sind für die anderen Prozesse von Bedeutung. Die Root- und comm-Parameter müssen für alle Prozesse identisch sein.

Im Allgemeinen sind abgeleitete Datentypen sowohl für die Parameter sendtype als auch recvtype zulässig. Die Typsignatur, die von den Parametern sendtype und recvtype für jeden Prozess angegeben wird, muss gleich der Typsignatur der Parameter recvcount und sendcount im Stammprozess sein. Die Menge der gesendeten Daten muss der Datenmenge entsprechen, die zwischen dem Stammprozess und jedem einzelnen Prozess empfangen wird. Unterschiedliche Typzuordnungen zwischen Sender und Empfänger sind weiterhin zulässig.

Die Angabe von Anzahlen und Typen darf nicht dazu führen, dass mehr als einmal ein Speicherort im Stamm geschrieben wird. Ein solcher Aufruf ist fehlerhaft.

Wenn der comm-Parameter auf einen Intrakommunikationsknoten verweist, senden alle Prozesse den Inhalt des Sendepuffers an den Stammprozess. Der Stammprozess empfängt die Nachrichten und speichert sie in der Rangfolge. Das Ergebnis ist, als ob jeder der n-Prozesse in der Gruppe einen Aufruf MPI_Send(sendbuf, sendcount, sendtype, root, …)von ausgeführt hätte, und der Stamm hätte n Aufrufe von MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)ausgeführt. Der Wert von extent(recvtype) wird mithilfe der funktion MPI_Type_get_extent abgerufen. Eine alternative Beschreibung der Funktion besteht darin, dass die n Nachrichten, die von den Prozessen in der Gruppe gesendet werden, in der Rangfolge verkettet werden und die resultierende Nachricht vom Stamm empfangen wird, als ob durch einen Aufruf MPI_RECV(recvbuf, recvcountn, recvtype, ...)von . Der Empfangspuffer wird für alle Nicht-Stammprozesse ignoriert.

Wenn der comm-Parameter auf einen Intercommunicator verweist, umfasst der Aufruf alle Prozesse im Intercommunicator, jedoch mit einer Gruppe, Gruppe A, die den Stammprozess definiert. Alle Prozesse in der anderen Gruppe, Gruppe B, legen den gleichen Wert im Stammparameter fest, d. h. den Rang des Stammprozesses in Gruppe A. Der Stammprozess legt den Wert MPI_ROOT im Stammparameter fest. Alle anderen Prozesse in Gruppe A legen den Wert MPI_PROC_NULL im Stammparameter fest. Daten werden vom Stammprozess an alle Prozesse in Gruppe B übertragen. Die Pufferparameter der Prozesse in Gruppe B müssen mit dem Pufferparameter des Stammprozesses konsistent sein.

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-Kollektive Funktionen

MPI_Datatype

MPI_Gatherv