There are many occasions on which it would be useful to allow a user to associate a printable identifier with an MPI-/ communicator, window, or datatype, for instance error reporting, debugging, and profiling. The names attached to opaque objects do not propagate when the object is duplicated or copied by MPI-/ routines. For communicators this can be achieved using the following two functions.
MPI_COMM_SET_NAME (comm, comm_name)
int MPI_Comm_set_name(MPI_Comm comm, char *comm_name)
MPI_COMM_SET_NAME(COMM, COMM_NAME, IERROR) INTEGER COMM, IERROR
CHARACTER*(*) COMM_NAME
int MPI::Comm::Set_name(const char* comm_name)
void
MPI_COMM_SET_NAME allows a user to associate a name string with a communicator. The character string which is passed to MPI_COMM_SET_NAME will be saved inside the MPI library (so it can be freed by the caller immediately after the call, or allocated on the stack). Leading spaces in name are significant but trailing ones are not.
MPI_COMM_SET_NAME is a local (non-collective) operation, which only affects the name of the communicator as seen in the process which made the MPI_COMM_SET_NAME call. There is no requirement that the same (or any) name be assigned to a communicator in every process where it exists.
The length of the name which can be stored is limited to the value of MPI_MAX_OBJECT_NAME in Fortran and MPI_MAX_OBJECT_NAME-1 in C and C++ to allow for the null terminator. Attempts to put names longer than this will result in truncation of the name. MPI_MAX_OBJECT_NAME must have a value of at least 64.
MPI_COMM_GET_NAME (comm, comm_name, resultlen)
int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
MPI_COMM_GET_NAME(COMM, COMM_NAME, RESULTLEN, IERROR) INTEGER COMM, RESULTLEN, IERROR
CHARACTER*(*) COMM_NAME
int MPI::Comm::Get_name(char* comm_name, int& resultlen) const
void
MPI_COMM_GET_NAME returns the last name which has previously been associated with the given communicator. The name may be set and got from any language. The same name will be returned independent of the language used. name should be allocated so that it can hold a resulting string of length MPI_MAX_OBJECT_NAME characters. MPI_COMM_GET_NAME returns a copy of the set name in name.
If the user has not associated a name with a communicator, or an error occurs, MPI_COMM_GET_NAME will return an empty string (all spaces in Fortran, "" in C and C++). The three predefined communicators will have predefined names associated with them. Thus, the names of MPI_COMM_WORLD, MPI_COMM_SELF, and MPI_COMM_PARENT will have the default of MPI_COMM_WORLD, MPI_COMM_SELF, and MPI_COMM_PARENT. The fact that the system may have chosen to give a default name to a communicator does not prevent the user from setting a name on the same communicator; doing this removes the old name and assigns the new one.
Note that associating a name with a communicator has no effect on the semantics of an MPI-/ program, and will (necessarily) increase the store requirement of the program, since the names must be saved. Therefore there is no requirement that users use these functions to associate names with communicators. However debugging and profiling MPI applications may be made easier if names are associated with communicators, since the debugger or profiler should then be able to present information in a less cryptic manner.(End of advice to users.)
The following functions are used for setting and getting names of datatypes.
MPI_TYPE_SET_NAME (type, type_name)
int MPI_Type_set_name(MPI_Datatype type, char *type_name)
MPI_TYPE_SET_NAME(TYPE, TYPE_NAME, IERROR) INTEGER TYPE, IERROR
CHARACTER*(*) TYPE_NAME
int MPI::Datatype::Set_name(const char* type_name)
void
MPI_TYPE_GET_NAME (type, type_name, resultlen)
int MPI_Type_get_name(MPI_Datatype type, char *type_name, int *resultlen)
MPI_TYPE_GET_NAME(TYPE, TYPE_NAME, RESULTLEN, IERROR) INTEGER TYPE, RESULTLEN, IERROR
CHARACTER*(*) TYPE_NAME
int MPI::Datatype::Get_name(char* type_name, int& resultlen) const
void
Named predefined datatypes have the default names of the datatype name. For example, MPI_WCHAR has the default name of MPI_WCHAR.
The following functions are used for setting and getting names of windows.
MPI_WIN_SET_NAME (win, win_name)
int MPI_Win_set_name(MPI_Win win, char *win_name)
MPI_WIN_SET_NAME(WIN, WIN_NAME, IERROR) INTEGER WIN, IERROR
CHARACTER*(*) WIN_NAME
int MPI::Win::Set_name(const char* win_name)
void
MPI_WIN_GET_NAME (win, win_name, resultlen)
int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
MPI_WIN_GET_NAME(WIN, WIN_NAME, RESULTLEN, IERROR) INTEGER WIN, RESULTLEN, IERROR
CHARACTER*(*) WIN_NAME
int MPI::Win::Get_name(char* win_name, int& resultlen) const
void
MPI-Standard for MARMOT