From 21a920373a64048c600ab3712b98eec5d9a5d26d Mon Sep 17 00:00:00 2001 From: degomme Date: Fri, 17 Jun 2016 12:28:04 +0200 Subject: [PATCH] Add loopbacks and limiters for dragonfly --- src/surf/AsClusterDragonfly.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/surf/AsClusterDragonfly.cpp b/src/surf/AsClusterDragonfly.cpp index 3844806341..e0095a56d9 100644 --- a/src/surf/AsClusterDragonfly.cpp +++ b/src/surf/AsClusterDragonfly.cpp @@ -268,18 +268,18 @@ void AsClusterDragonfly::getRouteAndLatency(NetCard * src, NetCard * dst, sg_pla if (dst->isRouter() || src->isRouter()) return; - //TODO:loopback and limiters + XBT_VERB("dragonfly_get_route_and_latency from '%s'[%d] to '%s'[%d]", src->name(), src->id(), dst->name(), dst->id()); -// if ((src->id() == dst->id()) && hasLoopback_) { -// s_surf_parsing_link_up_down_t info = xbt_dynar_get_as(privateLinks_, src->id() * linkCountPerNode_, s_surf_parsing_link_up_down_t); + if ((src->id() == dst->id()) && hasLoopback_) { + s_surf_parsing_link_up_down_t info = xbt_dynar_get_as(privateLinks_, src->id() * linkCountPerNode_, s_surf_parsing_link_up_down_t); -// route->link_list->push_back(info.linkUp); -// if (lat) -// *lat += info.linkUp->getLatency(); -// return; -// } + route->link_list->push_back(info.linkUp); + if (latency) + *latency += info.linkUp->getLatency(); + return; + } unsigned int *myCoords, *targetCoords; myCoords = rankId_to_coords(src->id()); @@ -297,9 +297,12 @@ void AsClusterDragonfly::getRouteAndLatency(NetCard * src, NetCard * dst, sg_pla *latency += myRouter->myNodes_[myCoords[3]]->getLatency(); } -if (src->id() == dst->id()){ -return; -} + if (hasLimiter_) { // limiter for sender + s_surf_parsing_link_up_down_t info; + info = xbt_dynar_get_as(privateLinks_, src->id() * linkCountPerNode_ + hasLoopback_, s_surf_parsing_link_up_down_t); + route->link_list->push_back(info.linkUp); + } + if(targetRouter!=myRouter){ //are we on a different group ? @@ -358,6 +361,11 @@ return; } + if (hasLimiter_) { // limiter for receiver + s_surf_parsing_link_up_down_t info; + info = xbt_dynar_get_as(privateLinks_, dst->id() * linkCountPerNode_ + hasLoopback_, s_surf_parsing_link_up_down_t); + route->link_list->push_back(info.linkUp); + } //router->node local link route->link_list->push_back(targetRouter->myNodes_[targetCoords[3]]); -- 2.20.1