// Copyright (C) 2005 Douglas Gregor. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Compute parents, children, levels, etc. to effect a parallel // computation tree. #ifndef BOOST_MPI_COMPUTATION_TREE_HPP #define BOOST_MPI_COMPUTATION_TREE_HPP namespace boost { namespace mpi { namespace detail { /** * @brief Aids tree-based parallel collective algorithms. * * Objects of this type */ class computation_tree { public: computation_tree(int rank, int size, int root, int branching_factor = -1); /// Returns the branching factor of the tree. int branching_factor() const { return branching_factor_; } /// Returns the level in the tree on which this process resides. int level() const { return level_; } /** * Returns the index corresponding to the n^th level of the tree. * * @param n The level in the tree whose index will be returned. */ int level_index(int n) const; /** * @brief Returns the parent of this process. * * @returns If this process is the root, returns itself. Otherwise, * returns the process number that is the parent in the computation * tree. */ int parent() const; /// Returns the index for the first child of this process. int child_begin() const; /** * @brief The default branching factor within the computation tree. * * This is the default branching factor for the computation tree, to * be used by any computation tree that does not fix the branching * factor itself. The default is initialized to 3, but may be * changed by the application so long as all processes have the same * branching factor. */ static int default_branching_factor; protected: /// The rank of this process in the computation tree. int rank; /// The number of processes participating in the computation tree. int size; /// The process number that is acting as the root in the computation /// tree. int root; /** * @brief The branching factor within the computation tree. * * This is the default number of children that each node in a * computation tree will have. This value will be used for * collective operations that use tree-based algorithms. */ int branching_factor_; /// The level in the tree at which this process resides. int level_; }; } } } // end namespace boost::mpi::detail #endif // BOOST_MPI_COMPUTATION_TREE_HPP