petsc-3.12.5 2020-03-29
PetscCommBuildTwoSided
discovers communicating ranks given one-sided information, moving constant-sized data in the process (often message lengths)
Synopsis
#include "petscsys.h"
PetscErrorCode PetscCommBuildTwoSided(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata)
Collective
Input Arguments
| comm | - communicator
|
| count | - number of entries to send/receive (must match on all ranks)
|
| dtype | - datatype to send/receive from each rank (must match on all ranks)
|
| nto | - number of ranks to send data to
|
| toranks | - ranks to send to (array of length nto)
|
| todata | - data to send to each rank (packed)
|
Output Arguments
| nfrom | - number of ranks receiving messages from
|
| fromranks | - ranks receiving messages from (length nfrom; caller should PetscFree())
|
| fromdata | - packed data from each rank, each with count entries of type dtype (length nfrom, caller responsible for PetscFree())
|
Options Database Keys
-build_twosided <allreduce|ibarrier|redscatter> -algorithm to set up two-sided communication
Notes
This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other constant-size data.
Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
References
1. -Hoefler, Siebert and Lumsdaine, The MPI_Ibarrier implementation uses the algorithm in
Scalable communication protocols for dynamic sparse data exchange, 2010.
See Also
PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
Level
developer
Location
src/sys/utils/mpits.c
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages