Hints specified via info (see Chapter The Info Object ) allow a user to provide information to direct optimization. Providing hints may enable an implementation to deliver increased performance or minimize use of system resources. However, hints do not change the semantics of any MPI interfaces. In other words, an implementation is free to ignore all hints. Hints are specified on a per communicator basis, in MPI_COMM_DUP_WITH_INFO, MPI_COMM_SET_INFO, MPI_COMM_SPLIT_TYPE, MPI_DIST_GRAPH_CREATE_ADJACENT, and MPI_DIST_GRAPH_CREATE, via the opaque info object. When an info object that specifies a subset of valid hints is passed to MPI_COMM_SET_INFO, there will be no effect on previously set or defaulted hints that the info does not specify.
Advice
to implementors.
It may happen that a program is coded with hints for one system, and
later executes on another system that does not support these hints. In
general, unsupported hints should simply be ignored. Needless to say,
no hint can be mandatory. However, for each hint used by a specific
implementation, a default value must be provided when the user does
not specify a value for this hint.
( End of advice to implementors.)
Info hints are not propagated by MPI from one communicator to another
except when the communicator is duplicated using
MPI_COMM_DUP or MPI_COMM_IDUP. In this case,
all hints associated with the
original communicator are also applied to the duplicated communicator.
MPI_COMM_SET_INFO(comm, info) | |
INOUT comm | communicator (handle) |
IN info | info object (handle) |
int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info)
MPI_Comm_set_info(comm, info, ierror)
TYPE(MPI_Comm), INTENT(IN) :: comm
TYPE(MPI_Info), INTENT(IN) :: info
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_COMM_SET_INFO(COMM, INFO, IERROR)
INTEGER COMM, INFO, IERROR
MPI_COMM_SET_INFO sets new values for the hints of the communicator associated with comm. MPI_COMM_SET_INFO is a collective routine. The info object may be different on each process, but any info entries that an implementation requires to be the same on all processes must appear with the same value in each process's info object.
Advice to users.
Some info items that an implementation can use when it creates a
communicator cannot easily be changed once the communicator has been
created. Thus, an implementation may ignore hints issued in this call
that it would have accepted in a creation call.
( End of advice to users.)
MPI_COMM_GET_INFO(comm, info_used) | |
IN comm | communicator object (handle) |
OUT info_used | new info object (handle) |
int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info_used)
MPI_Comm_get_info(comm, info_used, ierror)
TYPE(MPI_Comm), INTENT(IN) :: comm
TYPE(MPI_Info), INTENT(OUT) :: info_used
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
MPI_COMM_GET_INFO(COMM, INFO_USED, IERROR)
INTEGER COMM, INFO_USED, IERROR
MPI_COMM_GET_INFO returns a new info object containing the hints of the communicator associated with comm. The current setting of all hints actually used by the system related to this communicator is returned in info_used. If no such hints exist, a handle to a newly created info object is returned that contains no key/value pair. The user is responsible for freeing info_used via MPI_INFO_FREE.
Advice to users.
The info object returned in info_used will contain all hints
currently active for this communicator. This set of hints may be
greater or smaller than the set of hints specified when the
communicator was created, as the system may not recognize some hints
set by the user, and may recognize other hints that the user has not
set.
( End of advice to users.)