config: Break out base options for usage with NULL ISA
authorAndreas Hansson <andreas.hansson@arm.com>
Wed, 26 Oct 2016 18:50:54 +0000 (14:50 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Wed, 26 Oct 2016 18:50:54 +0000 (14:50 -0400)
This patch breaks out the most basic configuration options into a set
of base options, to allow them to be used also by scripts that do not
involve any ISA, and thus no actual CPUs or devices.

The patch also fixes a few modules so that they can be imported in a
NULL build, and avoid dragging in FSConfig every time Options is
imported.

configs/common/CpuConfig.py
configs/common/FSConfig.py
configs/common/Options.py
configs/common/PlatformConfig.py
configs/common/Simulation.py
configs/example/garnet_synth_traffic.py
configs/example/ruby_direct_test.py
configs/example/ruby_gpu_random_test.py
configs/example/ruby_mem_test.py
configs/example/ruby_random_test.py

index 3220acecd8c73b958646433bf46fc631f27432b5..757ec2d08454fe0ad7bebce81b895831b90fd388 100644 (file)
@@ -70,7 +70,7 @@ def is_cpu_class(cls):
         return issubclass(cls, m5.objects.BaseCPU) and \
             not cls.abstract and \
             not issubclass(cls, m5.objects.CheckerCPU)
-    except TypeError:
+    except (TypeError, AttributeError):
         return False
 
 def get(name):
index c1d8f6fe0b0506ce97c0a5d9086d8f0f7b52f4e4..3a169a4bbca41ccf641485d040855768473cf0dc 100644 (file)
@@ -42,7 +42,7 @@
 from m5.objects import *
 from Benchmarks import *
 from m5.util import *
-import PlatformConfig
+from common import PlatformConfig
 
 # Populate to reflect supported os types per target ISA
 os_types = { 'alpha' : [ 'linux' ],
index 5bed98acae9bf7df64d94c2c22c2b2336c394180..16d817f599b71bce35b5d5675a330822e987a277 100644 (file)
 import m5
 from m5.defines import buildEnv
 from m5.objects import *
-from Benchmarks import *
+from common.Benchmarks import *
 
-import CpuConfig
-import MemConfig
-import PlatformConfig
-
-from FSConfig import os_types
+from common import CpuConfig
+from common import MemConfig
+from common import PlatformConfig
 
 def _listCpuTypes(option, opt, value, parser):
     CpuConfig.print_cpu_list()
@@ -61,15 +59,10 @@ def _listPlatformTypes(option, opt, value, parser):
     PlatformConfig.print_platform_list()
     sys.exit(0)
 
-def addCommonOptions(parser):
-    # system options
-    parser.add_option("--list-cpu-types",
-                      action="callback", callback=_listCpuTypes,
-                      help="List available CPU types")
-    parser.add_option("--cpu-type", type="choice", default="atomic",
-                      choices=CpuConfig.cpu_names(),
-                      help = "type of cpu to run with")
-    parser.add_option("--checker", action="store_true");
+# Add the very basic options that work also in the case of the no ISA
+# being used, and consequently no CPUs, but rather various types of
+# testers and traffic generators.
+def addNoISAOptions(parser):
     parser.add_option("-n", "--num-cpus", type="int", default=1)
     parser.add_option("--sys-voltage", action="store", type="string",
                       default='1.0V',
@@ -79,27 +72,6 @@ def addCommonOptions(parser):
                       default='1GHz',
                       help = """Top-level clock for blocks running at system
                       speed""")
-    parser.add_option("--cpu-clock", action="store", type="string",
-                      default='2GHz',
-                      help="Clock for blocks running at CPU speed")
-    parser.add_option("--smt", action="store_true", default=False,
-                      help = """
-                      Only used if multiple programs are specified. If true,
-                      then the number of threads per cpu is same as the
-                      number of programs.""")
-    parser.add_option("--elastic-trace-en", action="store_true",
-                      help="""Enable capture of data dependency and instruction
-                      fetch traces using elastic trace probe.""")
-    # Trace file paths input to trace probe in a capture simulation and input
-    # to Trace CPU in a replay simulation
-    parser.add_option("--inst-trace-file", action="store", type="string",
-                      help="""Instruction fetch trace file input to
-                      Elastic Trace probe in a capture simulation and
-                      Trace CPU in a replay simulation""", default="")
-    parser.add_option("--data-trace-file", action="store", type="string",
-                      help="""Data dependency trace file input to
-                      Elastic Trace probe in a capture simulation and
-                      Trace CPU in a replay simulation""", default="")
 
     # Memory Options
     parser.add_option("--list-mem-types",
@@ -116,8 +88,6 @@ def addCommonOptions(parser):
                       default="512MB",
                       help="Specify the physical memory size (single memory)")
 
-    parser.add_option("-l", "--lpae", action="store_true")
-    parser.add_option("-V", "--virtualisation", action="store_true")
 
     parser.add_option("--memchecker", action="store_true")
 
@@ -128,7 +98,6 @@ def addCommonOptions(parser):
                       help="use external port for SystemC TLM cosimulation")
     parser.add_option("--caches", action="store_true")
     parser.add_option("--l2cache", action="store_true")
-    parser.add_option("--fastmem", action="store_true")
     parser.add_option("--num-dirs", type="int", default=1)
     parser.add_option("--num-l2caches", type="int", default=1)
     parser.add_option("--num-l3caches", type="int", default=1)
@@ -142,6 +111,61 @@ def addCommonOptions(parser):
     parser.add_option("--l3_assoc", type="int", default=16)
     parser.add_option("--cacheline_size", type="int", default=64)
 
+    # Enable Ruby
+    parser.add_option("--ruby", action="store_true")
+
+    # Run duration options
+    parser.add_option("-m", "--abs-max-tick", type="int", default=m5.MaxTick,
+                      metavar="TICKS", help="Run to absolute simulated tick "
+                      "specified including ticks from a restored checkpoint")
+    parser.add_option("--rel-max-tick", type="int", default=None,
+                      metavar="TICKS", help="Simulate for specified number of"
+                      " ticks relative to the simulation start tick (e.g. if "
+                      "restoring a checkpoint)")
+    parser.add_option("--maxtime", type="float", default=None,
+                      help="Run to the specified absolute simulated time in "
+                      "seconds")
+
+# Add common options that assume a non-NULL ISA.
+def addCommonOptions(parser):
+    # start by adding the base options that do not assume an ISA
+    addNoISAOptions(parser)
+
+    # system options
+    parser.add_option("--list-cpu-types",
+                      action="callback", callback=_listCpuTypes,
+                      help="List available CPU types")
+    parser.add_option("--cpu-type", type="choice", default="atomic",
+                      choices=CpuConfig.cpu_names(),
+                      help = "type of cpu to run with")
+    parser.add_option("--checker", action="store_true");
+    parser.add_option("--cpu-clock", action="store", type="string",
+                      default='2GHz',
+                      help="Clock for blocks running at CPU speed")
+    parser.add_option("--smt", action="store_true", default=False,
+                      help = """
+                      Only used if multiple programs are specified. If true,
+                      then the number of threads per cpu is same as the
+                      number of programs.""")
+    parser.add_option("--elastic-trace-en", action="store_true",
+                      help="""Enable capture of data dependency and instruction
+                      fetch traces using elastic trace probe.""")
+    # Trace file paths input to trace probe in a capture simulation and input
+    # to Trace CPU in a replay simulation
+    parser.add_option("--inst-trace-file", action="store", type="string",
+                      help="""Instruction fetch trace file input to
+                      Elastic Trace probe in a capture simulation and
+                      Trace CPU in a replay simulation""", default="")
+    parser.add_option("--data-trace-file", action="store", type="string",
+                      help="""Data dependency trace file input to
+                      Elastic Trace probe in a capture simulation and
+                      Trace CPU in a replay simulation""", default="")
+
+    parser.add_option("-l", "--lpae", action="store_true")
+    parser.add_option("-V", "--virtualisation", action="store_true")
+
+    parser.add_option("--fastmem", action="store_true")
+
     # dist-gem5 options
     parser.add_option("--dist", action="store_true",
                       help="Parallel distributed gem5 simulation.")
@@ -175,20 +199,7 @@ def addCommonOptions(parser):
                       action="store", type="string",
                       help="Link delay in seconds\nDEFAULT: 10us")
 
