SimGrid  3.13
Versatile Simulation of Distributed Systems
simgrid::surf::AsClusterTorus Class Reference

#include <AsClusterTorus.hpp>

Inheritance diagram for simgrid::surf::AsClusterTorus:
simgrid::surf::AsCluster simgrid::surf::AsImpl

Public Member Functions

 AsClusterTorus (const char *name)
 
virtual ~AsClusterTorus ()
 
void create_links_for_node (sg_platf_cluster_cbarg_t cluster, int id, int rank, int position) override
 
void getRouteAndLatency (NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override
 Probe the routing path between two points. More...
 
void parse_specific_arguments (sg_platf_cluster_cbarg_t cluster) override
 
- Public Member Functions inherited from simgrid::surf::AsCluster
 AsCluster (const char *name)
 
 ~AsCluster ()
 
void getGraph (xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override
 
- Public Member Functions inherited from simgrid::surf::AsImpl
virtual xbt_dynar_t getOneLinkRoutes ()
 retrieves the list of all routes of size 1 (of type src x dst x Link) More...
 
std::vector< surf::Link * > * getBypassRoute (surf::NetCard *src, surf::NetCard *dst)
 

Additional Inherited Members

- Public Types inherited from simgrid::surf::AsImpl
enum  RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive }
 
- Static Public Member Functions inherited from simgrid::surf::AsImpl
static void getRouteRecursive (surf::NetCard *src, surf::NetCard *dst, std::vector< surf::Link * > *links, double *latency)
 Recursive function for getRouteAndLatency. More...
 
- Public Attributes inherited from simgrid::surf::AsCluster
xbt_dynar_t privateLinks_ = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL)
 
Linkbackbone_ = nullptr
 
voidloopback_ = nullptr
 
NetCardrouter_ = nullptr
 
int has_limiter_ = 0
 
int has_loopback_ = 0
 
int nb_links_per_node_ = 1
 
- Public Attributes inherited from simgrid::surf::AsImpl
RoutingMode hierarchy_ = RoutingMode::unset
 
surf::NetCardnetcard_ = nullptr
 
- Protected Member Functions inherited from simgrid::surf::AsImpl
 AsImpl (const char *name)
 
 ~AsImpl ()
 

Constructor & Destructor Documentation

simgrid::surf::AsClusterTorus::AsClusterTorus ( const char *  name)
simgrid::surf::AsClusterTorus::~AsClusterTorus ( )
virtual

Member Function Documentation

void simgrid::surf::AsClusterTorus::create_links_for_node ( sg_platf_cluster_cbarg_t  cluster,
int  id,
int  rank,
int  position 
)
overridevirtual

Create all links that exist in the torus. Each rank creates #dimensions-1 links

Add the link to its appropriate position; note that position rankId*(xbt_dynar_length(dimensions)+has_loopack?+has_limiter?) holds the link "rankId->rankId"

Reimplemented from simgrid::surf::AsCluster.

void simgrid::surf::AsClusterTorus::getRouteAndLatency ( NetCard src,
NetCard dst,
sg_platf_route_cbarg_t  into,
double *  latency 
)
overridevirtual

Probe the routing path between two points.

The networking model uses this function when creating a communication to retrieve both the list of links that the create communication will use, and the summed latency that these links represent.

The network could recompute the latency by itself from the list, but it would require an additional link set traversal. This operation being on the critical path of SimGrid, the routing computes the latency in behalf of the network.

Things are rather complex here because we have to find the path from ASes to ASes, and within each. In addition, the different ASes may use differing routing models. Some ASes may be routed in full, others may have only some connection information and use a shortest path on top of that, and so on. Some ASes may even not have any predefined links and use only coordinate informations to compute the latency.

So, the path is constructed recursively, with each traversed AS adding its information to the set. The algorithm for that is explained in http://hal.inria.fr/hal-00650233/

Parameters
srcInitial point of the routing path
dstFinal point of the routing path
intoContainer into which the traversed links should be pushed
latencyAccumulator in which the latencies should be added (caller must set it to 0)

Dimension based routing routes through each dimension consecutively TODO Change to dynamic assignment

Arrays that hold the coordinates of the current node and the target; comparing the values at the i-th position of both arrays, we can easily assess whether we need to route into this dimension or not.

linkOffset describes the offset where the link we want to use is stored (+1 is added because each node has a link from itself to itself, which can only be the case if src->m_id == dst->m_id – see above for this special case)

Reimplemented from simgrid::surf::AsCluster.

void simgrid::surf::AsClusterTorus::parse_specific_arguments ( sg_platf_cluster_cbarg_t  cluster)
overridevirtual

We are in a torus cluster Parse attribute dimensions="dim1,dim2,dim3,...,dimN" and safe it in a dynarray. Additionally, we need to know how many ranks we have in total

Reimplemented from simgrid::surf::AsCluster.


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