changeset 2365e9e396f7 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=2365e9e396f7
description:
        config: add port directions and per-router delay in topology.
        This patch adds port direction names to the links during topology
        creation, which can be used for better printed names for the links
        or for users to code up their own adaptive routing algorithms.
        It also adds support for every router to have an independent latency
        value to support heterogeneous topologies with the subsequent
        garnet2.0 patch.

diffstat:

 configs/topologies/Mesh_XY.py                                  |   8 +++++
 src/mem/ruby/network/BasicLink.py                              |   8 ++++-
 src/mem/ruby/network/BasicRouter.cc                            |   1 +
 src/mem/ruby/network/BasicRouter.hh                            |   1 +
 src/mem/ruby/network/BasicRouter.py                            |   1 +
 src/mem/ruby/network/Network.hh                                |   4 ++-
 src/mem/ruby/network/Topology.cc                               |  15 ++++++++--
 src/mem/ruby/network/Topology.hh                               |   7 ++++-
 src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc  |   4 ++-
 src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh  |   4 ++-
 src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc |   4 ++-
 src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh |   4 ++-
 src/mem/ruby/network/simple/SimpleNetwork.cc                   |   4 ++-
 src/mem/ruby/network/simple/SimpleNetwork.hh                   |   4 ++-
 14 files changed, 57 insertions(+), 12 deletions(-)

diffs (271 lines):

diff -r cf870cd20cfc -r 2365e9e396f7 configs/topologies/Mesh_XY.py
--- a/configs/topologies/Mesh_XY.py     Thu Oct 06 14:35:18 2016 -0400
+++ b/configs/topologies/Mesh_XY.py     Thu Oct 06 14:35:20 2016 -0400
@@ -109,6 +109,8 @@
                     int_links.append(IntLink(link_id=link_count,
                                              src_node=routers[east_out],
                                              dst_node=routers[west_in],
+                                             src_outport="East",
+                                             dst_inport="West",
                                              weight=1))
                     link_count += 1
 
@@ -121,6 +123,8 @@
                     int_links.append(IntLink(link_id=link_count,
                                              src_node=routers[west_out],
                                              dst_node=routers[east_in],
+                                             src_outport="West",
+                                             dst_inport="East",
                                              weight=1))
                     link_count += 1
 
@@ -133,6 +137,8 @@
                     int_links.append(IntLink(link_id=link_count,
                                              src_node=routers[north_out],
                                              dst_node=routers[south_in],
+                                             src_outport="North",
+                                             dst_inport="South",
                                              weight=2))
                     link_count += 1
 
@@ -145,6 +151,8 @@
                     int_links.append(IntLink(link_id=link_count,
                                              src_node=routers[south_out],
                                              dst_node=routers[north_in],
+                                             src_outport="South",
+                                             dst_inport="North",
                                              weight=2))
                     link_count += 1
 
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/BasicLink.py
--- a/src/mem/ruby/network/BasicLink.py Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/BasicLink.py Thu Oct 06 14:35:20 2016 -0400
@@ -46,11 +46,17 @@
     cxx_header = "mem/ruby/network/BasicLink.hh"
     ext_node = Param.RubyController("External node")
     int_node = Param.BasicRouter("ID of internal node")
-    bandwidth_factor = 16
+    bandwidth_factor = 16 # only used by simple network
 
 class BasicIntLink(BasicLink):
     type = 'BasicIntLink'
     cxx_header = "mem/ruby/network/BasicLink.hh"
     src_node = Param.BasicRouter("Router on src end")
     dst_node = Param.BasicRouter("Router on dst end")
+
+    # only used by Garnet.
+    src_outport = Param.String("", "Outport direction at src router")
+    dst_inport = Param.String("", "Inport direction at dst router")
+
+    # only used by simple network
     bandwidth_factor = 16
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/BasicRouter.cc
--- a/src/mem/ruby/network/BasicRouter.cc       Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/BasicRouter.cc       Thu Oct 06 14:35:20 2016 -0400
@@ -32,6 +32,7 @@
     : ClockedObject(p)
 {
     m_id = p->router_id;
+    m_latency = p->latency;
 }
 
 void
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/BasicRouter.hh
--- a/src/mem/ruby/network/BasicRouter.hh       Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/BasicRouter.hh       Thu Oct 06 14:35:20 2016 -0400
@@ -51,6 +51,7 @@
     // ID in relation to other routers in the system
     //
     uint32_t m_id;
