MPI procedures sometimes assign a special meaning to a special value of a basic type argument; e.g., tag is an integer-valued argument of point-to-point communication operations, with a special wild-card value, MPI_ANY_TAG. Such arguments will have a range of regular values, which is a proper subrange of the range of values of the corresponding basic type; special values (such as MPI_ANY_TAG) will be outside the regular range. The range of regular values, such as tag, can be queried using environmental inquiry functions (Chapter 7 of the MPI-1 document). The range of other values, such as source, depends on values given by other MPI routines (in the case of source it is the communicator size).
MPI also provides predefined named constant handles, such as MPI_COMM_WORLD.
All named
constants, with the exceptions noted below for Fortran, can be used in
initialization expressions or assignments, but not necessarily in
array declarations or as labels in C/C++ switch or Fortran
select/case
statements. This implies named constants to be link-time but not
necessarily compile-time constants. The named constants listed below
are required to be compile-time constants in both C/C++ and Fortran.
These constants do
not change values during execution. Opaque objects accessed by constant
handles are defined and do not change value between MPI initialization
( MPI_INIT) and MPI completion ( MPI_FINALIZE).
The handles themselves are constants and can be also used in initialization expressions or assignments.
The constants that are required to be compile-time constants (and
can thus be used for array length declarations and labels in C/C++
switch and Fortran case/select statements) are:
and their C++ counterparts where appropriate.
The constants that cannot be used in initialization expressions or
assignments in Fortran are:
In Fortran the implementation of these special constants may require the
use of language constructs that are outside the Fortran
standard. Using special values for the constants (e.g., by defining
them through PARAMETER statements) is not possible because an
implementation cannot distinguish these values from legal
data. Typically, these constants are implemented as predefined
static variables (e.g., a variable in an MPI-declared COMMON
block), relying on the fact that the target compiler passes data by
address. Inside the subroutine, this address can be extracted by some
mechanism outside the Fortran standard (e.g., by Fortran extensions or
by implementing the function in C).
( End of advice to implementors.)
Advice
to implementors.
Up: Data Types
Next: Choice
Previous: State
Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page
(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009