Syntax:
Input Parameter:
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);
...
}
...