XBT_INFO("%s' dragonfly topology:", d->get_cname());
for (int i = 0; i < d->getHostCount(); i++) {
unsigned int coords[4];
- d->rankId_to_coords(i, &coords);
+ d->rankId_to_coords(i, coords);
XBT_INFO(" %d: (%u, %u, %u, %u)", i, coords[0], coords[1], coords[2], coords[3]);
}
}
void generateLinks();
void createLink(const std::string& id, int numlinks, resource::LinkImpl** linkup, resource::LinkImpl** linkdown);
- void rankId_to_coords(int rankId, unsigned int (*coords)[4]);
+ void rankId_to_coords(int rankId, unsigned int coords[4]);
private:
simgrid::s4u::Link::SharingPolicy sharing_policy_;
}
}
-void DragonflyZone::rankId_to_coords(int rankId, unsigned int (*coords)[4])
+void DragonflyZone::rankId_to_coords(int rankId, unsigned int coords[4])
{
// coords : group, chassis, blade, node
- (*coords)[0] = rankId / (num_chassis_per_group_ * num_blades_per_chassis_ * num_nodes_per_blade_);
- rankId = rankId % (num_chassis_per_group_ * num_blades_per_chassis_ * num_nodes_per_blade_);
- (*coords)[1] = rankId / (num_blades_per_chassis_ * num_nodes_per_blade_);
- rankId = rankId % (num_blades_per_chassis_ * num_nodes_per_blade_);
- (*coords)[2] = rankId / num_nodes_per_blade_;
- (*coords)[3] = rankId % num_nodes_per_blade_;
+ coords[0] = rankId / (num_chassis_per_group_ * num_blades_per_chassis_ * num_nodes_per_blade_);
+ rankId = rankId % (num_chassis_per_group_ * num_blades_per_chassis_ * num_nodes_per_blade_);
+ coords[1] = rankId / (num_blades_per_chassis_ * num_nodes_per_blade_);
+ rankId = rankId % (num_blades_per_chassis_ * num_nodes_per_blade_);
+ coords[2] = rankId / num_nodes_per_blade_;
+ coords[3] = rankId % num_nodes_per_blade_;
}
void DragonflyZone::parse_specific_arguments(ClusterCreationArgs* cluster)
}
unsigned int myCoords[4];
- rankId_to_coords(src->id(), &myCoords);
+ rankId_to_coords(src->id(), myCoords);
unsigned int targetCoords[4];
- rankId_to_coords(dst->id(), &targetCoords);
+ 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]);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster_torus, surf_route_cluster, "Torus Routing part of surf");
-inline void rankId_to_coords(int rankId, std::vector<unsigned int> dimensions, unsigned int (*coords)[4])
+inline void rankId_to_coords(int rankId, std::vector<unsigned int> dimensions, unsigned int coords[4])
{
unsigned int dim_size_product = 1;
unsigned int i = 0;
for (auto const& 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++;
}
* both arrays, we can easily assess whether we need to route into this dimension or not.
*/
unsigned int myCoords[4];
- rankId_to_coords(src->id(), dimensions_, &myCoords);
+ rankId_to_coords(src->id(), dimensions_, myCoords);
unsigned int targetCoords[4];
- rankId_to_coords(dst->id(), dimensions_, &targetCoords);
+ rankId_to_coords(dst->id(), dimensions_, targetCoords);
/*
* linkOffset describes the offset where the link we want to use is stored(+1 is added because each node has a link
* from itself to itself, which can only be the case if src->m_id == dst->m_id -- see above for this special case)