+    uint32_t m_latency;
 };
 
 inline std::ostream&
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/BasicRouter.py
--- a/src/mem/ruby/network/BasicRouter.py       Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/BasicRouter.py       Thu Oct 06 14:35:20 2016 -0400
@@ -34,3 +34,4 @@
     type = 'BasicRouter'
     cxx_header = "mem/ruby/network/BasicRouter.hh"
     router_id = Param.Int("ID in relation to other routers")
+    latency   = Param.Cycles(1, "number of cycles inside router")
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/Network.hh
--- a/src/mem/ruby/network/Network.hh   Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/Network.hh   Thu Oct 06 14:35:20 2016 -0400
@@ -85,7 +85,9 @@
     virtual void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link,
                             const NetDest& routing_table_entry) = 0;
     virtual void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                                  const NetDest& routing_table_entry) = 0;
+                                  const NetDest& routing_table_entry,
+                                  PortDirection src_outport,
+                                  PortDirection dst_inport) = 0;
 
     virtual void collateStats() = 0;
     virtual void print(std::ostream& out) const = 0;
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/Topology.cc
--- a/src/mem/ruby/network/Topology.cc  Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/Topology.cc  Thu Oct 06 14:35:20 2016 -0400
@@ -88,6 +88,9 @@
         BasicRouter *router_src = int_link->params()->src_node;
         BasicRouter *router_dst = int_link->params()->dst_node;
 
+        PortDirection src_outport = int_link->params()->src_outport;
+        PortDirection dst_inport = int_link->params()->dst_inport;
+
         // Store the IntLink pointers for later
         m_int_link_vector.push_back(int_link);
 
@@ -95,7 +98,7 @@
         int dst = router_dst->params()->router_id + 2*m_nodes;
 
         // create the internal uni-directional link from src to dst
-        addLink(src, dst, int_link);
+        addLink(src, dst, int_link, src_outport, dst_inport);
     }
 }
 
@@ -153,7 +156,9 @@
 }
 
 void
-Topology::addLink(SwitchID src, SwitchID dest, BasicLink* link)
+Topology::addLink(SwitchID src, SwitchID dest, BasicLink* link,
+                  PortDirection src_outport_dirn,
+                  PortDirection dst_inport_dirn)
 {
     assert(src <= m_number_of_switches+m_nodes+m_nodes);
     assert(dest <= m_number_of_switches+m_nodes+m_nodes);
@@ -164,6 +169,8 @@
     src_dest_pair.first = src;
     src_dest_pair.second = dest;
     link_entry.link = link;
+    link_entry.src_outport_dirn = src_outport_dirn;
+    link_entry.dst_inport_dirn  = dst_inport_dirn;
     m_link_map[src_dest_pair] = link_entry;
 }
 
@@ -199,7 +206,9 @@
         link_entry = m_link_map[src_dest];
         net->makeInternalLink(src - (2 * m_nodes), dest - (2 * m_nodes),
                               link_entry.link,
-                              routing_table_entry);
+                              routing_table_entry,
+                              link_entry.src_outport_dirn,
+                              link_entry.dst_inport_dirn);
     }
 }
 
diff -r cf870cd20cfc -r 2365e9e396f7 src/mem/ruby/network/Topology.hh
--- a/src/mem/ruby/network/Topology.hh  Thu Oct 06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/Topology.hh  Thu Oct 06 14:35:20 2016 -0400
@@ -52,11 +52,14 @@
 class Network;
 
 typedef std::vector<std::vector<int> > Matrix;