-    # Enable Ruby
-    parser.add_option("--ruby", action="store_true")
-
     # Run duration options
-    parser.add_option("-m", "--abs-max-tick", type="int", default=m5.MaxTick,
-                      metavar="TICKS", help="Run to absolute simulated tick " \
-                      "specified including ticks from a restored checkpoint")
-    parser.add_option("--rel-max-tick", type="int", default=None,
-                      metavar="TICKS", help="Simulate for specified number of" \
-                      " ticks relative to the simulation start tick (e.g. if " \
-                      "restoring a checkpoint)")
-    parser.add_option("--maxtime", type="float", default=None,
-                      help="Run to the specified absolute simulated time in " \
-                      "seconds")
     parser.add_option("-I", "--maxinsts", action="store", type="int",
                       default=None, help="""Total number of instructions to
                                             simulate (default: run forever)""")
@@ -297,6 +308,8 @@ def addSEOptions(parser):
                       help="Redirect stderr to a file.")
 
 def addFSOptions(parser):
+    from FSConfig import os_types
+
     # Simulation options
     parser.add_option("--timesync", action="store_true",
             help="Prevent simulated time from getting ahead of real time")
index 1d047b1183aa42c28d0180f123ac58559b2c91d6..3541c07fb15ca3fd93b18f27055f0a00aebfe883 100644 (file)
@@ -63,7 +63,7 @@ def is_platform_class(cls):
     try:
         return issubclass(cls, m5.objects.Platform) and \
             not cls.abstract
