MPI (Message Passing Interface) is a library that enables you to write parallel programs in C or Fortran77. The library uses commonly available operating system services to create parallel processes and exchange information among these processes.
This method gets an attribute value associated with a key.
int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)
comm is a communicator object describing a group of processes. In many applications, various processes work together, and a communicator describes the processes that a routine initiates.
comm_keyval is the key value returned by the MPI_Comm_create_keyval method.
attribute_val is an output parameter representing attribute value.
flag is an output parameter that returns true if an attribute value was extracted and false otherwise.
The function returns an error if it is unsuccessful. By default, the error aborts the MPI job.
In case of success, it returns MPI_SUCCESS - the value returned upon successful termination of any MPI routine.
In case of an invalid communicator provided in the function’s argument, MPI_ERR_COM is returned.
MPI_ERR_KEYVAL is returned if the key value is invalid.
The following code snippet shows how we can use the MPI_get_attr function:
#include "mpi.h"#include <stdio.h>int main( int argc, char *argv[] ){int key[3], attrval[3];int i;MPI_Comm comm;MPI_Init( &argc, &argv );comm = MPI_COMM_WORLD;/* Creating key values */for (i=0; i<3; i++) {MPI_Comm_create_keyval( MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN, &key[i], (void *)0 );attrval[i] = 1024 * i;}/* Insert attribute in several orders. */MPI_Comm_set_attr( comm, key[2], &attrval[2] );MPI_Comm_set_attr( comm, key[1], &attrval[1] );MPI_Comm_set_attr( comm, key[0], &attrval[0] );int i, flag, *val_p;for (i=0; i<n; i++) {MPI_Comm_get_attr( comm, key[i], &val_p, &flag );}}
We initialize key and attrval as an array of 3 integer elements.
Then, we initialize comm with MPI_COMM_WORLD, which describes all the processes that the current job starts with.
After that, we create key values using the MPI_Comm_create_keyval method and define attribute values in the for loop (lines 14 and 15).
We use the MPI_Comm_set_attr method to set attribute values associated with the keys (lines 19, 20, and 21).
Finally, we use the MPI_Comm_get_attr to retrieve the attribute value associated with each key (line 25).
Free Resources