X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a22eb0ac7d22d5beaa6e33adf8f85c28dac59024..90eef5a9e56c75d7513b2a0fdb4594d292763ca6:/src/kernel/routing/FatTreeZone.hpp diff --git a/src/kernel/routing/FatTreeZone.hpp b/src/kernel/routing/FatTreeZone.hpp index 91f2c54d31..7e329b68f0 100644 --- a/src/kernel/routing/FatTreeZone.hpp +++ b/src/kernel/routing/FatTreeZone.hpp @@ -14,7 +14,7 @@ namespace routing { class XBT_PRIVATE FatTreeLink; -/** \brief A node in a fat tree (@ref AsClusterFatTree). +/** \brief A node in a fat tree (@ref FatTreeZone). * A FatTreeNode can either be a switch or a processing node. Switches are * identified by a negative ID. This class is closely related to fat */ @@ -24,10 +24,10 @@ public: int id; /* Level into the tree, with 0 being the leafs. */ - unsigned int level; + unsigned int level; /* \brief Position into the level, starting from 0. */ - unsigned int position; + unsigned int position; /** In order to link nodes between them, each one must be assigned a label, * consisting of l integers, l being the levels number of the tree. Each label * is unique in the level, and the way it is generated allows the construction @@ -36,48 +36,44 @@ public: std::vector label; /** Links to the lower level, where the position in the vector corresponds to - * a port number. + * a port number. */ std::vector children; /** Links to the upper level, where the position in the vector corresponds to - * a port number. - */ + * a port number. + */ std::vector parents; /** Virtual link standing for the node global capacity. */ - Link* limiterLink; + surf::LinkImpl* limiterLink; /** If present, communications from this node to this node will pass through it * instead of passing by an upper level switch. */ - Link* loopback; - FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level, int position); + surf::LinkImpl* loopback; + FatTreeNode(ClusterCreationArgs* cluster, int id, int level, int position); }; - - -/** \brief Link in a fat tree (@ref AsClusterFatTree). +/** \brief Link in a fat tree (@ref FatTreeZone). * * Represents a single, duplex link in a fat tree. This is necessary to have a tree. * It is equivalent to a physical link. */ class FatTreeLink { public: - FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *source, FatTreeNode *destination); + FatTreeLink(ClusterCreationArgs* cluster, FatTreeNode* source, FatTreeNode* destination); /** Link going up in the tree */ - Link *upLink; + surf::LinkImpl* upLink; /** Link going down in the tree */ - Link *downLink; + surf::LinkImpl* downLink; /** Upper end of the link */ - FatTreeNode *upNode; + FatTreeNode* upNode; /** Lower end of the link */ - FatTreeNode *downNode; + FatTreeNode* downNode; }; -/** - * \class AsClusterFatTree - * - * \brief Fat tree representation and routing. +/** @ingroup ROUTING_API + * @brief NetZone using a Fat-Tree topology * * Generate fat trees according to the topology asked for, according to: * Eitan Zahavi, D-Mod-K Routing Providing Non-Blocking Traffic for Shift @@ -87,11 +83,11 @@ public: * which are not currently enforced. * * The exact topology is described in the mandatory topo_parameters - * field, and follow the "h ; m_h, ..., m_1 ; w_h, ..., w_1 ; p_h, ..., p_1" format. + * field, and follow the "h ; m_1, ..., m_h ; w_1, ..., w_h ; p_1, ..., p_h" format. * h stands for the switches levels number, i.e. the fat tree is of height h, * without the processing nodes. m_i stands for the number of lower level nodes * connected to a node in level i. w_i stands for the number of upper levels - * nodes connected to a node in level i-1. p_i stands for the number of + * nodes connected to a node in level i-1. p_i stands for the number of * parallel links connecting two nodes between level i and i - 1. Level h is * the topmost switch level, level 1 is the lowest switch level, and level 0 * represents the processing nodes. The number of provided nodes must be exactly @@ -100,16 +96,16 @@ public: * * Routing is made using a destination-mod-k scheme. */ -class XBT_PRIVATE AsClusterFatTree : public AsCluster { +class XBT_PRIVATE FatTreeZone : public ClusterZone { public: - explicit AsClusterFatTree(As* father, const char* name); - ~AsClusterFatTree() override; - void getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t into, double* latency) override; + explicit FatTreeZone(NetZone* father, std::string name); + ~FatTreeZone() override; + void getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t into, double* latency) override; /** \brief Generate the fat tree - * + * * Once all processing nodes have been added, this will make sure the fat - * tree is generated by calling generateLabels(), generateSwitches() and + * tree is generated by calling generateLabels(), generateSwitches() and * then connection all nodes between them, using their label. */ void seal() override; @@ -117,35 +113,34 @@ public: * * It will also store the cluster for future use. */ - void parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) override; + void parse_specific_arguments(ClusterCreationArgs* cluster) override; void addProcessingNode(int id); void generateDotFile(const std::string& filename = "fatTree.dot") const; private: - - //description of a PGFT (TODO : better doc) - unsigned int levels_ = 0; + // description of a PGFT (TODO : better doc) + unsigned long levels_ = 0; std::vector lowerLevelNodesNumber_; // number of children by node std::vector upperLevelNodesNumber_; // number of parents by node std::vector lowerLevelPortsNumber_; // ports between each level l and l-1 - + std::map computeNodes_; std::vector nodes_; std::vector links_; std::vector nodesByLevel_; - sg_platf_cluster_cbarg_t cluster_ = nullptr; + ClusterCreationArgs* cluster_ = nullptr; - void addLink(FatTreeNode *parent, unsigned int parentPort, - FatTreeNode *child, unsigned int childPort); + void addLink(FatTreeNode* parent, unsigned int parentPort, FatTreeNode* child, unsigned int childPort); int getLevelPosition(const unsigned int level); void generateLabels(); void generateSwitches(); - int connectNodeToParents(FatTreeNode *node); - bool areRelated(FatTreeNode *parent, FatTreeNode *child); - bool isInSubTree(FatTreeNode *root, FatTreeNode *node); + int connectNodeToParents(FatTreeNode* node); + bool areRelated(FatTreeNode* parent, FatTreeNode* child); + bool isInSubTree(FatTreeNode* root, FatTreeNode* node); }; - -}}} // namespaces +} +} +} // namespaces #endif