+typedef std::string PortDirection;
 
 struct LinkEntry
 {
     BasicLink *link;
     LinkDirection direction;
+    PortDirection src_outport_dirn;
+    PortDirection dst_inport_dirn;
 };
 
 typedef std::map<std::pair<SwitchID, SwitchID>, LinkEntry> LinkMap;
@@ -72,7 +75,9 @@
     void print(std::ostream& out) const { out << "[Topology]"; }
 
   private:
-    void addLink(SwitchID src, SwitchID dest, BasicLink* link);
+    void addLink(SwitchID src, SwitchID dest, BasicLink* link,
+                 PortDirection src_outport_dirn = "",
+                 PortDirection dest_inport_dirn = "");
     void makeLink(Network *net, SwitchID src, SwitchID dest,
                   const NetDest& routing_table_entry);
 
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc     Thu Oct 
06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc     Thu Oct 
06 14:35:20 2016 -0400
@@ -175,7 +175,9 @@
 
 void
 GarnetNetwork_d::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                                  const NetDest& routing_table_entry)
+                                  const NetDest& routing_table_entry,
+                                  PortDirection src_outport,
+                                  PortDirection dst_inport)
 {
     GarnetIntLink_d* garnet_link = safe_cast<GarnetIntLink_d*>(link);
     NetworkLink_d* net_link = garnet_link->m_network_links[0];
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh     Thu Oct 
06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh     Thu Oct 
06 14:35:20 2016 -0400
@@ -74,7 +74,9 @@
     void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link,
                     const NetDest& routing_table_entry);
     void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                          const NetDest& routing_table_entry);
+                          const NetDest& routing_table_entry,
+                          PortDirection src_outport,
+                          PortDirection dst_inport);
 
     //! Function for performing a functional write. The return value
     //! indicates the number of messages that were written.
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc
--- a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc    Thu Oct 
06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc    Thu Oct 
06 14:35:20 2016 -0400
@@ -128,7 +128,9 @@
 
 void
 GarnetNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                                const NetDest& routing_table_entry)
+                                const NetDest& routing_table_entry,
+                                PortDirection src_outport,
+                                PortDirection dst_inport)
 {
     GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
     NetworkLink *net_link = garnet_link->m_network_links[0];
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh
--- a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh    Thu Oct 
06 14:35:18 2016 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh    Thu Oct 
06 14:35:20 2016 -0400
@@ -65,7 +65,9 @@
     void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link,
                     const NetDest& routing_table_entry);
     void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                          const NetDest& routing_table_entry);
+                          const NetDest& routing_table_entry,
+                          PortDirection src_outport,
+                          PortDirection dst_inport);
 
     //! Function for performing a functional read. The return value
     //! indicates if a message was found that had the required address.
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/simple/SimpleNetwork.cc
--- a/src/mem/ruby/network/simple/SimpleNetwork.cc      Thu Oct 06 14:35:18 
2016 -0400
+++ b/src/mem/ruby/network/simple/SimpleNetwork.cc      Thu Oct 06 14:35:20 
2016 -0400
@@ -104,7 +104,9 @@
 // From a switch to a switch
 void
 SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                                const NetDest& routing_table_entry)
+                                const NetDest& routing_table_entry,
+                                PortDirection src_outport,
+                                PortDirection dst_inport)
 {
     // Create a set of new MessageBuffers
     std::vector<MessageBuffer*> queues(m_virtual_networks);
diff -r cf870cd20cfc -r 2365e9e396f7 
src/mem/ruby/network/simple/SimpleNetwork.hh
--- a/src/mem/ruby/network/simple/SimpleNetwork.hh      Thu Oct 06 14:35:18 
2016 -0400
+++ b/src/mem/ruby/network/simple/SimpleNetwork.hh      Thu Oct 06 14:35:20 
2016 -0400
@@ -64,7 +64,9 @@
     void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link,
                     const NetDest& routing_table_entry);
     void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
-                          const NetDest& routing_table_entry);
+                          const NetDest& routing_table_entry,
+                          PortDirection src_outport,
+                          PortDirection dst_inport);
 
     void print(std::ostream& out) const;
 
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to