From d7ceae2cbd390ed9e26d75643440ece86313945d Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Tue, 18 Jan 2022 08:39:33 -0700 Subject: [PATCH] Minor doc update to the consensus algorithms. --- .../deal.II/base/mpi_consensus_algorithms.h | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/include/deal.II/base/mpi_consensus_algorithms.h b/include/deal.II/base/mpi_consensus_algorithms.h index 3c34b591b4..26a470a82c 100644 --- a/include/deal.II/base/mpi_consensus_algorithms.h +++ b/include/deal.II/base/mpi_consensus_algorithms.h @@ -265,13 +265,12 @@ namespace Utilities /** * This class implements a concrete algorithm for the * ConsensusAlgorithms::Interface base class, using only point-to-point - * communications and a single IBarrier. + * communications and a single IBarrier. This algorithm is suitable + * for very large process counts because it does not require the + * allocation of arrays with size proportional to the number of processes. * - * @note This class closely follows @cite hoefler2010scalable. Since the - * algorithm shown there is not considering payloads, the algorithm - * has been modified here in such a way that synchronous sends - * (Issend) have been replaced by equivalent Isend/Irecv, where - * Irecv receives the answer to a request (with payload). + * @note This class closely follows @cite hoefler2010scalable, but our + * implementation also deals with payloads. * * @tparam T1 The type of the elements of the vector to be sent. * @tparam T2 The type of the elements of the vector to be received. @@ -396,7 +395,8 @@ namespace Utilities * This class implements a concrete algorithm for the * ConsensusAlgorithms::Interface base class, using a two step approach. * In the first step the source ranks are determined and in the second - * step a static sparse data exchange is performed. + * step a static sparse data exchange is performed. This algorithm is most + * suitable for relatively small process counts -- say, less than 100. * * @note In contrast to NBX, this class splits the same * task into two distinct steps. In the first step, all processes @@ -533,12 +533,16 @@ namespace Utilities run() override; }; + + /** * A class which delegates its task to other * ConsensusAlgorithms::Interface implementations depending on the number * of processes in the MPI communicator. For a small number of processes * it uses PEX and for a large number of processes NBX. The threshold - * depends if the program is compiled in debug or release mode. + * depends if the program is compiled in debug or release mode, but the + * goal is to always use the most efficient algorithm for however many + * processes participate in the communication. * * @tparam T1 The type of the elements of the vector to be sent. * @tparam T2 The type of the elements of the vector to be received. @@ -573,6 +577,8 @@ namespace Utilities std::shared_ptr> consensus_algo; }; + + /** * This class implements Utilities::MPI::ConsensusAlgorithms::Process, * using user-provided function wrappers. -- 2.39.5