Suppose every rank’s send
buffer is made up of smaller, not necessarily full subarrays of equal type
rank 0:
|DDDDDDD____|DDDDD______|DDDDDDDDDD_|DDDDDDD____|...
^ send.begin()
(to rank0) (to rank1) (to rank2) (to rank3)
rank 1:
|DDDDD______|DDDD_______|DDDDD______|DDD________|...
^ send.begin()
(to rank0) (to rank1) (to rank2) (to rank3)
...
to be communicated with MPI_Alltoallv
. Despite extensive measures, sometimes send
‘s size will exceed the range addressable with 32-bit signed integers, making it necessary to split data into multiple segments. What are the idioms of MPI 3.1 to deal with such situations?
Since send
is a contiguous buffer, incrementing the begin pointer does not help to shield the too large offset of size_t
from MPI. MPI derived data types are sometimes recommended for large data transfers (sending data: MPI_Type_contiguous vs primitive types), but how would these work with Alltoallv
?
wkb is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.