From 791598c8c3c9536bccdffa813c96d0e32342b080 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Castelli?= Date: Tue, 6 May 2014 11:05:52 +0200 Subject: [PATCH] Corrections to fat trees, set the size of connection vectors right --- src/surf/surf_routing_cluster_fat_tree.cpp | 26 +++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/surf/surf_routing_cluster_fat_tree.cpp b/src/surf/surf_routing_cluster_fat_tree.cpp index 40948d23cc..19ecc12301 100644 --- a/src/surf/surf_routing_cluster_fat_tree.cpp +++ b/src/surf/surf_routing_cluster_fat_tree.cpp @@ -19,7 +19,7 @@ void AsClusterFatTree::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf_route_cbarg_t into, double *latency) { - // TODO + } /* This function makes the assumption that parse_specific_arguments() and @@ -53,8 +53,12 @@ int AsClusterFatTree::connectNodeToParents(sg_platf_cluster_cbarg_t cluster, currentParentNode = this->nodes[this->getLevelPosition(level + 1)]; for (unsigned int i = 0 ; i < this->nodesByLevel[level] ; i++ ) { if(this->areRelated(currentParentNode, node)) { - this->addLink(cluster, currentParentNode, node->label[level + 1], node, - currentParentNode->label[level + 1]); + for (unsigned int j = 0 ; j < this->lowerLevelPortsNumber[level + 1] ; j++) { + this->addLink(cluster, currentParentNode, node->label[level + 1] + + j * this->lowerLevelNodesNumber[level + 1], node, + currentParentNode->label[level + 1] + + j * this->upperLevelNodesNumber[level + 1]); + } connectionsNumber++; } } @@ -119,12 +123,15 @@ void AsClusterFatTree::generateSwitches() { // We create the switches int k = 0; - for (unsigned int i = 1 ; i < this->levels ; i++) { + for (unsigned int i = 0 ; i < this->levels ; i++) { for (unsigned int j = 0 ; j < this->nodesByLevel[i] ; j++) { FatTreeNode* newNode; - newNode = new FatTreeNode(--k, i, j); - newNode->children.resize(this->lowerLevelNodesNumber[i]); - newNode->parents.resize(this->upperLevelNodesNumber[i]); + newNode = new FatTreeNode(--k, i + 1, j); + newNode->children.resize(this->lowerLevelNodesNumber[i] * + this->lowerLevelPortsNumber[i]); + if (i != this->levels - 1) { + newNode->parents.resize(this->upperLevelNodesNumber[i + 1]); + } this->nodes.push_back(newNode); } } @@ -173,8 +180,11 @@ int AsClusterFatTree::getLevelPosition(const unsigned int level) { } void AsClusterFatTree::addComputeNodes(std::vector const& id) { + FatTreeNode* newNode; for (size_t i = 0 ; i < id.size() ; i++) { - this->nodes.push_back(new FatTreeNode(id[i])); + newNode = new FatTreeNode(id[i], 0, i); + newNode->parents.resize(this->upperLevelNodesNumber[0] * this->lowerLevelPortsNumber[i]); + this->nodes.push_back(newNode); } } -- 2.20.1