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 |