Freigeben über


MPI_Scatterv-Funktion

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

Syntax

int MPIAPI MPI_Scatterv(
  _In_  void         *sendbuf,
  _In_  int          *sendcounts,
  _In_  int          *displs,
        MPI_Datatype sendtype,
  _Out_ void         *recvbuf,
        int          recvcount,
        MPI_Datatype recvtype,
        int          root,
        MPI_Comm     comm
);

Parameter

  • sendbuf [in]
    Der Zeiger auf 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.

  • sendcounts [in]
    Die Anzahl der Elemente, die an jeden Prozess gesendet werden sollen. Wenn sendcount[i] null ist, ist der Datenteil der Nachricht für diesen Prozess leer.

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

  • displs [in]
    Die Speicherorte der Daten, die an jeden Kommunikatorprozess gesendet werden sollen. Jede Position im Array ist relativ zum entsprechenden Element des sendbuf-Arrays .

    In den Parameterarrays sendbuf, sendcounts und displs verweist das nth-Element jedes Arrays auf die Daten, die an den n thcommunicator-Prozess gesendet werden sollen.

    Dieser Parameter ist nur beim Stammprozess von Bedeutung.

  • sendtype
    Der MPI-Datentyp jedes Elements im Puffer.

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

  • recvbuf [out]
    Der Zeiger auf 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 im Sendevorgang 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_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR

Hinweise

Die MPI_Scatterv-Funktion erweitert die Funktionalität der MPI_Scatter-Funktion , indem eine unterschiedliche Anzahl von Daten, wie im sendcounts-Array angegeben, an jeden Prozess gesendet werden kann.

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

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 Typsignatur, wie sie vom sendcount angegeben wird, und sendtype-Parameter für den Stammprozess müssen gleich der Typsignatur sein, die durch den recvcount angegeben wird, und recvtype-Parameter 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.

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

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_Scatter