Freigeben über


MPI_Scatter Funktion

Streut Daten von einem Element auf alle Mitglieder einer Gruppe. Die MPI_Scatter-Funktion führt die Inverse des Vorgangs aus, der von der MPI_Gather-Funktion ausgeführt wird.

Syntax

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

Parameter

  • sendbuf [in]
    Das Handle an einen Puffer, der die vom Stammprozess zu sendenden Daten enthält.

    Der sendbuf-Parameter wird für alle Nicht-Stammprozesse ignoriert.

    Wenn der comm-Parameter auf einen Intrakommunikationsgeber verweist, können Sie eine direkte Option angeben, indem Sie MPI_IN_PLACE im Stammprozess angeben. Die Parameter recvcount und recvtype werden ignoriert. Der gestreute Vektor wird weiterhin als n-Segmente betrachtet, wobei n die Gruppengröße ist. das Segment, das dem Stammprozess entspricht, wird nicht verschoben.

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

    Der sendcount-Parameter wird für alle Nicht-Stammprozesse ignoriert.

  • sendtype
    Der Datentyp jedes Elements im Puffer.

    Der sendcount-Parameter wird für alle Nicht-Stammprozesse ignoriert.

  • recvbuf [out]
    Das Handle für einen Puffer, der die Daten enthält, die für jeden 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 Datentyp der Elemente im Empfangspuffer.

  • root
    Der Rang des Sendevorgangs 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_SCATTER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

Hinweise

Der Effekt der MPI_Scatter-Funktion ist, als würde der Stammprozess mithilfe der MPI_Send-Funktion eine Nachricht senden. Diese Nachricht ist in n gleiche Segmente unterteilt, eins für jedes Mitglied der Gruppe. Das ith-Segment wird an den ith-Prozess in der Gruppe gesendet.

Wenn comm ein Intrakommunikationsgeber ist, ist das Ergebnis so, als ob der Stamm n Send-Vorgänge MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)ausgeführt hat; und jeder Prozess hat einen Empfangsvorgang ausgeführt, MPI_Recv(recvbuf, recvcount, recvtype, i,…).

Die Typsignatur, die von den Parametern sendcount und sendtype für den Stammprozess angegeben wird, muss gleich der Typsignatur sein, die vom recvcount angegeben wird, und recvtype-Parametern für alle Prozesse. 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.

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

Die Angabe von Anzahlen und Typen sollte nicht dazu führen, dass ein Speicherort im Stamm mehr als einmal gelesen wird.

Wenn der comm-Parameter auf einen Intercommunicator verweist, umfasst der Aufruf alle Prozesse im Intercommunicator, aber mit einer Gruppe, Gruppe A, die den Stammprozess definiert. Alle Prozesse in der anderen Gruppe, Gruppe B, legen denselben 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 aus dem 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-Kollektivfunktionen

MPI_Datatype

MPI_Gather

MPI_Gatherv

MPI_Scatterv