X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/28188d631e99c52551b652335b31ec6c48d0e000..de57b34916659892d2dc26edabf552253afe2c18:/src/kernel/routing/FatTreeZone.cpp diff --git a/src/kernel/routing/FatTreeZone.cpp b/src/kernel/routing/FatTreeZone.cpp index 7eba19349b..e8732f1e11 100644 --- a/src/kernel/routing/FatTreeZone.cpp +++ b/src/kernel/routing/FatTreeZone.cpp @@ -20,7 +20,7 @@ namespace simgrid { namespace kernel { namespace routing { -FatTreeZone::FatTreeZone(NetZone* father, const char* name) : ClusterZone(father, name) +FatTreeZone::FatTreeZone(NetZone* father, std::string name) : ClusterZone(father, name) { XBT_DEBUG("Creating a new fat tree."); } @@ -56,7 +56,7 @@ bool FatTreeZone::isInSubTree(FatTreeNode* root, FatTreeNode* node) return true; } -void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t into, double* latency) +void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, RouteCreationArgs* into, double* latency) { if (dst->isRouter() || src->isRouter()) @@ -65,20 +65,20 @@ void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba /* Let's find the source and the destination in our internal structure */ auto searchedNode = this->computeNodes_.find(src->id()); xbt_assert(searchedNode != this->computeNodes_.end(), "Could not find the source %s [%u] in the fat tree", - src->name().c_str(), src->id()); + src->getCname(), src->id()); FatTreeNode* source = searchedNode->second; searchedNode = this->computeNodes_.find(dst->id()); xbt_assert(searchedNode != this->computeNodes_.end(), "Could not find the destination %s [%u] in the fat tree", - dst->name().c_str(), dst->id()); + dst->getCname(), dst->id()); FatTreeNode* destination = searchedNode->second; - XBT_VERB("Get route and latency from '%s' [%u] to '%s' [%u] in a fat tree", src->name().c_str(), src->id(), - dst->name().c_str(), dst->id()); + XBT_VERB("Get route and latency from '%s' [%u] to '%s' [%u] in a fat tree", src->getCname(), src->id(), + dst->getCname(), dst->id()); /* In case destination is the source, and there is a loopback, let's use it instead of going up to a switch */ if (source->id == destination->id && this->hasLoopback_) { - into->link_list->push_back(source->loopback); + into->link_list.push_back(source->loopback); if (latency) *latency += source->loopback->latency(); return; @@ -95,13 +95,13 @@ void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba int k = this->upperLevelNodesNumber_[currentNode->level]; d = d % k; - into->link_list->push_back(currentNode->parents[d]->upLink); + into->link_list.push_back(currentNode->parents[d]->upLink); if (latency) *latency += currentNode->parents[d]->upLink->latency(); if (this->hasLimiter_) - into->link_list->push_back(currentNode->limiterLink); + into->link_list.push_back(currentNode->limiterLink); currentNode = currentNode->parents[d]->upNode; } @@ -112,12 +112,12 @@ void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba while (currentNode != destination) { for (unsigned int i = 0; i < currentNode->children.size(); i++) { if (i % this->lowerLevelNodesNumber_[currentNode->level - 1] == destination->label[currentNode->level - 1]) { - into->link_list->push_back(currentNode->children[i]->downLink); + into->link_list.push_back(currentNode->children[i]->downLink); if (latency) *latency += currentNode->children[i]->downLink->latency(); currentNode = currentNode->children[i]->downNode; if (this->hasLimiter_) - into->link_list->push_back(currentNode->limiterLink); + into->link_list.push_back(currentNode->limiterLink); XBT_DEBUG("%d(%u,%u) is accessible through %d(%u,%u)", destination->id, destination->level, destination->position, currentNode->id, currentNode->level, currentNode->position); } @@ -356,16 +356,16 @@ void FatTreeZone::addLink(FatTreeNode* parent, unsigned int parentPort, FatTreeN this->links_.push_back(newLink); } -void FatTreeZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) +void FatTreeZone::parse_specific_arguments(ClusterCreationArgs* cluster) { std::vector parameters; std::vector tmp; boost::split(parameters, cluster->topo_parameters, boost::is_any_of(";")); + const std::string error_msg {"Fat trees are defined by the levels number and 3 vectors, see the documentation for more information"}; // TODO : we have to check for zeros and negative numbers, or it might crash if (parameters.size() != 4) { - surf_parse_error( - "Fat trees are defined by the levels number and 3 vectors, see the documentation for more information"); + surf_parse_error(error_msg); } // The first parts of topo_parameters should be the levels number @@ -378,8 +378,7 @@ void FatTreeZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) // Then, a l-sized vector standing for the children number by level boost::split(tmp, parameters[1], boost::is_any_of(",")); if (tmp.size() != this->levels_) { - surf_parse_error("Fat trees are defined by the levels number and 3 vectors" - ", see the documentation for more information"); + surf_parse_error(error_msg); } for (size_t i = 0; i < tmp.size(); i++) { try { @@ -392,8 +391,7 @@ void FatTreeZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) // Then, a l-sized vector standing for the parents number by level boost::split(tmp, parameters[2], boost::is_any_of(",")); if (tmp.size() != this->levels_) { - surf_parse_error("Fat trees are defined by the levels number and 3 vectors" - ", see the documentation for more information"); + surf_parse_error(error_msg); } for (size_t i = 0; i < tmp.size(); i++) { try { @@ -406,8 +404,7 @@ void FatTreeZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) // Finally, a l-sized vector standing for the ports number with the lower level boost::split(tmp, parameters[3], boost::is_any_of(",")); if (tmp.size() != this->levels_) { - surf_parse_error("Fat trees are defined by the levels number and 3 vectors" - ", see the documentation for more information"); + surf_parse_error(error_msg); } for (size_t i = 0; i < tmp.size(); i++) { try { @@ -441,7 +438,7 @@ void FatTreeZone::generateDotFile(const std::string& filename) const file.close(); } -FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level, int position) +FatTreeNode::FatTreeNode(ClusterCreationArgs* cluster, int id, int level, int position) : id(id), level(level), position(position) { LinkCreationArgs linkTemplate; @@ -451,7 +448,7 @@ FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level, in linkTemplate.policy = SURF_LINK_SHARED; linkTemplate.id = "limiter_"+std::to_string(id); sg_platf_new_link(&linkTemplate); - this->limiterLink = surf::LinkImpl::byName(linkTemplate.id.c_str()); + this->limiterLink = surf::LinkImpl::byName(linkTemplate.id); } if (cluster->loopback_bw || cluster->loopback_lat) { linkTemplate.bandwidth = cluster->loopback_bw; @@ -459,11 +456,11 @@ FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level, in linkTemplate.policy = SURF_LINK_FATPIPE; linkTemplate.id = "loopback_"+ std::to_string(id); sg_platf_new_link(&linkTemplate); - this->loopback = surf::LinkImpl::byName(linkTemplate.id.c_str()); + this->loopback = surf::LinkImpl::byName(linkTemplate.id); } } -FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode* downNode, FatTreeNode* upNode) +FatTreeLink::FatTreeLink(ClusterCreationArgs* cluster, FatTreeNode* downNode, FatTreeNode* upNode) : upNode(upNode), downNode(downNode) { static int uniqueId = 0; @@ -475,13 +472,13 @@ FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode* downNode "link_from_" + std::to_string(downNode->id) + "_" + std::to_string(upNode->id) + "_" + std::to_string(uniqueId); sg_platf_new_link(&linkTemplate); - if (cluster->sharing_policy == SURF_LINK_FULLDUPLEX) { + if (cluster->sharing_policy == SURF_LINK_SPLITDUPLEX) { std::string tmpID = std::string(linkTemplate.id) + "_UP"; - this->upLink = surf::LinkImpl::byName(tmpID.c_str()); // check link? + this->upLink = surf::LinkImpl::byName(tmpID); // check link? tmpID = std::string(linkTemplate.id) + "_DOWN"; - this->downLink = surf::LinkImpl::byName(tmpID.c_str()); // check link ? + this->downLink = surf::LinkImpl::byName(tmpID); // check link ? } else { - this->upLink = surf::LinkImpl::byName(linkTemplate.id.c_str()); + this->upLink = surf::LinkImpl::byName(linkTemplate.id); this->downLink = this->upLink; } uniqueId++;