X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7b4d2c4a1c1c667a0a5676dff5dffe6cb6b8aced..657a66f7b1356f4d91ae3392f2cd999f0406a60c:/include/simgrid/kernel/routing/DragonflyZone.hpp diff --git a/include/simgrid/kernel/routing/DragonflyZone.hpp b/include/simgrid/kernel/routing/DragonflyZone.hpp index 9144e16a61..70c6e6299e 100644 --- a/include/simgrid/kernel/routing/DragonflyZone.hpp +++ b/include/simgrid/kernel/routing/DragonflyZone.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2021. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -19,10 +19,14 @@ public: unsigned int chassis_; unsigned int blade_; resource::LinkImpl* blue_link_ = nullptr; + resource::LinkImpl* limiter_ = nullptr; std::vector black_links_; std::vector green_links_; std::vector my_nodes_; - DragonflyRouter(unsigned group, unsigned chassis, unsigned blade) : group_(group), chassis_(chassis), blade_(blade) {} + DragonflyRouter(unsigned group, unsigned chassis, unsigned blade, resource::LinkImpl* limiter) + : group_(group), chassis_(chassis), blade_(blade), limiter_(limiter) + { + } }; /** @ingroup ROUTING_API @@ -60,22 +64,41 @@ public: */ class XBT_PUBLIC DragonflyZone : public ClusterZone { public: - explicit DragonflyZone(NetZoneImpl* father, const std::string& name, resource::NetworkModel* netmodel); - // void create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, int rank, int position) override; - void get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* into, double* latency) override; - void parse_specific_arguments(ClusterCreationArgs* cluster) override; - void seal() override; + struct Coords { + unsigned group; + unsigned chassis; + unsigned blade; + unsigned node; + }; - void rankId_to_coords(int rank_id, unsigned int coords[4]); + explicit DragonflyZone(const std::string& name); + void get_local_route(NetPoint* src, NetPoint* dst, Route* into, double* latency) override; + /** + * @brief Parse topology parameters from string format + * + * @param topo_parameters Topology parameters, e.g. "3,4 ; 3,2 ; 3,1 ; 2" + */ + static s4u::DragonflyParams parse_topo_parameters(const std::string& topo_parameters); + + /** @brief Checks topology parameters */ + static void check_topology(unsigned int n_groups, unsigned int groups_links, unsigned int n_chassis, + unsigned int chassis_links, unsigned int n_routers, unsigned int routers_links, + unsigned int nodes); + /** @brief Set Dragonfly topology */ + void set_topology(unsigned int n_groups, unsigned int groups_links, unsigned int n_chassis, + unsigned int chassis_links, unsigned int n_routers, unsigned int routers_links, unsigned int nodes); + /** @brief Build upper levels (routers) in Dragonfly */ + void build_upper_levels(const s4u::ClusterCallbacks& set_callbacks); + /** @brief Set the characteristics of links inside the Dragonfly zone */ + void set_link_characteristics(double bw, double lat, s4u::Link::SharingPolicy sharing_policy) override; + Coords rankId_to_coords(int rank_id) const; + XBT_ATTRIB_DEPRECATED_v330("Please use rankId_to_coords(int)") void rankId_to_coords(int rank_id, + unsigned int coords[4]) const; private: - void generate_routers(); + void generate_routers(const s4u::ClusterCallbacks& set_callbacks); void generate_links(); - void create_link(const std::string& id, int numlinks, resource::LinkImpl** linkup, resource::LinkImpl** linkdown); - - simgrid::s4u::Link::SharingPolicy sharing_policy_; - double bw_ = 0; - double lat_ = 0; + void generate_link(const std::string& id, int numlinks, resource::LinkImpl** linkup, resource::LinkImpl** linkdown); unsigned int num_nodes_per_blade_ = 0; unsigned int num_blades_per_chassis_ = 0;