From: Martin Quinson Date: Thu, 2 Mar 2017 18:29:51 +0000 (+0100) Subject: prefer the stack to the heap for temp data X-Git-Tag: v3_15~240 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/900a1b123739221101cc09eb8c65f6d90792c2bb?hp=2884c8be7d35ddd7060926a3db3367542e39099f prefer the stack to the heap for temp data --- diff --git a/src/kernel/routing/DragonflyZone.cpp b/src/kernel/routing/DragonflyZone.cpp index 8405006ac1..827aa982e7 100644 --- a/src/kernel/routing/DragonflyZone.cpp +++ b/src/kernel/routing/DragonflyZone.cpp @@ -30,18 +30,15 @@ DragonflyZone::~DragonflyZone() } } -unsigned int* DragonflyZone::rankId_to_coords(int rankId) +void DragonflyZone::rankId_to_coords(int rankId, unsigned int (*coords)[4]) { // coords : group, chassis, blade, node - unsigned int* coords = new unsigned int[4]; - coords[0] = rankId / (numChassisPerGroup_ * numBladesPerChassis_ * numNodesPerBlade_); + (*coords)[0] = rankId / (numChassisPerGroup_ * numBladesPerChassis_ * numNodesPerBlade_); rankId = rankId % (numChassisPerGroup_ * numBladesPerChassis_ * numNodesPerBlade_); - coords[1] = rankId / (numBladesPerChassis_ * numNodesPerBlade_); + (*coords)[1] = rankId / (numBladesPerChassis_ * numNodesPerBlade_); rankId = rankId % (numBladesPerChassis_ * numNodesPerBlade_); - coords[2] = rankId / numNodesPerBlade_; - coords[3] = rankId % numNodesPerBlade_; - - return coords; + (*coords)[2] = rankId / numNodesPerBlade_; + (*coords)[3] = rankId % numNodesPerBlade_; } void DragonflyZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster) @@ -271,8 +268,10 @@ void DragonflyZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_c return; } - unsigned int* myCoords = rankId_to_coords(src->id()); - unsigned int* targetCoords = rankId_to_coords(dst->id()); + unsigned int myCoords[4]; + rankId_to_coords(src->id(), &myCoords); + unsigned int targetCoords[4]; + rankId_to_coords(dst->id(), &targetCoords); XBT_DEBUG("src : %u group, %u chassis, %u blade, %u node", myCoords[0], myCoords[1], myCoords[2], myCoords[3]); XBT_DEBUG("dst : %u group, %u chassis, %u blade, %u node", targetCoords[0], targetCoords[1], targetCoords[2], targetCoords[3]); @@ -349,9 +348,6 @@ void DragonflyZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_c route->link_list->push_back(targetRouter->myNodes_[targetCoords[3] * numLinksperLink_ + numLinksperLink_ - 1]); if (latency) *latency += targetRouter->myNodes_[targetCoords[3] * numLinksperLink_ + numLinksperLink_ - 1]->latency(); - - delete[] myCoords; - delete[] targetCoords; } } } diff --git a/src/kernel/routing/DragonflyZone.hpp b/src/kernel/routing/DragonflyZone.hpp index 8a0386b674..b974803eaf 100644 --- a/src/kernel/routing/DragonflyZone.hpp +++ b/src/kernel/routing/DragonflyZone.hpp @@ -69,9 +69,9 @@ public: void generateRouters(); void generateLinks(); void createLink(std::string id, int numlinks, surf::LinkImpl** linkup, surf::LinkImpl** linkdown); - unsigned int* rankId_to_coords(int rankId); private: + void rankId_to_coords(int rankId, unsigned int (*coords)[4]); sg_platf_cluster_cbarg_t cluster_; unsigned int numNodesPerBlade_ = 0; unsigned int numBladesPerChassis_ = 0; diff --git a/src/kernel/routing/TorusZone.cpp b/src/kernel/routing/TorusZone.cpp index cbea25d32c..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 { @@ -133,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 @@ -212,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; } } }