87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 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
 | 
