Funktionsübersicht . . Gruppen, Kontexte und Kommunikatoren

Hilfesystem für den Message Passing Interface Standard MPI


MPI_Keyval_create

Liefert einen Attributschlüssel und assoziiert ein bestimmtes Verhalten des Attributs beim Kopieren und Löschen des Kommunikators, zu dem es später zugeordnet wird

Syntax:

Input Parameter: Output Parameter: Zu den Callback-Funktionen:

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.
attr_val_in ist das Attribut, welches der Funktion übergeben wird. Soll der Speicherbereich, in dem das Attribut steht, eventuell kopiert und/oder verändert werden, findet der neue Kommunikator sein Attribut in attr_val_out, wenn das flag gesetzt ist (flag=1). Ist flag=0, wird das Attribut im duplizierten Kommunikator gelöscht.
copy_fn wird jedesmal gerufen, wenn ein Kommunikator mit MPI_Comm_dup dupliziert wird.

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.
Diese Funktion wird immer gerufen, wenn ein Kommunikator gelöscht wird.

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