summaryrefslogtreecommitdiff
path: root/configs/topologies
diff options
context:
space:
mode:
authorJason Power <powerjg@cs.wisc.edu>2012-08-10 13:50:42 -0500
committerJason Power <powerjg@cs.wisc.edu>2012-08-10 13:50:42 -0500
commit11411cc9c70fb532798c5c8fb287ad658111ff15 (patch)
tree5ac6030e71ed22cfb57ce927ad50cf76e44ba2ea /configs/topologies
parent706e84f2b8553baba020560f4a83550f05b80630 (diff)
downloadgem5-11411cc9c70fb532798c5c8fb287ad658111ff15.tar.xz
Ruby: Clean up topology changes
This patch moves instantiateTopology into Ruby.py and removes the mem/ruby/network/topologies directory. It also adds some extra inheritance to the topologies to clean up some issues in the existing topologies.
Diffstat (limited to 'configs/topologies')
-rw-r--r--configs/topologies/BaseTopology.py23
-rw-r--r--configs/topologies/Cluster.py3
-rw-r--r--configs/topologies/Crossbar.py8
-rw-r--r--configs/topologies/Mesh.py4
-rw-r--r--configs/topologies/MeshDirCorners.py4
-rw-r--r--configs/topologies/Pt2Pt.py4
-rw-r--r--configs/topologies/Torus.py4
7 files changed, 32 insertions, 18 deletions
diff --git a/configs/topologies/BaseTopology.py b/configs/topologies/BaseTopology.py
index 114a29f19..2390bb5be 100644
--- a/configs/topologies/BaseTopology.py
+++ b/configs/topologies/BaseTopology.py
@@ -26,6 +26,7 @@
#
# Authors: Jason Power
+import m5
class BaseTopology(object):
description = "BaseTopology"
@@ -38,14 +39,28 @@ class BaseTopology(object):
"""
def makeTopology(self, options, IntLink, ExtLink, Router):
- """ Called from src/mem/ruby/network/topologies/TopologyCreatory.py
+ """ 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!!
Any additional information needed to create this topology should
be passed into the constructor when it's instantiated in
configs/ruby/<protocol>.py
"""
- print "BaseTopology should have been overridden in a sub class!!"
- import sys
- sys.exit(1)
+ m5.util.fatal("BaseTopology should have been overridden!!")
+class SimpleTopology(BaseTopology):
+ """ Provides methods needed for the topologies included in Ruby before
+ topology changes.
+ These topologies are "simple" in the sense that they only use a flat
+ list of controllers to construct the topology.
+ """
+ description = "SimpleTopology"
+
+ def __init__(self, controllers):
+ self.nodes = controllers
+
+ def addController(self, controller):
+ self.nodes.append(controller)
+
+ def __len__(self):
+ return len(self.nodes)
diff --git a/configs/topologies/Cluster.py b/configs/topologies/Cluster.py
index e5c6dac0e..93bd0d946 100644
--- a/configs/topologies/Cluster.py
+++ b/configs/topologies/Cluster.py
@@ -115,3 +115,6 @@ class Cluster(BaseTopology):
return routers, int_links, ext_links
+ def __len__(self):
+ return len([i for i in self.nodes if type(i) != Cluster]) + \
+ sum([len(i) for i in self.nodes if type(i) == Cluster])
diff --git a/configs/topologies/Crossbar.py b/configs/topologies/Crossbar.py
index e66492922..c85b8e8eb 100644
--- a/configs/topologies/Crossbar.py
+++ b/configs/topologies/Crossbar.py
@@ -29,14 +29,11 @@
from m5.params import *
from m5.objects import *
-from BaseTopology import BaseTopology
+from BaseTopology import SimpleTopology
-class Crossbar(BaseTopology):
+class Crossbar(SimpleTopology):
description='Crossbar'
- def __init__(self, controllers):
- self.nodes = controllers
-
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
@@ -53,4 +50,3 @@ class Crossbar(BaseTopology):
for i in range(len(self.nodes))]
return routers, int_links, ext_links
-
diff --git a/configs/topologies/Mesh.py b/configs/topologies/Mesh.py
index b1f2e6751..81d87f5e5 100644
--- a/configs/topologies/Mesh.py
+++ b/configs/topologies/Mesh.py
@@ -29,9 +29,9 @@
from m5.params import *
from m5.objects import *
-from BaseTopology import BaseTopology
+from BaseTopology import SimpleTopology
-class Mesh(BaseTopology):
+class Mesh(SimpleTopology):
description='Mesh'
def __init__(self, controllers):
diff --git a/configs/topologies/MeshDirCorners.py b/configs/topologies/MeshDirCorners.py
index 23bcde5a6..13b4acc19 100644
--- a/configs/topologies/MeshDirCorners.py
+++ b/configs/topologies/MeshDirCorners.py
@@ -29,9 +29,9 @@
from m5.params import *
from m5.objects import *
-from BaseTopology import BaseTopology
+from BaseTopology import SimpleTopology
-class MeshDirCorners(BaseTopology):
+class MeshDirCorners(SimpleTopology):
description='MeshDirCorners'
def __init__(self, controllers):
diff --git a/configs/topologies/Pt2Pt.py b/configs/topologies/Pt2Pt.py
index 360811272..74ff116ff 100644
--- a/configs/topologies/Pt2Pt.py
+++ b/configs/topologies/Pt2Pt.py
@@ -31,9 +31,9 @@
from m5.params import *
from m5.objects import *
-from BaseTopology import BaseTopology
+from BaseTopology import SimpleTopology
-class Pt2Pt(BaseTopology):
+class Pt2Pt(SimpleTopology):
description='Pt2Pt'
def __init__(self, controllers):
diff --git a/configs/topologies/Torus.py b/configs/topologies/Torus.py
index 7fbcbf55b..9869465ae 100644
--- a/configs/topologies/Torus.py
+++ b/configs/topologies/Torus.py
@@ -31,9 +31,9 @@
from m5.params import *
from m5.objects import *
-from BaseTopology import BaseTopology
+from BaseTopology import SimpleTopology
-class Torus(BaseTopology):
+class Torus(SimpleTopology):
description='Torus'
def __init__(self, controllers):