petsc-3.7.1 2016-05-15
Report Typos and Errors

PetscCommBuildTwoSidedFReq

discovers communicating ranks given one-sided information, calling user-defined functions during rendezvous, returns requests

Synopsis

#include "petscsys.h"  
PetscErrorCode PetscCommBuildTwoSidedFReq(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,
                                          PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata,PetscMPIInt ntags,MPI_Request **toreqs,MPI_Request **fromreqs,
                                          PetscErrorCode (*send)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,PetscMPIInt,void*,MPI_Request[],void*),
                                          PetscErrorCode (*recv)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,void*,MPI_Request[],void*),void *ctx)
Collective on MPI_Comm Many br

Input Arguments

comm - communicator Many br
count - number of entries to send/receive in initial rendezvous (must match on all ranks) Many br
dtype - datatype to send/receive from each rank (must match on all ranks) Many br
nto - number of ranks to send data to Many br
toranks - ranks to send to (array of length nto) Many br
todata - data to send to each rank (packed) Many br
ntags - number of tags needed by send/recv callbacks Many br
send - callback invoked on sending process when ready to send primary payload Many br
recv - callback invoked on receiving process after delivery of rendezvous message Many br
ctx - context for callbacks Many br

Output Arguments

nfrom - number of ranks receiving messages from Many br
fromranks - ranks receiving messages from (length nfrom; caller should PetscFree()) Many br
fromdata - packed data from each rank, each with count entries of type dtype (length nfrom, caller responsible for PetscFree()) Many br
toreqs - array of nto*ntags sender requests (caller must wait on these, then PetscFree()) Many br
fromreqs - array of nfrom*ntags receiver requests (caller must wait on these, then PetscFree()) Many br

Many br

Notes

This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and Many brPetscGatherMessageLengths(), possibly with a subsequent round of communication to send other data. Many br

Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not. Many br

References

1. -Hoefler, Siebert and Lumsdaine, The MPI_Ibarrier implementation uses the algorithm in Many brScalable communication protocols for dynamic sparse data exchange, 2010. Many br

See Also

PetscCommBuildTwoSided(), PetscCommBuildTwoSidedF(), 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