Modify MPICH infrastructure to support atomic GET.
When GACC/FOP is used with MPI_NO_OP, the operation is essentially
an atomic GET. Originally MPICH implemented this by converting
GACC/FOP to GET, which lost the atomicity of that operation.
In this patch, we modify the implementation of GACC/FOP to support
atomic GET. Main modifications are listed below:
(1) When streaming GACC operation, originally we use origin data
size to calculate the stream unit size. Since origin data is
zero in atomic GET, here we use target data size instead
to calculate the stream unit size.
(2) On the origin side, if it is atomic GET, CH3 just issues packet
header and metadata for derived datatypes (if needed) and does
not try to issue from origin buffer; on the target side, after
packet header and metadata for derived datatypes (if needed) are
received, the final request handler is triggered, CH3 does not
try to receive any data from origin.
Signed-off-by:
Pavan Balaji <balaji@anl.gov>