Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
try to please clang by marking overriding methods accordingly
[simgrid.git] / src / kernel / routing / FatTreeZone.hpp
index 91f2c54..8050329 100644 (file)
@@ -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<unsigned int> label;
 
   /** Links to the lower level, where the position in the vector corresponds to
-   * a port number. 
+   * a port number.
    */
   std::vector<FatTreeLink*> children;
   /** Links to the upper level, where the position in the vector corresponds to
-   * a port number. 
-   */ 
+   * a port number.
+   */
   std::vector<FatTreeLink*> 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;
+  surf::LinkImpl* loopback;
   FatTreeNode(sg_platf_cluster_cbarg_t 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(sg_platf_cluster_cbarg_t 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;
+  FatTreeNodeupNode;
   /** Lower end of the link */
-  FatTreeNode *downNode;
+  FatTreeNodedownNode;
 };
 
-/** 
- * \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
@@ -91,7 +87,7 @@ public:
  * 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, const char* 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;
@@ -122,13 +118,12 @@ public:
   void generateDotFile(const std::string& filename = "fatTree.dot") const;
 
 private:
-  
-  //description of a PGFT (TODO : better doc)
+  // description of a PGFT (TODO : better doc)
   unsigned int levels_ = 0;
   std::vector<unsigned int> lowerLevelNodesNumber_; // number of children by node
   std::vector<unsigned int> upperLevelNodesNumber_; // number of parents by node
   std::vector<unsigned int> lowerLevelPortsNumber_; // ports between each level l and l-1
-  
+
   std::map<int, FatTreeNode*> computeNodes_;
   std::vector<FatTreeNode*> nodes_;
   std::vector<FatTreeLink*> links_;
@@ -136,16 +131,16 @@ private:
 
   sg_platf_cluster_cbarg_t 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(FatTreeNodenode);
+  bool areRelated(FatTreeNode* parent, FatTreeNode* child);
+  bool isInSubTree(FatTreeNode* root, FatTreeNode* node);
 };
-
-}}} // namespaces
+}
+}
+} // namespaces
 
 #endif