A group is an ordered set of MPI process identifiers (henceforth MPI processes); MPI processes are implementationdependent objects. Each MPI process in a group is associated with an integer rank. Ranks are consecutive and start from zero. Groups are represented by opaque group objects, and hence cannot be directly transferred from one MPI process to another. A group is used within a communicator to describe the participants in a communication ``universe'' and to rank such participants (thus giving them unique names within that ``universe'' of communication).
There is a special pre-defined group: MPI_GROUP_EMPTY, which is a group with no members. The predefined constant MPI_GROUP_NULL is the value used for invalid group handles.
Advice to users.
MPI_GROUP_EMPTY, which is a valid handle to an empty group,
should not be confused with MPI_GROUP_NULL, which in turn is
an invalid handle. The former may be used as an argument to group
procedures; the latter is not a valid input value for an input argument.
( End of advice to users.)
Advice
to implementors.
Simple implementations of MPI will enumerate groups, such as in a
table. However, more advanced data structures make sense in order
to improve scalability and memory usage with large numbers of MPI processes.
Such implementations are possible with MPI.
( End of advice to implementors.)