ENH: new broadcast version of Pstreams (#2371)

- The idea of broadcast streams is to replace multiple master to
  subProcs communications with a single MPI_Bcast.

    if (Pstream::master())
    {
        OPBstream toAll(Pstream::masterNo());
        toAll << data;
    }
    else
    {
        IPBstream fromMaster(Pstream::masterNo());
        fromMaster >> data;
    }

    // vs.
    if (Pstream::master())
    {
        for (const int proci : Pstream::subProcs())
        {
            OPstream os(Pstream::commsTypes::scheduled, proci);
            os << data;
        }
    }
    else
    {
        IPstream is(Pstream::commsTypes::scheduled, Pstream::masterNo());
        is >> data;
    }

  Can simply use UPstream::broadcast() directly for contiguous data
  with known lengths.

Based on ideas from T.Aoyagi(RIST), A.Azami(RIST)
This commit is contained in:
Mark Olesen
2022-02-20 19:26:13 +01:00
committed by Andrew Heather
parent a9cdaa1bae
commit 8478595a15
16 changed files with 956 additions and 8 deletions

View File

@ -5,5 +5,7 @@ UPstreamReduce.C
UIPstreamRead.C
UOPstreamWrite.C
UIPBstreamRead.C
UOPBstreamWrite.C
LIB = $(FOAM_MPI_LIBBIN)/libPstream