Syntax:
copy_fn sollte vom Typ MPI_Copy_function sein, welcher definiert ist:
typedef int MPI_Copy_function(MPI_Comm *comm, int *keyval, void *extra_state,
void *attr_val_in, void **attr_val_out,
int *flag)
Die Funktion muß MPI_SUCCESS (hat Wert Null) zurückgeben oder einen
gültigen Fehlercode. Im letzteren Fall scheitert MPI_Comm_dup, und das
Programm wird abgebrochen.delete_fn sollte vom Typ MPI_Delete_function sein:
typedef int MPI_Delete_function(MPI_Comm *oldcomm, int *keyval,
void *attr_val, void *extra_state)
Die Funktion muß MPI_SUCCESS (hat Wert Null) zurückgeben oder einen
gültigen Fehlercode.Aufruf:
#include "mpi.h"
typedef struct {
... die gewünschten Attributwerte ...
} attr_t;
int copy_fn(MPI_Comm *comm, int *keyval, void *extra_state ,
attr_t *attribute_val_in, attr_t **attribute_val_out,
int *flag);
int delete_fn(MPI_Comm *comm, int *keyval, attr_t *attribute_val,
void *extra_state );
...
...
static int keyval=MPI_KEYVAL_INVALID;
MPI_Comm comm;
attr_t attribute_val;
...
... attribute_val belegen ...
MPI_Keyval_create( (MPI_Copy_function *)& copy_fn,
(MPI_Delete_function *)&delete_fn,
&keyval, extra_state);
MPI_Attr_put(MPI_COMM_WORLD, keyval, attribute_val);
MPI_Comm_dup(MPI_COMM_WORLD, &comm);
...
Beispiel