Jie
Chen, Robert Edwards and William Watson III
Jefferson Lab
Feb 13, 2003
unsigned char QMP_u8_t unsigned short QMP_u16_t unsigned int QMP_u32_t char QMP_s8_t short QMP_s16_t int QMP_s32_t int QMP_bool_t int QMP_status_t float QMP_float_t double QMP_double_t unsigned long (64 bit Arch) QMP_u64_t long (64 bit Arch) QMP_s64_t unsigned long long QMP_u64_t long long QMP_s64_t
| QMP_SUCCESS = 0 | QMP_ERROR | QMP_NOT_INITED | QMP_RTENV_ERR |
| QMP_CPUINFO_ERR | QMP_NODEINFO_ERR | QMP_NOMEM_ERR | QMP_MEMSIZE_ERR |
| QMP_HOSTNAME_ERR | QMP_INITSVC_ERR | QMP_TOPOLOGY_EXISTS | QMP_CH_TIMEOUT |
| QMP_NOTSUPPORTED | QMP_SVC_BUSY | QMP_BAD_MESSAGE | QMP_INVALID_ARG |
| QMP_INVALID_TOPOLOGY | QMP_NONEIGHBOR_INFO | QMP_MEMSIZE_TOOBIG | QMP_BAD_MEMORY |
| QMP_NO_PORTS | QMP_NODE_OUTRANGE | QMP_CHDEF_ERR | QMP_MEMUSED_ERR |
| QMP_INVALID_OP | QMP_TIMEOUT |
QMP Interconnect type (QMP_ictype_t):
QMP_SWITCH=0 QMP_GRID=1 QMP_MESH=1 QMP_FATTREE=2 QMP SMP Address Type (QMP_smpaddr_type_t):
QMP_SMP_ONE_ADDRESS QMP_SMP_MULTIPLE_ADDRESS
- Allocate memory aligned on 16 byte boundary
- User memory is not freed.
- Declares an endpoint for a message channel of receiveing operations between this node and its neighbor. The neighbor is described by an axis and direction. The axes are from 0 to number of dimensions - 1, and directions are -1 or 1.
- Declares an endpoint for a message channel of send operations between this node and it's neighbor.The neighbor is described by an axis and direction.The axes are from 0 to dim, and directions are 1 and -1.
- Declare an endpoint for message send channel operation using remote node's number.
- Declare an endpoint for message channel receiving operation using remote node's number.
- Collapse multiple message handles into a single one.
- A single message handle cannot appear in different multiple message handles.
- Free a message handle. If this message handle is a handle for multiple message handles, this routine will not free the individual handles
Advisory for QMP GM: Calling QMP_declare_receive_zzz before QMP_declare_send_zzz guarantees connections of desired channels. Otherwise best effort will be made to establish connections. Multiple channels are allowed between a pair of nodes.
- Start Send/Recv operations depends on the message handle type. If the message handle is a collection of multiple message handles, a loop will be used to go over each handle.
- Wait for an operation to complete for a particular message handle.
- This routine will not block other message handles from continuing their send/recv operations.
- Test whether a communication started by QMP_start with a message handle has been completed.
- return an error string corresponding to an error code.
- return an error code or an error string for the last QMP function call. If the argument mh is null, the global QMP error code will be returned. Otherwise the error code of mh will be returned.
- returns processor rank and name information in addition to the regular printf string.
- Applications may declare a message handler. If no handler is declared a default handler is used, which generally prints an error message and exits.
- Reports error messages and quits.
- Returns whether this process is the root of QMP communication.
This version of QMP puts little overhead on top of GM. The latency and bandwidth tests between 2 nodes yield roughly the same performance results between QMP and raw GM.
There is a compile flag to enable either a single port implementation or multiport implementation. The flag is _QMP_USE_MULTI_PORTS. The single port implementation uses memory copies but has very little overhead in setting up and tearing down communication channels.