Initialization of partitioned communication operations use the initialization calls described below. Subsequent to initialization, MPI_START/ MPI_STARTALL are used as the first indication to MPI that a message transfer will occur. For send-side operations, neither initializing nor starting the operation enables transfer of any part of the user buffer. Freeing or canceling a partitioned communication request that is active (i.e., initialized and started) and not completed is erroneous. After the partitioned communication operation is started, individual partitions of a message are indicated as ready to be sent by MPI via the MPI_PREADY function, described below.
| MPI_PSEND_INIT(buf, partitions, count, datatype, dest, tag, comm, info, request) | |
| IN buf | initial address of send buffer (choice) | 
| IN partitions | number of partitions (non-negative integer) | 
| IN count | number of elements sent per partition (non-negative integer) | 
| IN datatype | type of each element (handle) | 
| IN dest | rank of destination (integer) | 
| IN tag | message tag (integer) | 
| IN comm | communicator (handle) | 
| IN info | info argument (handle) | 
| OUT request | communication request (handle) | 
 
  MPI_PSEND_INIT   
creates a partitioned communication request and binds to it all the  
arguments of a partitioned send operation.  
Matching follows the same  MPI matching rules as for point-to-point communication (see Chapter Point-to-Point Communication) with communicator, tag, and source dictating  
message matching. In the event that the communicator, tag, and source do not  
uniquely identify a message, the order in which partitioned   
communication  initialization calls are made is the order in which they will eventually match.  
This operation can only match with partitioned communication initialization operations,  
therefore it is required to be matched with a corresponding  
 MPI_PRECV_INIT call.   
Partitioned communication initialization calls are  
local. It is erroneous to provide a  partitions value 
.  
Send-side and receive-side buffers must be identical in size.  
 
 
 
 Advice  
        to implementors.  
 
Unlike  MPI_SEND_INIT,  MPI_PSEND_INIT can be matched as early as the initialization call.  
  Also, unlike  MPI_SEND_INIT,  MPI_PSEND_INIT takes an info argument.    
 ( End of advice to implementors.) 
 
  
| MPI_PRECV_INIT(buf, partitions, count, datatype, source, tag, comm, info, request) | |
| IN buf | initial address of recv buffer (choice) | 
| IN partitions | number of partitions (non-negative integer) | 
| IN count | number of elements received per partition (non-negative integer) | 
| IN datatype | type of each element (handle) | 
| IN source | rank of source (integer) | 
| IN tag | message tag (integer) | 
| IN comm | communicator (handle) | 
| IN info | info argument (handle) | 
| OUT request | communication request (handle) | 
 
 
 
 Rationale.  
 
The info argument is provided in order to support per-operation implementationdefined info keys.  
 ( End of rationale.) 
 
 MPI_PRECV_INIT creates a partitioned communication receive request  
and binds to it all the  
arguments of a partitioned receive operation.  
This operation can only match with partitioned communication initialization operations,  
therefore the  MPI library is required to match  MPI_PRECV_INIT calls only with a corresponding  
 MPI_PSEND_INIT call.   
Matching follows the same  MPI matching rules as for point-to-point communication (see Chapter Point-to-Point Communication) with communicator, tag, and source dictating  
message matching. In the event that the communicator, tag, and source do not  
uniquely identify a message, the order in which partitioned   
communication initialization calls are made  
is the order in which they will eventually match.  
Partitioned communication initialization calls are  
local. That is,  MPI_PRECV_INIT may return before the operation  
completes. It is erroneous to provide a  partitions value 
. Wildcards for source and tag are not allowed.  
 
 
 
 Advice  
        to implementors.  
 
Unlike  MPI_RECV_INIT,  MPI_PRECV_INIT may communicate.  
Also unlike  MPI_RECV_INIT,  MPI_PRECV_INIT takes an info argument.    
 ( End of advice to implementors.) 
 
  
| MPI_PREADY(partition, request) | |
| IN partition | partition to mark ready for transfer (non-negative integer) | 
| INOUT request | partitioned communication request (handle) | 
MPI_PREADY is a send-side call that indicates that a given partition is ready to be transferred. It is erroneous to use MPI_PREADY on any request object that does not correspond to a partitioned send operation. The partitioning is defined by the MPI_PSEND_INIT call. Partition numbering starts at zero and ranges to one less than the number of partitions declared in the MPI_PSEND_INIT call. Specifying a partition number that is equal to or larger than the number of partitions is erroneous. After a call to MPI_START/ MPI_STARTALL, all partitions associated with that operation are inactive. A call to MPI_PREADY marks the indicated partition as active. Calling MPI_PREADY on an active partition is erroneous.
| MPI_PREADY_RANGE(partition_low, partition_high, request) | |
| IN partition_low | lowest partition ready for transfer (non-negative integer) | 
| IN partition_high | highest partition ready for transfer (non-negative integer) | 
| INOUT request | partitioned communication request (handle) | 
A call to MPI_PREADY_RANGE has the same effect as calls to MPI_PREADY, executed for i=partition_low, ..., partition_high, in some arbitrary order. Calls to MPI_PREADY_RANGE follow the same rules as those for MPI_PREADY calls.
| MPI_PREADY_LIST(length, array_of_partitions, request) | |
| IN length | list length (integer) | 
| IN array_of_partitions | array of partitions (array of non-negative integers) | 
| INOUT request | partitioned communication request (handle) | 
A call to MPI_PREADY_LIST has the same effect as calls to MPI_PREADY, executed for the partitions specified in the range array_of_partitions[0] ,..., array_of_partitions[count-1] of the array_of_partitions, executed in some arbitrary order. Calls to MPI_PREADY_LIST follow the same rules as those for MPI_PREADY calls.