The payload following this label is to comprise of one or more structures of the following type:
typedef struct {
IMPI_Uint4 major;
IMPI_Uint4 minor;
} IMPI_Version;
The client sends an IMPI_Version for each version of the IMPI protocols that it supports. All IMPI clients must support version 0.0.
The length of the array of IMPI_Version structures can be calculated from the payload len and the fact that every client must support version 0.0. Each clients' array of version numbers must be in strictly ascending order.
Each client pair chooses the highest version number that both support. This version number determines the nature and content for all future communication between the hosts of each client pair, and may also determine which labels the client will send to the server.
For example, if the server broadcasts the following data for the IMPI_C_VERSION label:
IMPI_Int4 cmd = IMPI_CMD_COLL
IMPI_Int4 len = 48
IMPI_Int4 label = IMPI_C_VERSION
IMPI_Int4 client_mask = 0x7
IMPI_Uint4 major = 0 // from client 0
IMPI_Uint4 minor = 0
IMPI_Uint4 major = 0 // from client 1
IMPI_Uint4 minor = 0
IMPI_Uint4 major = 0
IMPI_Uint4 minor = 1
IMPI_Uint4 major = 0 // from client 2
IMPI_Uint4 minor = 0
IMPI_Uint4 major = 0
IMPI_Uint4 minor = 1
Client 0 will use version 0.0 to communicate with both client 1 and client 2. But client 1 and 2 will use version 0.1 to communicate with each other, since they both share that value.