diff -r 16263765effa -r c7c66bf28426 configs/ruby/Ruby.py --- a/configs/ruby/Ruby.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/ruby/Ruby.py Wed Aug 28 18:08:46 2013 -0500 @@ -151,11 +151,10 @@ # instantiation. # - routers, int_links, ext_links = topology.makeTopology(options, - IntLinkClass, ExtLinkClass, RouterClass) - network = NetworkClass(ruby_system = ruby, routers = routers, - int_links = int_links, ext_links = ext_links, - topology = topology.description) + network = NetworkClass(ruby_system = ruby, topology = topology.description, + routers = [], ext_links = [], int_links = []) + topology.makeTopology(options, network, IntLinkClass, ExtLinkClass, + RouterClass) if options.network_fault_model: assert(options.garnet_network == "fixed") diff -r 16263765effa -r c7c66bf28426 configs/topologies/BaseTopology.py --- a/configs/topologies/BaseTopology.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/BaseTopology.py Wed Aug 28 18:08:46 2013 -0500 @@ -38,7 +38,7 @@ all of the controllers created in the above file. """ - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): """ Called from configs/ruby/Ruby.py The return value is ( list(Router), list(IntLink), list(ExtLink)) The API of this function cannot change when subclassing!! diff -r 16263765effa -r c7c66bf28426 configs/topologies/Cluster.py --- a/configs/topologies/Cluster.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/Cluster.py Wed Aug 28 18:08:46 2013 -0500 @@ -73,22 +73,17 @@ def add(self, node): self.nodes.append(node) - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): """ Recursively make all of the links and routers """ - routers = [] - int_links = [] - ext_links = [] # make a router to connect all of the nodes self.router = Router(router_id=self.num_routers()) - routers.append(self.router) + network.routers.append(self.router) + for node in self.nodes: if type(node) == Cluster: - subRouters, subIntLinks, subExtLinks = node.makeTopology(options, IntLink, ExtLink, Router) - routers += subRouters - int_links += subIntLinks - ext_links += subExtLinks + node.makeTopology(options, network, IntLink, ExtLink, Router) # connect this cluster to the router link = IntLink(link_id=self.num_int_links(), node_a=self.router, node_b=node.router) @@ -102,7 +97,7 @@ elif self.intLatency: link.latency = self.intLatency - int_links.append(link) + network.int_links.append(link) else: # node is just a controller connect it to the router via a ext_link link = ExtLink(link_id=self.num_ext_links(), ext_node=node, int_node=self.router) @@ -111,9 +106,7 @@ if self.intLatency: link.latency = self.intLatency - ext_links.append(link) - - return routers, int_links, ext_links + network.ext_links.append(link) def __len__(self): return len([i for i in self.nodes if type(i) != Cluster]) + \ diff -r 16263765effa -r c7c66bf28426 configs/topologies/Crossbar.py --- a/configs/topologies/Crossbar.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/Crossbar.py Wed Aug 28 18:08:46 2013 -0500 @@ -34,19 +34,22 @@ class Crossbar(SimpleTopology): description='Crossbar' - def makeTopology(self, options, IntLink, ExtLink, Router): - # Create an individual router for each controller plus one more for the - # centralized crossbar. The large numbers of routers are needed because - # external links do not model outgoing bandwidth in the simple network, but - # internal links do. + def makeTopology(self, options, network, IntLink, ExtLink, Router): + # Create an individual router for each controller plus one more for + # the centralized crossbar. The large numbers of routers are needed + # because external links do not model outgoing bandwidth in the + # simple network, but internal links do. routers = [Router(router_id=i) for i in range(len(self.nodes)+1)] + xbar = routers[len(self.nodes)] # the crossbar router is the last router created + network.routers = routers + ext_links = [ExtLink(link_id=i, ext_node=n, int_node=routers[i]) for (i, n) in enumerate(self.nodes)] + network.ext_links = ext_links + link_count = len(self.nodes) - xbar = routers[len(self.nodes)] # the crossbar router is the last router created int_links = [IntLink(link_id=(link_count+i), node_a=routers[i], node_b=xbar) for i in range(len(self.nodes))] - - return routers, int_links, ext_links + network.int_links = int_links diff -r 16263765effa -r c7c66bf28426 configs/topologies/Mesh.py --- a/configs/topologies/Mesh.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/Mesh.py Wed Aug 28 18:08:46 2013 -0500 @@ -39,7 +39,7 @@ # Makes a generic mesh assuming an equal number of cache and directory cntrls - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): nodes = self.nodes num_routers = options.num_cpus @@ -54,6 +54,7 @@ # Create the routers in the mesh routers = [Router(router_id=i) for i in range(num_routers)] + network.routers = routers # link counter to set unique link ids link_count = 0 @@ -86,6 +87,8 @@ int_node=routers[0])) link_count += 1 + network.ext_links = ext_links + # Create the mesh links. First row (east-west) links then column # (north-south) links int_links = [] @@ -111,4 +114,4 @@ weight=2)) link_count += 1 - return routers, int_links, ext_links + network.int_links = int_links diff -r 16263765effa -r c7c66bf28426 configs/topologies/MeshDirCorners.py --- a/configs/topologies/MeshDirCorners.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/MeshDirCorners.py Wed Aug 28 18:08:46 2013 -0500 @@ -42,7 +42,7 @@ # configurations. The network specified is similar to GEMS old file # specified network. - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): nodes = self.nodes num_routers = options.num_cpus @@ -74,6 +74,7 @@ # Create the routers in the mesh routers = [Router(router_id=i) for i in range(num_routers)] + network.routers = routers # link counter to set unique link ids link_count = 0 @@ -104,7 +105,10 @@ # Connect the dma nodes to router 0. These should only be DMA nodes. for (i, node) in enumerate(dma_nodes): assert(node.type == 'DMA_Controller') - ext_links.append(ExtLink(link_id=link_count, ext_node=node, int_node=routers[0])) + ext_links.append(ExtLink(link_id=link_count, ext_node=node, + int_node=routers[0])) + + network.ext_links = ext_links # Create the mesh links. First row (east-west) links then column # (north-south) links @@ -131,4 +135,4 @@ weight=2)) link_count += 1 - return routers, int_links, ext_links + network.int_links = int_links diff -r 16263765effa -r c7c66bf28426 configs/topologies/Pt2Pt.py --- a/configs/topologies/Pt2Pt.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/Pt2Pt.py Wed Aug 28 18:08:46 2013 -0500 @@ -39,15 +39,18 @@ def __init__(self, controllers): self.nodes = controllers - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): nodes = self.nodes + # Create an individual router for each controller, and connect all to all. + routers = [Router(router_id=i) for i in range(len(nodes))] + network.routers = routers - routers = [Router(router_id=i) for i in range(len(nodes))] ext_links = [ExtLink(link_id=i, ext_node=n, int_node=routers[i]) for (i, n) in enumerate(nodes)] + network.ext_links = ext_links + link_count = len(nodes) - int_links = [] for i in xrange(len(nodes)): for j in xrange(len(nodes)): @@ -57,4 +60,4 @@ node_a=routers[i], node_b=routers[j])) - return routers, int_links, ext_links + network.int_links = int_links diff -r 16263765effa -r c7c66bf28426 configs/topologies/Torus.py --- a/configs/topologies/Torus.py Wed Aug 28 14:11:05 2013 -0500 +++ b/configs/topologies/Torus.py Wed Aug 28 18:08:46 2013 -0500 @@ -44,7 +44,7 @@ # All links (including the wrap-around ones) are of equal length, double that # of a mesh. Thus, each link is assigned a latency of 2 cycles. - def makeTopology(self, options, IntLink, ExtLink, Router): + def makeTopology(self, options, network, IntLink, ExtLink, Router): nodes = self.nodes num_routers = options.num_cpus @@ -59,6 +59,7 @@ # Create the routers in the torus routers = [Router(router_id=i) for i in range(num_routers)] + network.routers = routers # link counter to set unique link ids link_count = 0 @@ -91,6 +92,8 @@ int_node=routers[0])) link_count += 1 + network.ext_links = ext_links + # Create the torus links. First row (east-west) links then column # (north-south) links # column links are given higher weights to implement XY routing @@ -123,4 +126,4 @@ weight=2)) link_count += 1 - return routers, int_links, ext_links + network.int_links = int_links