mpits.c (dce90f5d4aacb1dc7e712e67c7a5cd27edf1733c) mpits.c (4f02bc6a7df4e4b03c783003a8e0899ee35fcb05)
1#include <petscsys.h> /*I "petscsys.h" I*/
2
3PetscLogEvent PETSC_BuildTwoSided,PETSC_BuildTwoSidedF;
4
5const char *const PetscBuildTwoSidedTypes[] = {
6 "ALLREDUCE",
7 "IBARRIER",
8 "REDSCATTER",

--- 264 unchanged lines hidden (view full) ---

273
274 Notes:
275 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
276 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other constant-size data.
277
278 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
279
280 References:
1#include <petscsys.h> /*I "petscsys.h" I*/
2
3PetscLogEvent PETSC_BuildTwoSided,PETSC_BuildTwoSidedF;
4
5const char *const PetscBuildTwoSidedTypes[] = {
6 "ALLREDUCE",
7 "IBARRIER",
8 "REDSCATTER",

--- 264 unchanged lines hidden (view full) ---

273
274 Notes:
275 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
276 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other constant-size data.
277
278 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
279
280 References:
281 The MPI_Ibarrier implementation uses the algorithm in
282 Hoefler, Siebert and Lumsdaine, Scalable communication protocols for dynamic sparse data exchange, 2010.
281 Hoefler, Siebert and Lumsdaine, The MPI_Ibarrier implementation uses the algorithm in
282 Scalable communication protocols for dynamic sparse data exchange, 2010.
283
284.seealso: PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
285@*/
286PetscErrorCode PetscCommBuildTwoSided(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata)
287{
288 PetscErrorCode ierr;
289 PetscBuildTwoSidedType buildtype = PETSC_BUILDTWOSIDED_NOTSET;
290

--- 196 unchanged lines hidden (view full) ---

487
488 Notes:
489 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
490 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other data.
491
492 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
493
494 References:
283
284.seealso: PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
285@*/
286PetscErrorCode PetscCommBuildTwoSided(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata)
287{
288 PetscErrorCode ierr;
289 PetscBuildTwoSidedType buildtype = PETSC_BUILDTWOSIDED_NOTSET;
290

--- 196 unchanged lines hidden (view full) ---

487
488 Notes:
489 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
490 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other data.
491
492 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
493
494 References:
495 The MPI_Ibarrier implementation uses the algorithm in
496 Hoefler, Siebert and Lumsdaine, Scalable communication protocols for dynamic sparse data exchange, 2010.
495 Hoefler, Siebert and Lumsdaine, The MPI_Ibarrier implementation uses the algorithm in
496 Scalable communication protocols for dynamic sparse data exchange, 2010.
497
498.seealso: PetscCommBuildTwoSided(), PetscCommBuildTwoSidedFReq(), PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
499@*/
500PetscErrorCode PetscCommBuildTwoSidedF(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata,PetscMPIInt ntags,
501 PetscErrorCode (*send)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,PetscMPIInt,void*,MPI_Request[],void*),
502 PetscErrorCode (*recv)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,void*,MPI_Request[],void*),void *ctx)
503{
504 PetscErrorCode ierr;

--- 38 unchanged lines hidden (view full) ---

543
544 Notes:
545 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
546 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other data.
547
548 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
549
550 References:
497
498.seealso: PetscCommBuildTwoSided(), PetscCommBuildTwoSidedFReq(), PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
499@*/
500PetscErrorCode PetscCommBuildTwoSidedF(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata,PetscMPIInt ntags,
501 PetscErrorCode (*send)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,PetscMPIInt,void*,MPI_Request[],void*),
502 PetscErrorCode (*recv)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,void*,MPI_Request[],void*),void *ctx)
503{
504 PetscErrorCode ierr;

--- 38 unchanged lines hidden (view full) ---

543
544 Notes:
545 This memory-scalable interface is an alternative to calling PetscGatherNumberOfMessages() and
546 PetscGatherMessageLengths(), possibly with a subsequent round of communication to send other data.
547
548 Basic data types as well as contiguous types are supported, but non-contiguous (e.g., strided) types are not.
549
550 References:
551 The MPI_Ibarrier implementation uses the algorithm in
552 Hoefler, Siebert and Lumsdaine, Scalable communication protocols for dynamic sparse data exchange, 2010.
551 Hoefler, Siebert and Lumsdaine, The MPI_Ibarrier implementation uses the algorithm in
552 Scalable communication protocols for dynamic sparse data exchange, 2010.
553
554.seealso: PetscCommBuildTwoSided(), PetscCommBuildTwoSidedF(), PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
555@*/
556PetscErrorCode PetscCommBuildTwoSidedFReq(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,
557 PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata,PetscMPIInt ntags,MPI_Request **toreqs,MPI_Request **fromreqs,
558 PetscErrorCode (*send)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,PetscMPIInt,void*,MPI_Request[],void*),
559 PetscErrorCode (*recv)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,void*,MPI_Request[],void*),void *ctx)
560{

--- 33 unchanged lines hidden ---
553
554.seealso: PetscCommBuildTwoSided(), PetscCommBuildTwoSidedF(), PetscGatherNumberOfMessages(), PetscGatherMessageLengths()
555@*/
556PetscErrorCode PetscCommBuildTwoSidedFReq(MPI_Comm comm,PetscMPIInt count,MPI_Datatype dtype,PetscMPIInt nto,const PetscMPIInt *toranks,const void *todata,
557 PetscMPIInt *nfrom,PetscMPIInt **fromranks,void *fromdata,PetscMPIInt ntags,MPI_Request **toreqs,MPI_Request **fromreqs,
558 PetscErrorCode (*send)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,PetscMPIInt,void*,MPI_Request[],void*),
559 PetscErrorCode (*recv)(MPI_Comm,const PetscMPIInt[],PetscMPIInt,void*,MPI_Request[],void*),void *ctx)
560{

--- 33 unchanged lines hidden ---