Funktionsübersicht . . Blockierende Kommunikation

Hilfesystem für den Message Passing Interface Standard MPI


MPI_Bsend

Senden einer Nachricht an einen anderen Prozeß innerhalb eines Kommunikators mit nutzerspezifischer Pufferung

Syntax:

Input Parameter:

Anmerkung:

Der Puffer muß vom Programmierer mit MPI_Buffer_attach bereitgestellt werden. Er darf solange nicht wiederverwendet werden, bis die Nachricht wirklich empfangen wurde. Beim Freigeben des Puffers mit MPI_Buffer_detach wird geprüft, ob noch eine Nachricht enthalten ist, und diese gegebenenfalls ausgeliefert.

Aufruf:


#include "mpi.h"

#define MAXINT  32
#define MAXCHAR 16

    int         myid, bufsize, intsize, charsize;
    int         *intmsg;
    char        *charmsg;
    void        *buf;
    MPI_Status  stat;

    ...
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    if (myid==0) {
        ...
        MPI_Pack_size(MAXINT, MPI_INT, MPI_COMM_WORLD, &intsize);
	MPI_Pack_size(MAXCHAR, MPI_CHAR, MPI_COMM_WORLD, &charsize);

	bufsize = intsize + charsize + (2 * MPI_BSEND_OVERHEAD);
	buf=(void *)malloc(bufsize*sizeof(void));
	MPI_Buffer_attach(buf, bufsize);

	MPI_Bsend(msg1, MAXINT, MPI_INT, 1, 0, MPI_COMM_WORLD);
	MPI_Bsend(msg2, MAXCHAR, MPI_CHAR, 1, 1, MPI_COMM_WORLD);
        ...
    }
    if (myid==1) {
        ...
	MPI_Recv(msg1, MAXINT, MPI_INT, 0, 0, MPI_COMM_WORLD, &stat);
	MPI_Recv(msg2, MAXCHAR, MPI_CHAR, 0, 1, MPI_COMM_WORLD, &stat);
        ...
    }
    ...