-    except TypeError:
+    except (TypeError, AttributeError):
         return False
 
 def get(name):
index b18d65cbcc5a49ac55591dd2b2bf780b6b73299d..c4d5c96447808ffa000109d9a4db95e5162a323d 100644 (file)
@@ -43,8 +43,8 @@ import sys
 from os import getcwd
 from os.path import join as joinpath
 
-import CpuConfig
-import MemConfig
+from common import CpuConfig
+from common import MemConfig
 
 import m5
 from m5.defines import buildEnv
index 16617486dbc5b297f3b8261efe3f59868b5c5232..0cb1fae9f812fe2aab69582b1d987c7151272edc 100644 (file)
@@ -43,7 +43,7 @@ config_root = os.path.dirname(config_path)
 m5_root = os.path.dirname(config_root)
 
 parser = optparse.OptionParser()
-Options.addCommonOptions(parser)
+Options.addNoISAOptions(parser)
 
 parser.add_option("--synthetic", type="choice", default="uniform_random",
                   choices=['uniform_random', 'tornado', 'bit_complement', \
index 1c02e6e55ab6a08cefe0fcdb6562fd746b23efc1..9e8c87a8108fd6a17c5da2f6a1fd1f7a370d6636 100644 (file)
@@ -45,7 +45,7 @@ config_root = os.path.dirname(config_path)
 m5_root = os.path.dirname(config_root)
 
 parser = optparse.OptionParser()
-Options.addCommonOptions(parser)
+Options.addNoISAOptions(parser)
 
 parser.add_option("--requests", metavar="N", default=100,
                   help="Stop after N requests")
index 08eac583a9867ec97005f3e56a51f59f5e9fe6ce..80aecf90ebd61e1deb22a56887e8070de6454894 100644 (file)
@@ -50,7 +50,7 @@ config_root = os.path.dirname(config_path)
 m5_root = os.path.dirname(config_root)
 
 parser = optparse.OptionParser()
-Options.addCommonOptions(parser)
+Options.addNoISAOptions(parser)
 
 parser.add_option("--maxloads", metavar="N", default=100,
                   help="Stop after N loads")
index 3b6c5f1107691435a5651bf949a706702c210ac8..010c4a2bc61651b1aa4fdad87c6a28e584d7e4fe 100644 (file)
@@ -44,7 +44,7 @@ config_path = os.path.dirname(os.path.abspath(__file__))
 config_root = os.path.dirname(config_path)
 
 parser = optparse.OptionParser()
-Options.addCommonOptions(parser)
+Options.addNoISAOptions(parser)
 
 parser.add_option("--maxloads", metavar="N", default=0,
                   help="Stop after N loads")
index ce898cd818718254bc1ecd4b86ce2c838daebb99..d96905e2c27e45fad54668b1018e0ed6207a32fe 100644 (file)
@@ -45,7 +45,7 @@ config_root = os.path.dirname(config_path)
 m5_root = os.path.dirname(config_root)
 
 parser = optparse.OptionParser()
-Options.addCommonOptions(parser)
+Options.addNoISAOptions(parser)
 
 parser.add_option("--maxloads", metavar="N", default=100,
                   help="Stop after N loads")