Syntax:
Input Parameter:
Die Puffer sollte so groß sein, wie die Summe der Nachrichtenlängen aller Bsends, die gleichzeitig gepuffert werden sollen, sowie einige hundert Byte für jedes Bsend. In MPI_BSEND_OVERHEAD findet man die genaue Größe dieses Overheads. Mit MPI_Pack_size kann man den benötigten Speicher für die Nachricht ansich ermitteln.
Aufruf:
#include "mpi.h"
#define MAXINT 32
#define MAXCHAR 16
int myid, intsize, charsize, bufsize;
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);
...
}
...