1 // Copyright (C) 2005 Douglas Gregor.
2 
3 // Use, modification and distribution is subject to the Boost Software
4 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 // Compute parents, children, levels, etc. to effect a parallel
8 // computation tree.
9 #ifndef BOOST_MPI_COMPUTATION_TREE_HPP
10 #define BOOST_MPI_COMPUTATION_TREE_HPP
11 
12 namespace boost { namespace mpi { namespace detail {
13 
14 /**
15  * @brief Aids tree-based parallel collective algorithms.
16  *
17  * Objects of this type
18  */
19 class computation_tree
20 {
21  public:
22   computation_tree(int rank, int size, int root, int branching_factor = -1);
23 
24   /// Returns the branching factor of the tree.
branching_factor() const25   int branching_factor() const { return branching_factor_; }
26 
27   /// Returns the level in the tree on which this process resides.
level() const28   int level() const { return level_; }
29 
30   /**
31    * Returns the index corresponding to the n^th level of the tree.
32    *
33    * @param n The level in the tree whose index will be returned.
34    */
35   int level_index(int n) const;
36 
37   /**
38    *  @brief Returns the parent of this process.
39    *
40    *  @returns If this process is the root, returns itself. Otherwise,
41    *  returns the process number that is the parent in the computation
42    *  tree.
43    */
44   int parent() const;
45 
46   /// Returns the index for the first child of this process.
47   int child_begin() const;
48 
49   /**
50    * @brief The default branching factor within the computation tree.
51    *
52    * This is the default branching factor for the computation tree, to
53    * be used by any computation tree that does not fix the branching
54    * factor itself. The default is initialized to 3, but may be
55    * changed by the application so long as all processes have the same
56    * branching factor.
57    */
58   static int default_branching_factor;
59 
60  protected:
61   /// The rank of this process in the computation tree.
62   int rank;
63 
64   /// The number of processes participating in the computation tree.
65   int size;
66 
67   /// The process number that is acting as the root in the computation
68   /// tree.
69   int root;
70 
71   /**
72    * @brief The branching factor within the computation tree.
73    *
74    * This is the default number of children that each node in a
75    * computation tree will have. This value will be used for
76    * collective operations that use tree-based algorithms.
77    */
78   int branching_factor_;
79 
80   /// The level in the tree at which this process resides.
81   int level_;
82 };
83 
84 } } } // end namespace boost::mpi::detail
85 
86 #endif // BOOST_MPI_COMPUTATION_TREE_HPP
87