Funktionsübersicht . . Nicht-blockierende Kommunikation

Hilfesystem für den Message Passing Interface Standard MPI


MPI_Ibsend

Startet eine nicht-blockierende gepufferte Sendeoperation

Syntax:

Input Parameter:

Output Parameter Anmerkung:

Das Ende der Sendeoperation kann mit MPI_Wait abgewartet oder mit MPI_Test getestet werden. Erst nach dem erfolgreichen Beenden dürfen die Daten im Sendepuffer modifiziert werden.
Der Puffer muß vom Programmierer mit MPI_Buffer_attach bereitgestellt werden. Er darf solange nicht wiederverwendet werden, bis die Nachricht wirklich empfangen wurde. Wenn man den Puffer mit MPI_Buffer_detach freigibt, testet MPI, ob eine Nachricht vorhanden ist, und liefert diese gegebenenfalls aus.
Der minimal benötigte Speicherplatz läßt sich mit MPI_Pack_size ermitteln. Für jede beabsichtigte gepufferte Sendeoperation ist noch mindestens MPI_BSEND_OVERHEAD hinzuzuaddieren.

Aufruf:


#include "mpi.h"

    int           count, buffersize, size;
    void          *buf, *buffer;
    MPI_Datatype  datatype;
    MPI_Comm      comm;
    MPI_Request   request;
    MPI_Status    status;

    ...
    MPI_Pack_size(count, datatype, comm, &size);
    bufsize = size + MPI_BSEND_OVERHEAD;
    buffer=(void *)malloc(bufsize*sizeof(void));

    MPI_Buffer_attach(buffer, buffersize);
    MPI_Ibsend(buf, count, datatype, 1, 0, comm, &request);
    ... Berechnung ...
    MPI_Wait(&request, &status);
    ...