astra-sim-alibabacloud/astra-sim/system/topology/LocalRingNodeA2AGlobalDBT.cc (62 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 "LocalRingNodeA2AGlobalDBT.hh"
namespace AstraSim {
LocalRingNodeA2AGlobalDBT::LocalRingNodeA2AGlobalDBT(
int id,
int local_dim,
int node_dim,
int total_tree_nodes,
int start,
int stride) {
this->global_dimension_all_reduce =
new DoubleBinaryTreeTopology(id, total_tree_nodes, start, stride);
this->global_dimension_other = new RingTopology(
RingTopology::Dimension::Vertical,
id,
total_tree_nodes,
id / (local_dim * node_dim),
local_dim * node_dim);
this->local_dimension = new RingTopology(
RingTopology::Dimension::Local, id, local_dim, id % local_dim, 1);
this->node_dimension = new RingTopology(
RingTopology::Dimension::Horizontal,
id,
node_dim,
(id % (local_dim * node_dim)) / local_dim,
local_dim);
}
LocalRingNodeA2AGlobalDBT::~LocalRingNodeA2AGlobalDBT() {
delete global_dimension_all_reduce;
delete local_dimension;
delete node_dimension;
delete global_dimension_other;
}
BasicLogicalTopology* LocalRingNodeA2AGlobalDBT ::
get_basic_topology_at_dimension(int dimension, ComType type) {
if (dimension == 0) {
return local_dimension;
} else if (dimension == 1) {
return node_dimension;
} else if (dimension == 2) {
if (type == ComType::All_Reduce) {
return global_dimension_all_reduce->get_basic_topology_at_dimension(
2, type);
} else {
return global_dimension_other;
}
}
return nullptr;
}
int LocalRingNodeA2AGlobalDBT::get_num_of_nodes_in_dimension(int dimension) {
if (dimension == 0) {
return local_dimension->get_num_of_nodes_in_dimension(0);
} else if (dimension == 1) {
return node_dimension->get_num_of_nodes_in_dimension(0);
} else if (dimension == 2) {
return global_dimension_other->get_num_of_nodes_in_dimension(0);
}
return -1;
}
int LocalRingNodeA2AGlobalDBT::get_num_of_dimensions() {
return 3;
}
} // namespace AstraSim