Description
Problem
The ability to take the next available partition is not supported in the current MPI-4.0 API.
Proposal
The API:
MPI_Parrived_any(MPI_Request prequest, int *partition, int *flag); /* C interface */
The flag will return true if a partition was available, or else false. If true, then the variable partition will be filled with the partition delivered (based on receive-side partitioning of course). This procedure is local.
The parameter request must be an active receive-side partitioned point-to-point request, or else the call is erroneous. (Extensions for partitioned collective communication will be addressed later.)
Multi-Parrived form(s) (named can change at will):
MPI_Parrived_many(MPI_Request prequest[], int nrequests, int *pairs_of_ready_partitions, int *flags, int *nready);
The goal is to allow, for multiple partitioned receives, to test for one or more ready partitions. This yields a relatively complex interface as presently written, yet is closely related to MPI_Test_any for normal requests. An array of active prequests is posed with a length (nrequests); the pair_of_ready_partitions is a set of indexes into the prequest array and partition #. nready specifies the total length of the pairs_of_ready_partitions and flags list. Flags are set true if a partition is ready, otherwise left as is [check: we have to be compliant with the other forms of test.] Cross-cutting of multiple receives is essential to cope with the expected patterns of usage (e.g., 26 neighbors in a 3D halo code).
Changes to the Text
Appropriate text will be added.
Impact on Implementations
This API will have to be added.
Impact on Users
Users will be able to write code that is reactive to data as it arrives per partition, rather than in some receive-requested sequence.
References and Pull Requests
Metadata
Metadata
Assignees
Type
Projects
Status