astra-sim-alibabacloud/astra-sim/system/topology/DoubleBinaryTreeTopology.cc (49 lines of code) (raw):
/******************************************************************************
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*******************************************************************************/
#include "DoubleBinaryTreeTopology.hh"
namespace AstraSim {
DoubleBinaryTreeTopology::~DoubleBinaryTreeTopology() {
delete DBMIN;
delete DBMAX;
}
DoubleBinaryTreeTopology::DoubleBinaryTreeTopology(
int id,
int total_tree_nodes,
int start,
int stride) {
if (id == 0) {
std::cout << "Node 0: Double binary tree created with total nodes: "
<< total_tree_nodes << " ,start: " << start
<< " ,stride: " << stride << std::endl;
}
DBMAX = new BinaryTree(
id, BinaryTree::TreeType::RootMax, total_tree_nodes, start, stride);
DBMIN = new BinaryTree(
id, BinaryTree::TreeType::RootMin, total_tree_nodes, start, stride);
this->counter = 0;
}
LogicalTopology* DoubleBinaryTreeTopology::get_topology() {
BinaryTree* ans = nullptr;
if (counter % 2 == 0) {
ans = DBMAX;
} else {
ans = DBMIN;
}
counter++;
return ans;
}
int DoubleBinaryTreeTopology::get_num_of_dimensions() {
return 1;
}
int DoubleBinaryTreeTopology::get_num_of_nodes_in_dimension(int dimension) {
return DBMIN->get_num_of_nodes_in_dimension(0);
}
BasicLogicalTopology* DoubleBinaryTreeTopology::get_basic_topology_at_dimension(
int dimension,
ComType type) {
if (dimension == 0) {
return ((BinaryTree*)get_topology())
->get_basic_topology_at_dimension(0, type);
} else {
return nullptr;
}
}
} // namespace AstraSim