SST/macro
Public Types | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
sstmac::hw::dragonfly Class Reference

#include <dragonfly.h>

Inheritance diagram for sstmac::hw::dragonfly:
Inheritance graph
Collaboration diagram for sstmac::hw::dragonfly:
Collaboration graph

Public Types

enum  dimension_t { x_dimension = 0, y_dimension = 1, g_dimension = 2 }
 
enum  x_vc_t { upX_vc = 0, downX_vc = 1 }
 
enum  y_vc_t { upY_vc = 0, downY_vc = 1 }
 

Public Member Functions

virtual std::string to_string () const
 
dimension_t dim_for_port (int port)
 
virtual ~dragonfly ()
 
virtual void init_factory_params (sprockit::sim_parameters *params)
 
void init_common_params (sprockit::sim_parameters *params)
 
int ndimensions () const
 The number of distinct 'dimensions' in the topology. More...
 
int numX () const
 
int numY () const
 
int numG () const
 
int group_con () const
 
void get_coords (long uid, int &x, int &y, int &g) const
 
long get_uid (int x, int y, int g) const
 
switch_id switch_number (const coordinates &coords) const
 
virtual int num_switches () const
 
int num_leaf_switches () const
 Structured topologies can be direct (torus) or indirect (fat tree). More...
 
virtual void connect_objects (internal_connectable_map &switches)
 Given a set of connectables, connect them appropriately. More...
 
virtual int diameter () const
 
coordinates neighbor_at_port (switch_id sid, int port) const
 
virtual switch_id random_intermediate_switch (switch_id current_sw, switch_id dest_sw=switch_id(-1))
 
virtual int convert_to_port (int dim, int dir) const
 
void configure_vc_routing (std::map< routing::algorithm_t, int > &m) const
 
virtual void productive_path (int dim, const coordinates &src, const coordinates &dst, structured_routable::path &path) const
 
void minimal_route_to_coords (const coordinates &src_coords, const coordinates &dest_coords, structured_routable::path &path) const
 Workhorse function for implementing minimal_route_to_switch and #minimal_route_to_node. More...
 
int minimal_distance (const coordinates &src_coords, const coordinates &dest_coords) const
 The function accepts either source or node coordinates. More...
 
