12 #ifndef SSTMAC_HARDWARE_NETWORK_SWITCHES_REGULAR_TOPOLOGY_H_INCLUDED 13 #define SSTMAC_HARDWARE_NETWORK_SWITCHES_REGULAR_TOPOLOGY_H_INCLUDED 66 internal_connectable_map& connectables,
70 sprockit::sim_parameters *params,
75 end_point_connectable_map& connectables,
79 sprockit::sim_parameters *params);
84 end_point_connectable_map& connectables,
88 sprockit::sim_parameters* params,
169 return endpoints_per_switch_;
223 return nid % endpoints_per_switch_;
276 virtual std::vector<node_id>
281 virtual std::vector<node_id>
299 std::vector<node_id>&
partners)
const;
305 std::vector<node_id>& partners)
const;
311 virtual std::vector<node_id>
328 bool get_send_partner,
331 std::vector<node_id>& partner_list)
const;
337 std::vector<node_id>& partners)
const;
343 std::vector<node_id>& partners)
const;
349 std::vector<node_id>& partners)
const;
355 std::vector<node_id>& partners)
const;
coordinates switch_coords(switch_id swid) const
Compute coordinates (e.g.
virtual node_id node_addr(const coordinates &coords) const
virtual int minimal_distance(const coordinates &src_coords, const coordinates &dest_coords) const =0
The function accepts either source or node coordinates.
void configure_injection_geometry(std::vector< int > &redundancies)
virtual int endpoint_to_ejection_port(node_id addr) const
virtual void tornado_send_partners(const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
virtual void connect_objects(internal_connectable_map &objects)=0
Given a set of connectables, connect them appropriately.
virtual void send_partners(traffic_pattern::type_t ty, node_id src_node, std::vector< node_id > &partners) const
virtual void build_interface_connectables(int conc, end_point_connectable_map &connectables, sprockit::factory2< connectable > *nic_factory, partition *part, int my_rank, sprockit::sim_parameters *params, sprockit::factory_type *interconnect)
virtual int diameter() const =0
virtual std::vector< node_id > nodes_connected_to_injection_switch(switch_id swaddr) const
virtual std::vector< node_id > nodes_connected_to_switch(switch_id swaddr) const
virtual switch_id endpoint_to_ejection_switch(node_id nodeaddr, int &switch_port) const
virtual void compute_switch_coords(switch_id swid, coordinates &coords) const =0
Compute coordinates (e.g.
virtual int endpoint_to_switch_port(node_id nid) const
virtual coordinates node_coords(node_id nid) const
Compute coordinates (e.g.
virtual void minimal_route_to_switch(switch_id current_sw_addr, switch_id dest_sw_addr, structured_routable::path &path) const
Implementation of topology::minimal_route_to_switch.
virtual void recv_partners(traffic_pattern::type_t ty, node_id src_node, std::vector< node_id > &partners) const
virtual int num_nodes() const
virtual int num_endpoints() const
virtual ~structured_topology()
virtual int num_leaf_switches() const =0
Structured topologies can be direct (torus) or indirect (fat tree).
virtual void minimal_routes_to_switch(switch_id current_sw_addr, switch_id dest_sw_addr, structured_routable::path ¤t_path, structured_routable::path_set &paths) const
virtual void tornado_recv_partners(const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
virtual void build_endpoint_connectables(end_point_connectable_map &connectables, sprockit::factory< connectable > *factory, partition *part, int my_rank, sprockit::sim_parameters *params)
virtual int ndimensions() const =0
The number of distinct 'dimensions' in the topology.
SUMI = Simulator unified messagine interface It is also the name for a solid ink in Japanese - i...
virtual int endpoint_to_injection_port(node_id addr) const
virtual void init_factory_params(sprockit::sim_parameters *params)
virtual void nearest_neighbor_partners(const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
virtual int num_hops_to_node(node_id src, node_id dst) const
virtual void bit_complement_partners(const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
virtual coordinates neighbor_at_port(switch_id sid, int port) const
void partners(bool get_send_partner, traffic_pattern::type_t ty, node_id src, std::vector< node_id > &partner_list) const
virtual std::vector< node_id > nodes_connected_to_ejection_switch(switch_id swid) const
std::string label(node_id nid) const
virtual switch_id endpoint_to_injection_switch(node_id nodeaddr, int &switch_port) const
virtual void minimal_route_to_coords(const coordinates &src_coords, const coordinates &dest_coords, structured_routable::path &path) const =0
Workhorse function for implementing minimal_route_to_switch and #minimal_route_to_node.
virtual void productive_paths(structured_routable::path_set &paths, const coordinates ¤t, const coordinates &dst)
virtual void minimal_routes_to_coords(const coordinates &src_coords, const coordinates &dest_coords, structured_routable::path ¤t_path, structured_routable::path_set &paths) const
Encapsulates a topology like torus, fat tree, butterfly which has a regular, well-defined structure...
virtual void build_internal_connectables(internal_connectable_map &connectables, sprockit::factory< connectable > *factory, partition *part, int my_rank, sprockit::sim_parameters *params, connectable *dummy)
virtual void eject_paths_on_switch(node_id dest_addr, switch_id sw_addr, structured_routable::path_set &paths) const
virtual switch_id switch_number(const coordinates &coords) const =0
Class for storing all the partitions given to us by METIS.
int injection_redundancy_
coordinates endpoint_coords(node_id nid) const
virtual int endpoints_per_switch(switch_id addr) const
Given a switch address, return number of nodes connected to it.
virtual void productive_path(int dim, const coordinates &src, const coordinates &dst, structured_routable::path &path) const =0