changeset 004d34b65092 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=004d34b65092
description:
        config: add a separate config file for the network.
        This patch adds a new file configs/network/Network.py to setup the 
network,
        instead of doing that within Ruby.py.

diffstat:

 configs/example/apu_se.py               |   3 +
 configs/example/fs.py                   |   3 +
 configs/example/garnet_synth_traffic.py |   3 +
 configs/example/ruby_direct_test.py     |   3 +
 configs/example/ruby_gpu_random_test.py |   3 +
 configs/example/ruby_mem_test.py        |   3 +
 configs/example/ruby_random_test.py     |   3 +
 configs/example/se.py                   |   3 +
 configs/network/Network.py              |  93 +++++++++++++++++++++++++++++++++
 configs/ruby/Ruby.py                    |  66 ++++------------------
 10 files changed, 131 insertions(+), 52 deletions(-)

diffs (truncated from 391 to 300 lines):

diff -r 2bc3962f59fe -r 004d34b65092 configs/example/apu_se.py
--- a/configs/example/apu_se.py Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/apu_se.py Thu Oct 06 14:35:17 2016 -0400
@@ -43,11 +43,13 @@
 from m5.util import addToPath
 
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../common')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 import Simulation
 import GPUTLBOptions, GPUTLBConfig
 
@@ -157,6 +159,7 @@
 
 
 Ruby.define_options(parser)
+Network.define_options(parser)
 
 #add TLB options to the parser
 GPUTLBOptions.tlb_options(parser)
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/fs.py
--- a/configs/example/fs.py     Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/fs.py     Thu Oct 06 14:35:17 2016 -0400
@@ -51,8 +51,10 @@
 
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 
 import Ruby
+import Network
 
 from FSConfig import *
 from SysPaths import *
@@ -306,6 +308,7 @@
 # Add the ruby specific and protocol specific options
 if '--ruby' in sys.argv:
     Ruby.define_options(parser)
+    Network.define_options(parser)
 
 (options, args) = parser.parse_args()
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/garnet_synth_traffic.py
--- a/configs/example/garnet_synth_traffic.py   Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/garnet_synth_traffic.py   Thu Oct 06 14:35:17 2016 -0400
@@ -33,10 +33,12 @@
 import os, optparse, sys
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 
 # Get paths we might need.  It's expected this file is in m5/configs/example.
 config_path = os.path.dirname(os.path.abspath(__file__))
@@ -85,6 +87,7 @@
 # Add the ruby specific and protocol specific options
 #
 Ruby.define_options(parser)
+Network.define_options(parser)
 
 execfile(os.path.join(config_root, "common", "Options.py"))
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/ruby_direct_test.py
--- a/configs/example/ruby_direct_test.py       Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/ruby_direct_test.py       Thu Oct 06 14:35:17 2016 -0400
@@ -35,10 +35,12 @@
 import os, optparse, sys
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 
 # Get paths we might need.  It's expected this file is in m5/configs/example.
 config_path = os.path.dirname(os.path.abspath(__file__))
@@ -63,6 +65,7 @@
 # Add the ruby specific and protocol specific options
 #
 Ruby.define_options(parser)
+Network.define_options(parser)
 (options, args) = parser.parse_args()
 
 if args:
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/ruby_gpu_random_test.py
--- a/configs/example/ruby_gpu_random_test.py   Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/ruby_gpu_random_test.py   Thu Oct 06 14:35:17 2016 -0400
@@ -40,10 +40,12 @@
 import os, optparse, sys
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 
 # Get paths we might need.
 config_path = os.path.dirname(os.path.abspath(__file__))
@@ -76,6 +78,7 @@
 # Add the ruby specific and protocol specific options
 #
 Ruby.define_options(parser)
+Network.define_options(parser)
 
 execfile(os.path.join(config_root, "common", "Options.py"))
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/ruby_mem_test.py
--- a/configs/example/ruby_mem_test.py  Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/ruby_mem_test.py  Thu Oct 06 14:35:17 2016 -0400
@@ -35,10 +35,12 @@
 import os, optparse, sys
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 
 # Get paths we might need.  It's expected this file is in m5/configs/example.
 config_path = os.path.dirname(os.path.abspath(__file__))
@@ -63,6 +65,7 @@
 # Add the ruby specific and protocol specific options
 #
 Ruby.define_options(parser)
+Network.define_options(parser)
 
 execfile(os.path.join(config_root, "common", "Options.py"))
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/ruby_random_test.py
--- a/configs/example/ruby_random_test.py       Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/ruby_random_test.py       Thu Oct 06 14:35:17 2016 -0400
@@ -35,10 +35,12 @@
 import os, optparse, sys
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 addToPath('../topologies')
 
 import Options
 import Ruby
+import Network
 
 # Get paths we might need.  It's expected this file is in m5/configs/example.
 config_path = os.path.dirname(os.path.abspath(__file__))
@@ -57,6 +59,7 @@
 # Add the ruby specific and protocol specific options
 #
 Ruby.define_options(parser)
+Network.define_options(parser)
 
 execfile(os.path.join(config_root, "common", "Options.py"))
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/example/se.py
--- a/configs/example/se.py     Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/example/se.py     Thu Oct 06 14:35:17 2016 -0400
@@ -53,9 +53,11 @@
 
 addToPath('../common')
 addToPath('../ruby')
+addToPath('../network')
 
 import Options
 import Ruby
+import Network
 import Simulation
 import CacheConfig
 import CpuConfig
@@ -127,6 +129,7 @@
 
 if '--ruby' in sys.argv:
     Ruby.define_options(parser)
+    Network.define_options(parser)
 
 (options, args) = parser.parse_args()
 
diff -r 2bc3962f59fe -r 004d34b65092 configs/network/Network.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/configs/network/Network.py        Thu Oct 06 14:35:17 2016 -0400
@@ -0,0 +1,93 @@
+# Copyright (c) 2016 Georgia Institute of Technology
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Tushar Krishna
+
+import math
+import m5
+from m5.objects import *
+from m5.defines import buildEnv
+from m5.util import addToPath, fatal
+
+def define_options(parser):
+    # By default, ruby uses the simple timing cpu
+    parser.set_defaults(cpu_type="timing")
+
+    parser.add_option("--topology", type="string", default="Crossbar",
+                      help="check configs/topologies for complete set")
+    parser.add_option("--mesh-rows", type="int", default=1,
+                      help="the number of rows in the mesh topology")
+    parser.add_option("--garnet-network", type="choice",
+                      choices=['fixed', 'flexible'], help="'fixed'|'flexible'")
+    parser.add_option("--network-fault-model", action="store_true", 
default=False,
+                      help="enable network fault model: see 
src/mem/ruby/network/fault_model/")
+
+
+def create_network(options, ruby):
+
+    # Set the network classes based on the command line options
+    if options.garnet_network == "fixed":
+        NetworkClass = GarnetNetwork_d
+        IntLinkClass = GarnetIntLink_d
+        ExtLinkClass = GarnetExtLink_d
+        RouterClass = GarnetRouter_d
+        InterfaceClass = GarnetNetworkInterface_d
+
+    elif options.garnet_network == "flexible":
+        NetworkClass = GarnetNetwork
+        IntLinkClass = GarnetIntLink
+        ExtLinkClass = GarnetExtLink
+        RouterClass = GarnetRouter
+        InterfaceClass = GarnetNetworkInterface
+
+    else:
+        NetworkClass = SimpleNetwork
+        IntLinkClass = SimpleIntLink
+        ExtLinkClass = SimpleExtLink
+        RouterClass = Switch
+        InterfaceClass = None
+
+    # Instantiate the network object
+    # so that the controllers can connect to it.
+    network = NetworkClass(ruby_system = ruby, topology = options.topology,
+            routers = [], ext_links = [], int_links = [], netifs = [])
+
+    return (network, IntLinkClass, ExtLinkClass, RouterClass, InterfaceClass)
+
+def init_network(options, network, InterfaceClass):
+
+    if options.garnet_network is None:
+        network.setup_buffers()
+
+    if InterfaceClass != None:
+        netifs = [InterfaceClass(id=i) \
+                  for (i,n) in enumerate(network.ext_links)]
+        network.netifs = netifs
+
+    if options.network_fault_model:
+        assert(options.garnet_network == "fixed")
+        network.enable_fault_model = True
+        network.fault_model = FaultModel()
diff -r 2bc3962f59fe -r 004d34b65092 configs/ruby/Ruby.py
--- a/configs/ruby/Ruby.py      Thu Oct 06 14:35:16 2016 -0400
+++ b/configs/ruby/Ruby.py      Thu Oct 06 14:35:17 2016 -0400
@@ -47,6 +47,9 @@
 
 import MemConfig
 addToPath('../topologies')
+addToPath('../network')
+
+import Network
 
 def define_options(parser):
     # By default, ruby uses the simple timing cpu
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to