void nearest_neighbor_partners (const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
 
void bit_complement_partners (const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
 
void tornado_send_partners (const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
 
void tornado_recv_partners (const coordinates &src_sw_coords, int port, std::vector< node_id > &partners) const
 
virtual void new_routing_stage (structured_routable *rtbl)
 
virtual void configure_geometric_paths (std::vector< int > &redundancies)
 configure_geometric_paths For all possible geometric or structure paths, compute their redundances in terms of number of ports that go in the same geometric or structural direction, e.g. More...
 
- Public Member Functions inherited from sstmac::hw::cartesian_topology
virtual void minimal_routes_to_switch (switch_id current_sw_addr, switch_id dest_sw_addr, structured_routable::path &current_path, structured_routable::path_set &paths) const
 
- Public Member Functions inherited from sstmac::hw::structured_topology
virtual ~structured_topology ()
 
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 build_endpoint_connectables (end_point_connectable_map &connectables, sprockit::factory< connectable > *factory, partition *part, int my_rank, sprockit::sim_parameters *params)
 
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 void minimal_routes_to_coords (const coordinates &src_coords, const coordinates &dest_coords, structured_routable::path &current_path, structured_routable::path_set &paths) const
 
virtual int endpoints_per_switch (switch_id addr) const
 Given a switch address, return number of nodes connected to it. More...
 
virtual int num_nodes () const
 
virtual int num_endpoints () const
 
coordinates switch_coords (switch_id swid) const
 Compute coordinates (e.g. More...
 
virtual coordinates node_coords (node_id nid) const
 Compute coordinates (e.g. More...
 
coordinates endpoint_coords (node_id nid) const
 
virtual switch_id endpoint_to_ejection_switch (node_id nodeaddr, int &switch_port) const
 
virtual switch_id endpoint_to_injection_switch (node_id nodeaddr, int &switch_port) const
 
virtual int endpoint_to_ejection_port (node_id addr) const
 
virtual int endpoint_to_injection_port (node_id addr) const
 
virtual int endpoint_to_switch_port (node_id nid) const
 
void finalize_init ()
 
virtual void productive_paths (structured_routable::path_set &paths, const coordinates &current, const coordinates &dst)
 
std::string label (node_id nid) const
 
std::string label (switch_id sid) const
 
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. More...
 
virtual void eject_paths_on_switch (node_id dest_addr, switch_id sw_addr, structured_routable::path_set &paths) const
 
virtual int num_hops_to_node (node_id src, node_id dst) const
 
virtual std::vector< node_idnodes_connected_to_injection_switch (switch_id swaddr) const
 
virtual std::vector< node_idnodes_connected_to_ejection_switch (switch_id swid) const
 
virtual node_id node_addr (const coordinates &coords) const
 
virtual node_id node_addr (const coordinates &sw_coords, int port) const
 
virtual void send_partners (traffic_pattern::type_t ty, node_id src_node, std::vector< node_id > &partners) const
 
virtual void recv_partners (traffic_pattern::type_t ty, node_id src_node, std::vector< node_id > &partners) const
 

Protected Member Functions

void minimal_route_to_group (int myX, int myY, int myG, int &dim, int &dir, int dstg) const
 
virtual void find_path_to_group (int myX, int myY, int myG, int &dsty, int &dstx, int dstg) const
 
int minimal_route_to_X (int hisx) const
 
int minimal_route_to_Y (int hisy) const
 
virtual void compute_switch_coords (switch_id uid, coordinates &coords) const
 Compute coordinates (e.g. More...
 
int find_y_path_to_group (int myX, int myG, int dstg) const
 
int find_x_path_to_group (int myY, int myG, int dstg) const
 
virtual bool xy_connected_to_group (int myX, int myY, int myG, int dstg) const
 
int xyg_dir_to_group (int myX, int myY, int myG, int dir) const
 
- Protected Member Functions inherited from sstmac::hw::structured_topology
void configure_injection_geometry (std::vector< int > &redundancies)
 
virtual std::vector< node_idnodes_connected_to_switch (switch_id swaddr) const
 
 structured_topology ()
 
void partners (bool get_send_partner, traffic_pattern::type_t ty, node_id src, std::vector< node_id > &partner_list) const
 

Static Protected Member Functions

static std::string set_string (int x, int y, int g)
 

Protected Attributes

int x_
 
int y_
 
int g_
 
int group_con_
 
bool true_random_intermediate_
 
- Protected Attributes inherited from sstmac::hw::cartesian_topology
std::vector< int > red_
 The number of redundant links (ports) comprising a geometric or structure direction in the topology. More...
 
- Protected Attributes inherited from sstmac::hw::structured_topology
int eject_geometric_id_
 
int injection_redundancy_
 
bool outputgraph_
 

Detailed Description

Definition at line 20 of file dragonfly.h.

Member Enumeration Documentation

Enumerator
x_dimension 
y_dimension 
g_dimension 

Definition at line 24 of file dragonfly.h.

Enumerator
upX_vc 
downX_vc 

Definition at line 30 of file dragonfly.h.

Enumerator
upY_vc 
downY_vc 

Definition at line 35 of file dragonfly.h.

Constructor & Destructor Documentation

virtual sstmac::hw::dragonfly::~dragonfly ( )
inlinevirtual

Definition at line 57 of file dragonfly.h.

References init_common_params(), and init_factory_params().

Here is the call graph for this function:

Member Function Documentation

void sstmac::hw::dragonfly::bit_complement_partners ( const coordinates src_sw_coords,
int  port,
std::vector< node_id > &  partners 
) const
virtual

Reimplemented from sstmac::hw::structured_topology.

Referenced by diameter().

virtual void sstmac::hw::dragonfly::compute_switch_coords ( switch_id  swid,
coordinates coords 
) const
protectedvirtual

Compute coordinates (e.g.

X,Y,Z for 3D torus)

Parameters
swidThe unique index defining a switch location
coords[inout] The unique coordinates of the switch

Implements sstmac::hw::structured_topology.

Referenced by diameter().

virtual void sstmac::hw::dragonfly::configure_geometric_paths ( std::vector< int > &  redundancies)
virtual

configure_geometric_paths For all possible geometric or structure paths, compute their redundances in terms of number of ports that go in the same geometric or structural direction, e.g.

might be 3 ports that all go +X on a router

Parameters
[in,out]redundancies

Implements sstmac::hw::cartesian_topology.

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by diameter().

void sstmac::hw::dragonfly::configure_vc_routing ( std::map< routing::algorithm_t, int > &  m) const

Referenced by diameter().

virtual void sstmac::hw::dragonfly::connect_objects ( internal_connectable_map &  objects)
virtual

Given a set of connectables, connect them appropriately.

Parameters
objectsThe set of objects to connect
clonerIf in parallel mode, not all objects may exist. The factory creates missing objects.
Exceptions
value_errorIf invalid switchid is passed to cloner

Implements sstmac::hw::structured_topology.

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by num_leaf_switches().

virtual int sstmac::hw::dragonfly::convert_to_port ( int  dim,
int  dir 
) const
virtual

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by diameter().

virtual int sstmac::hw::dragonfly::diameter ( ) const
inlinevirtual
dimension_t sstmac::hw::dragonfly::dim_for_port ( int  port)
inline

Definition at line 47 of file dragonfly.h.

References g_dimension, x_, x_dimension, y_, and y_dimension.

virtual void sstmac::hw::dragonfly::find_path_to_group ( int  myX,
int  myY,
int  myG,
int &  dsty,
int &  dstx,
int  dstg 
) const
protectedvirtual

Referenced by diameter().

int sstmac::hw::dragonfly::find_x_path_to_group ( int  myY,
int  myG,
int  dstg 
) const
protected

Referenced by diameter().

int sstmac::hw::dragonfly::find_y_path_to_group ( int  myX,
int  myG,
int  dstg 
) const
protected

Referenced by diameter().

void sstmac::hw::dragonfly::get_coords ( long  uid,
int &  x,
int &  y,
int &  g 
) const

Referenced by group_con().

long sstmac::hw::dragonfly::get_uid ( int  x,
int  y,
int  g 
) const

Referenced by group_con().

int sstmac::hw::dragonfly::group_con ( ) const
inline

Definition at line 86 of file dragonfly.h.

References get_coords(), get_uid(), group_con_, and switch_number().

Here is the call graph for this function:

void sstmac::hw::dragonfly::init_common_params ( sprockit::sim_parameters *  params)

Referenced by ~dragonfly().

virtual void sstmac::hw::dragonfly::init_factory_params ( sprockit::sim_parameters *  params)
virtual

Reimplemented from sstmac::hw::cartesian_topology.

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by ~dragonfly().

int sstmac::hw::dragonfly::minimal_distance ( const coordinates src_coords,
const coordinates dest_coords 
) const
virtual

The function accepts either source or node coordinates.

This gives the minimal distance counting the number of hops between switches. If node coordinates are given, the last coordinate is just ignored.

Parameters
src_coords.The source coordinates. This can be either switch or node coordinates.
dest_coords.The destination coordinates. This can be either switch or node coordinates.
Returns
The number of hops to final destination

Implements sstmac::hw::structured_topology.

Referenced by diameter().

void sstmac::hw::dragonfly::minimal_route_to_coords ( const coordinates src_coords,
const coordinates dest_coords,
structured_routable::path path 
) const
virtual

Workhorse function for implementing minimal_route_to_switch and #minimal_route_to_node.

Given source/dest coordinates, find the minimal path.

Parameters
current_sw_addrThe addr of the current switch
dest_sw_addrThe addr of the destination switch
path[inout] A complete path descriptor to the destination switch

Implements sstmac::hw::structured_topology.

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by diameter().

void sstmac::hw::dragonfly::minimal_route_to_group ( int  myX,
int  myY,
int  myG,
int &  dim,
int &  dir,
int  dstg 
) const
protected

Referenced by diameter().

int sstmac::hw::dragonfly::minimal_route_to_X ( int  hisx) const
protected

Referenced by diameter().

int sstmac::hw::dragonfly::minimal_route_to_Y ( int  hisy) const
protected

Referenced by diameter().

int sstmac::hw::dragonfly::ndimensions ( ) const
inlinevirtual

The number of distinct 'dimensions' in the topology.

This can correspond directly to standard X,Y,Z dimensions or the the number of levels in a fat tree. The keyword topology_redundant vector should have this many entries.

Implements sstmac::hw::structured_topology.

Definition at line 66 of file dragonfly.h.

void sstmac::hw::dragonfly::nearest_neighbor_partners ( const coordinates src_sw_coords,
int  port,
std::vector< node_id > &  partners 
) const
virtual

Reimplemented from sstmac::hw::structured_topology.

Referenced by diameter().

coordinates sstmac::hw::dragonfly::neighbor_at_port ( switch_id  sid,
int  port 
) const
virtual

Reimplemented from sstmac::hw::structured_topology.

Referenced by diameter().

virtual void sstmac::hw::dragonfly::new_routing_stage ( structured_routable rtbl)
virtual

Referenced by diameter().

int sstmac::hw::dragonfly::num_leaf_switches ( ) const
inlinevirtual

Structured topologies can be direct (torus) or indirect (fat tree).

We therefore need to distinguish the total number of switches and the number of leaf switches - i.e. those directly connected to nodes. For direct topologies, num_switches and num_leaf_switches are the same. For indirect, num_leaf_switches < num_switches.

Returns
The number of leaf switches directly connected to compute nodes

Implements sstmac::hw::structured_topology.

Definition at line 105 of file dragonfly.h.

References connect_objects(), g_, x_, and y_.

Here is the call graph for this function:

virtual int sstmac::hw::dragonfly::num_switches ( ) const
inlinevirtual

Definition at line 100 of file dragonfly.h.

References g_, x_, and y_.

int sstmac::hw::dragonfly::numG ( ) const
inline

Definition at line 81 of file dragonfly.h.

References g_.

int sstmac::hw::dragonfly::numX ( ) const
inline

Definition at line 71 of file dragonfly.h.

References x_.

int sstmac::hw::dragonfly::numY ( ) const
inline

Definition at line 76 of file dragonfly.h.

References y_.

virtual void sstmac::hw::dragonfly::productive_path ( int  dim,
const coordinates src,
const coordinates dst,
structured_routable::path path 
) const
virtual
Parameters
dimThe dimension you want to move in. You might need to traverse other dimensions FIRST before you make progress on this dimension.
srcThe coordinates of the source switch
dstThe coordinates of the dest switch
path[inout] The path configuration for making progress on dim

Implements sstmac::hw::structured_topology.

Referenced by diameter().

virtual switch_id sstmac::hw::dragonfly::random_intermediate_switch ( switch_id  current_sw,
switch_id  dest_sw = switch_id(-1) 
)
virtual

Referenced by diameter().

static std::string sstmac::hw::dragonfly::set_string ( int  x,
int  y,
int  g 
)
inlinestaticprotected

Definition at line 210 of file dragonfly.h.

References sprockit::printf().

Here is the call graph for this function:

switch_id sstmac::hw::dragonfly::switch_number ( const coordinates coords) const
virtual

Implements sstmac::hw::structured_topology.

Referenced by group_con().

virtual std::string sstmac::hw::dragonfly::to_string ( ) const
inlinevirtual

Reimplemented in sstmac::hw::tiled_dragonfly.

Definition at line 42 of file dragonfly.h.

void sstmac::hw::dragonfly::tornado_recv_partners ( const coordinates src_sw_coords,
int  port,
std::vector< node_id > &  partners 
) const
virtual

Reimplemented from sstmac::hw::structured_topology.

Referenced by diameter().

void sstmac::hw::dragonfly::tornado_send_partners ( const coordinates src_sw_coords,
int  port,
std::vector< node_id > &  partners 
) const
virtual

Reimplemented from sstmac::hw::structured_topology.

Referenced by diameter().

virtual bool sstmac::hw::dragonfly::xy_connected_to_group ( int  myX,
int  myY,
int  myG,
int  dstg 
) const
protectedvirtual

Reimplemented in sstmac::hw::tiled_dragonfly.

Referenced by diameter().

int sstmac::hw::dragonfly::xyg_dir_to_group ( int  myX,
int  myY,
int  myG,
int  dir 
) const
protected

Referenced by diameter().

Member Data Documentation

int sstmac::hw::dragonfly::g_
protected
int sstmac::hw::dragonfly::group_con_
protected

Definition at line 206 of file dragonfly.h.

Referenced by group_con().

bool sstmac::hw::dragonfly::true_random_intermediate_
protected

Definition at line 207 of file dragonfly.h.

int sstmac::hw::dragonfly::x_
protected
int sstmac::hw::dragonfly::y_
protected

The documentation for this class was generated from the following file: