You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
86 lines
2.5 KiB
86 lines
2.5 KiB
// 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
|
|
|