| // 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 |