1 /* Copyright (c) 2014-2018. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 #ifndef SURF_ROUTING_CLUSTER_DRAGONFLY_HPP_
7 #define SURF_ROUTING_CLUSTER_DRAGONFLY_HPP_
9 #include <simgrid/kernel/routing/ClusterZone.hpp>
10 #include <simgrid/s4u/Link.hpp>
16 class DragonflyRouter {
19 unsigned int chassis_;
21 resource::LinkImpl** blue_links_ = nullptr;
22 resource::LinkImpl** black_links_ = nullptr;
23 resource::LinkImpl** green_links_ = nullptr;
24 resource::LinkImpl** my_nodes_ = nullptr;
25 DragonflyRouter(int i, int j, int k);
29 /** @ingroup ROUTING_API
30 * @brief NetZone using a Dragonfly topology
32 * Generate dragonfly according to the topology asked for, according to:
33 * Cray Cascade: a Scalable HPC System based on a Dragonfly Network
34 * Greg Faanes, Abdulla Bataineh, Duncan Roweth, Tom Court, Edwin Froese,
35 * Bob Alverson, Tim Johnson, Joe Kopnick, Mike Higgins and James Reinhard
36 * Cray Inc, Chippewa Falls, Wisconsin, USA
37 * or http://www.cray.com/sites/default/files/resources/CrayXCNetwork.pdf
39 * We use the same denomination for the different levels, with a Green,
40 * Black and Blue color scheme for the three different levels.
42 * Description of the topology has to be given with a string of type :
45 * Last part : "2" : 2 nodes per blade
46 * Third part : "5,1" : five blades/routers per chassis, with one link between each (green network)
47 * Second part : "4,3" = four chassis per group, with three links between each nth router of each chassis (black
49 * First part : "3,4" = three electrical groups, linked in an alltoall
50 * pattern by 4 links each (blue network)
52 * LIMITATIONS (for now):
53 * - Routing is only static and uses minimal routes.
54 * - When n links are used between two routers/groups, we consider only one link with n times the bandwidth (needs to
55 * be validated on a real system)
56 * - All links have the same characteristics for now
57 * - Blue links are all attached to routers in the chassis n°0. This limits
58 * the number of groups possible to the number of blades in a chassis. This
59 * is also not realistic, as blue level can use more links than a single
60 * Aries can handle, thus it should use several routers.
62 class XBT_PUBLIC DragonflyZone : public ClusterZone {
64 explicit DragonflyZone(NetZoneImpl* father, std::string name, resource::NetworkModel* netmodel);
65 ~DragonflyZone() override;
66 // void create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, int rank, int position) override;
67 void get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* into, double* latency) override;
68 void parse_specific_arguments(ClusterCreationArgs* cluster) override;
71 void rankId_to_coords(int rank_id, unsigned int coords[4]);
74 void generate_routers();
75 void generate_links();
76 void create_link(const std::string& id, int numlinks, resource::LinkImpl** linkup, resource::LinkImpl** linkdown);
78 simgrid::s4u::Link::SharingPolicy sharing_policy_;
82 unsigned int num_nodes_per_blade_ = 0;
83 unsigned int num_blades_per_chassis_ = 0;
84 unsigned int num_chassis_per_group_ = 0;
85 unsigned int num_groups_ = 0;
86 unsigned int num_links_green_ = 0;
87 unsigned int num_links_black_ = 0;
88 unsigned int num_links_blue_ = 0;
89 unsigned int num_links_per_link_ = 1; // splitduplex -> 2, only for local link
90 DragonflyRouter** routers_ = nullptr;
92 } // namespace routing
94 } // namespace simgrid