petsc-3.5.4 2015-05-23
Report Typos and Errors

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,PetscInt nto,const PetscMPIInt *toranks,const void *todata,PetscInt *nfrom,PetscMPIInt **fromranks,void *fromdata)
Collective on MPI_Comm

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())

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

The MPI_Ibarrier implementation uses the algorithm in Hoefler, Siebert and Lumsdaine, 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