X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5923525f8ca483b91145893d1e34797bf9649e5c..900a1b123739221101cc09eb8c65f6d90792c2bb:/src/kernel/routing/TorusZone.cpp diff --git a/src/kernel/routing/TorusZone.cpp b/src/kernel/routing/TorusZone.cpp index f0445d2991..31741214ad 100644 --- a/src/kernel/routing/TorusZone.cpp +++ b/src/kernel/routing/TorusZone.cpp @@ -9,19 +9,15 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster_torus, surf_route_cluster, "Torus Routing part of surf"); -inline unsigned int* rankId_to_coords(int rankId, std::vector dimensions) +inline void rankId_to_coords(int rankId, std::vector dimensions, unsigned int (*coords)[4]) { - unsigned int dim_size_product = 1; - unsigned int* coords = new unsigned int[dimensions.size()]; unsigned int i = 0; for (auto cur_dim_size: dimensions) { - coords[i] = (rankId / dim_size_product) % cur_dim_size; + (*coords)[i] = (rankId / dim_size_product) % cur_dim_size; dim_size_product *= cur_dim_size; i++; } - - return coords; } namespace simgrid { @@ -90,13 +86,11 @@ void TorusZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) if (!xbt_dynar_is_empty(dimensions)) { /* We are in a torus cluster - * Parse attribute dimensions="dim1,dim2,dim3,...,dimN" - * and safe it in a dynarray. + * Parse attribute dimensions="dim1,dim2,dim3,...,dimN" and safe it in a vector. * Additionally, we need to know how many ranks we have in total */ xbt_dynar_foreach (dimensions, iter, groups) { - int tmp = surf_parse_get_int(xbt_dynar_get_as(dimensions, iter, char*)); - dimensions_.push_back(tmp); + dimensions_.push_back(surf_parse_get_int(groups)); } linkCountPerNode_ = dimensions_.size(); @@ -135,8 +129,10 @@ void TorusZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg * both arrays, we can easily assess whether we need to route * into this dimension or not. */ - unsigned int* myCoords = rankId_to_coords(src->id(), dimensions_); - unsigned int* targetCoords = rankId_to_coords(dst->id(), dimensions_); + unsigned int myCoords[4]; + rankId_to_coords(src->id(), dimensions_, &myCoords); + unsigned int targetCoords[4]; + rankId_to_coords(dst->id(), dimensions_, &targetCoords); /* * linkOffset describes the offset where the link * we want to use is stored @@ -214,8 +210,6 @@ void TorusZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg current_node = next_node; next_node = 0; } - delete[] myCoords; - delete[] targetCoords; } } }