Funktionsübersicht

Hilfesystem für den Message Passing Interface Standard MPI


MPI_Buffer_attach

Stellt nutzerdefinierten Puffer für das Senden von Nachrichten bereit

Syntax:

Input Parameter:

Anmerkungen:

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);
        ...
    }
    ...