astra-sim-alibabacloud/astra-sim/system/topology/Torus3D.cc (50 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 "Torus3D.hh" namespace AstraSim { Torus3D::Torus3D(int id, int total_nodes, int local_dim, int vertical_dim) { int horizontal_dim = total_nodes / (vertical_dim * local_dim); local_dimension = new RingTopology( RingTopology::Dimension::Local, id, local_dim, id % local_dim, 1); vertical_dimension = new RingTopology( RingTopology::Dimension::Vertical, id, vertical_dim, id / (local_dim * horizontal_dim), local_dim * horizontal_dim); horizontal_dimension = new RingTopology( RingTopology::Dimension::Horizontal, id, horizontal_dim, (id / local_dim) % horizontal_dim, local_dim); } Torus3D::~Torus3D() { delete local_dimension; delete vertical_dimension; delete horizontal_dimension; }; int Torus3D::get_num_of_dimensions() { return 3; } int Torus3D::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 vertical_dimension->get_num_of_nodes_in_dimension(0); } else if (dimension == 2) { return horizontal_dimension->get_num_of_nodes_in_dimension(0); } return -1; } BasicLogicalTopology* Torus3D::get_basic_topology_at_dimension( int dimension, ComType type) { if (dimension == 0) { return local_dimension; } else if (dimension == 1) { return vertical_dimension; } else if (dimension == 2) { return horizontal_dimension; } return NULL; } } // namespace AstraSim