Config: Change the way options are added
authorNilay Vaish <nilay@cs.wisc.edu>
Wed, 28 Mar 2012 16:01:53 +0000 (11:01 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Wed, 28 Mar 2012 16:01:53 +0000 (11:01 -0500)
I am not too happy with the way options are added in files se.py and fs.py
currently. This patch moves all the options to the file Options.py, functions
from which are called when required.

configs/common/Options.py
configs/example/fs.py
configs/example/ruby_fs.py
configs/example/se.py
tests/configs/memtest-ruby.py
tests/configs/rubytest-ruby.py
tests/configs/simple-timing-mp-ruby.py
tests/configs/simple-timing-ruby.py

index f7514d086eb736be1372e77dcd7dbd1a3c8c41b5..d22b3ab3c861b0ab4bb4deab8813ea20665d34dc 100644 (file)
 #
 # Authors: Lisa Hsu
 
-# system options
-parser.add_option("--cpu-type", type="choice", default="atomic",
-                  choices = ["atomic", "timing", "detailed", "inorder",
-                             "arm_detailed"],
-                  help = "type of cpu to run with")
-parser.add_option("--checker", action="store_true");
-parser.add_option("-n", "--num-cpus", type="int", default=1)
-parser.add_option("--caches", action="store_true")
-parser.add_option("--l2cache", action="store_true")
-parser.add_option("--fastmem", action="store_true")
-parser.add_option("--clock", action="store", type="string", default='2GHz')
-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)
-parser.add_option("--l1d_size", type="string", default="64kB")
-parser.add_option("--l1i_size", type="string", default="32kB")
-parser.add_option("--l2_size", type="string", default="2MB")
-parser.add_option("--l3_size", type="string", default="16MB")
-parser.add_option("--l1d_assoc", type="int", default=2)
-parser.add_option("--l1i_assoc", type="int", default=2)
-parser.add_option("--l2_assoc", type="int", default=8)
-parser.add_option("--l3_assoc", type="int", default=16)
-parser.add_option("--cacheline_size", type="int", default=64)
-parser.add_option("--ruby", action="store_true")
+import m5
+from m5.defines import buildEnv
+from m5.objects import *
+from Benchmarks import *
 
-# Run duration options
-parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick,
-                  metavar="T",
-                  help="Stop after T ticks")
-parser.add_option("--maxtime", type="float")
-parser.add_option("-I", "--maxinsts", action="store", type="int", default=None,
-                  help="Total number of instructions to simulate (default: run forever)")
-parser.add_option("--work-item-id", action="store", type="int",
-                  help="the specific work id for exit & checkpointing")
-parser.add_option("--work-begin-cpu-id-exit", action="store", type="int",
-                  help="exit when work starts on the specified cpu")
-parser.add_option("--work-end-exit-count", action="store", type="int",
-                  help="exit at specified work end count")
-parser.add_option("--work-begin-exit-count", action="store", type="int",
-                  help="exit at specified work begin count")
-parser.add_option("--init-param", action="store", type="int", default=0,
-                  help="Parameter available in simulation with m5 initparam")
+def addCommonOptions(parser):
+    # system options
+    parser.add_option("--cpu-type", type="choice", default="atomic",
+                      choices = ["atomic", "timing", "detailed", "inorder",
+                                 "arm_detailed"],
+                      help = "type of cpu to run with")
+    parser.add_option("--checker", action="store_true");
+    parser.add_option("-n", "--num-cpus", type="int", default=1)
+    parser.add_option("--caches", action="store_true")
+    parser.add_option("--l2cache", action="store_true")
+    parser.add_option("--fastmem", action="store_true")
+    parser.add_option("--clock", action="store", type="string", default='2GHz')
+    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)
+    parser.add_option("--l1d_size", type="string", default="64kB")
+    parser.add_option("--l1i_size", type="string", default="32kB")
+    parser.add_option("--l2_size", type="string", default="2MB")
+    parser.add_option("--l3_size", type="string", default="16MB")
+    parser.add_option("--l1d_assoc", type="int", default=2)
+    parser.add_option("--l1i_assoc", type="int", default=2)
+    parser.add_option("--l2_assoc", type="int", default=8)
+    parser.add_option("--l3_assoc", type="int", default=16)
+    parser.add_option("--cacheline_size", type="int", default=64)
+    parser.add_option("--ruby", action="store_true")
 
-# Checkpointing options
-###Note that performing checkpointing via python script files will override
-###checkpoint instructions built into binaries.
-parser.add_option("--take-checkpoints", action="store", type="string",
-    help="<M,N> will take checkpoint at cycle M and every N cycles thereafter")
-parser.add_option("--max-checkpoints", action="store", type="int",
-    help="the maximum number of checkpoints to drop", default=5)
-parser.add_option("--checkpoint-dir", action="store", type="string",
-    help="Place all checkpoints in this absolute directory")
-parser.add_option("-r", "--checkpoint-restore", action="store", type="int",
-    help="restore from checkpoint <N>")
-parser.add_option("--checkpoint-at-end", action="store_true",
-                  help="take a checkpoint at end of run")
-parser.add_option("--work-begin-checkpoint-count", action="store", type="int",
-                  help="checkpoint at specified work begin count")
-parser.add_option("--work-end-checkpoint-count", action="store", type="int",
-                  help="checkpoint at specified work end count")
-parser.add_option("--work-cpus-checkpoint-count", action="store", type="int",
-                  help="checkpoint and exit when active cpu count is reached")
-parser.add_option("--restore-with-cpu", action="store", type="choice",
-                  default="atomic", choices = ["atomic", "timing",
-                                               "detailed", "inorder"],
-                  help = "cpu type for restoring from a checkpoint")
+    # Run duration options
+    parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick,
+                      metavar="T", help="Stop after T ticks")
+    parser.add_option("--maxtime", type="float")
+    parser.add_option("-I", "--maxinsts", action="store", type="int",
+                      default=None, help="""Total number of instructions to
+                                            simulate (default: run forever)""")
+    parser.add_option("--work-item-id", action="store", type="int",
+                      help="the specific work id for exit & checkpointing")
+    parser.add_option("--work-begin-cpu-id-exit", action="store", type="int",
+                      help="exit when work starts on the specified cpu")
+    parser.add_option("--work-end-exit-count", action="store", type="int",
+                      help="exit at specified work end count")
+    parser.add_option("--work-begin-exit-count", action="store", type="int",
+                      help="exit at specified work begin count")
+    parser.add_option("--init-param", action="store", type="int", default=0,
+                      help="""Parameter available in simulation with m5
+                              initparam""")
 
+    # Checkpointing options
+    ###Note that performing checkpointing via python script files will override
+    ###checkpoint instructions built into binaries.
+    parser.add_option("--take-checkpoints", action="store", type="string",
+        help="<M,N> will take checkpoint at cycle M and every N cycles thereafter")
+    parser.add_option("--max-checkpoints", action="store", type="int",
+        help="the maximum number of checkpoints to drop", default=5)
+    parser.add_option("--checkpoint-dir", action="store", type="string",
+        help="Place all checkpoints in this absolute directory")
+    parser.add_option("-r", "--checkpoint-restore", action="store", type="int",
+        help="restore from checkpoint <N>")
+    parser.add_option("--checkpoint-at-end", action="store_true",
+                      help="take a checkpoint at end of run")
+    parser.add_option("--work-begin-checkpoint-count", action="store", type="int",
+                      help="checkpoint at specified work begin count")
+    parser.add_option("--work-end-checkpoint-count", action="store", type="int",
+                      help="checkpoint at specified work end count")
+    parser.add_option("--work-cpus-checkpoint-count", action="store", type="int",
+                      help="checkpoint and exit when active cpu count is reached")
+    parser.add_option("--restore-with-cpu", action="store", type="choice",
+                      default="atomic", choices = ["atomic", "timing",
+                                                   "detailed", "inorder"],
+                      help = "cpu type for restoring from a checkpoint")
 
-# CPU Switching - default switch model goes from a checkpoint
-# to a timing simple CPU with caches to warm up, then to detailed CPU for
-# data measurement
-parser.add_option("-s", "--standard-switch", action="store_true",
-    help="switch from timing CPU to Detailed CPU")
-parser.add_option("-w", "--warmup", action="store", type="int",
-    help="if -s, then this is the warmup period.  else, this is ignored",
-    default=5000000000)
-parser.add_option("-p", "--prog-interval", type="int", help="CPU Progress Interval")
 
-# Fastforwarding and simpoint related materials
-parser.add_option("-W", "--warmup-insts", action="store", type="int",
-    default=None,
-    help="Warmup period in total instructions (requires --standard-switch)")
-parser.add_option("--bench", action="store", type="string", default=None,
-    help="base names for --take-checkpoint and --checkpoint-restore")
-parser.add_option("-F", "--fast-forward", action="store", type="string",
-    default=None,
-    help="Number of instructions to fast forward before switching")
-parser.add_option("-S", "--simpoint", action="store_true", default=False,
-    help="""Use workload simpoints as an instruction offset for
---checkpoint-restore or --take-checkpoint.""")
-parser.add_option("--at-instruction", action="store_true", default=False,
-    help="""Treate value of --checkpoint-restore or --take-checkpoint as a
-number of instructions.""")
+    # CPU Switching - default switch model goes from a checkpoint
+    # to a timing simple CPU with caches to warm up, then to detailed CPU for
+    # data measurement
+    parser.add_option("-s", "--standard-switch", action="store_true",
+        help="switch from timing CPU to Detailed CPU")
+    parser.add_option("-w", "--warmup", action="store", type="int",
+        help="if -s, then this is the warmup period.  else, this is ignored",
+        default=5000000000)
+    parser.add_option("-p", "--prog-interval", type="int",
+        help="CPU Progress Interval")
+
+    # Fastforwarding and simpoint related materials
+    parser.add_option("-W", "--warmup-insts", action="store", type="int",
+        default=None,
+        help="Warmup period in total instructions (requires --standard-switch)")
+    parser.add_option("--bench", action="store", type="string", default=None,
+        help="base names for --take-checkpoint and --checkpoint-restore")
+    parser.add_option("-F", "--fast-forward", action="store", type="string",
+        default=None,
+        help="Number of instructions to fast forward before switching")
+    parser.add_option("-S", "--simpoint", action="store_true", default=False,
+        help="""Use workload simpoints as an instruction offset for
+                --checkpoint-restore or --take-checkpoint.""")
+    parser.add_option("--at-instruction", action="store_true", default=False,
+        help="""Treat value of --checkpoint-restore or --take-checkpoint as a
+                number of instructions.""")
+
+def addSEOptions(parser):
+    # Benchmark options
+    parser.add_option("-c", "--cmd", default="",
+                      help="The binary to run in syscall emulation mode.")
+    parser.add_option("-o", "--options", default="",
+                      help="""The options to pass to the binary, use " "
+                              around the entire string""")
+    parser.add_option("-i", "--input", default="",
+                      help="Read stdin from a file.")
+    parser.add_option("--output", default="",
+                      help="Redirect stdout to a file.")
+    parser.add_option("--errout", default="",
+                      help="Redirect stderr to a file.")
+
+def addFSOptions(parser):
+    # Simulation options
+    parser.add_option("--timesync", action="store_true",
+            help="Prevent simulated time from getting ahead of real time")
+
+    # System options
+    parser.add_option("--kernel", action="store", type="string")
+    parser.add_option("--script", action="store", type="string")
+    parser.add_option("--frame-capture", action="store_true",
+            help="Stores changed frame buffers from the VNC server to compressed "\
+            "files in the gem5 output directory")
+
+    if buildEnv['TARGET_ISA'] == "arm":
+        parser.add_option("--bare-metal", action="store_true",
+                   help="Provide the raw system without the linux specific bits")
+        parser.add_option("--machine-type", action="store", type="choice",
+                choices=ArmMachineType.map.keys(), default="RealView_PBX")
+    # Benchmark options
+    parser.add_option("--dual", action="store_true",
+                      help="Simulate two systems attached with an ethernet link")
+    parser.add_option("-b", "--benchmark", action="store", type="string",
+                      dest="benchmark",
+                      help="Specify the benchmark to run. Available benchmarks: %s"\
+                      % DefinedBenchmarks)
+
+    # Metafile options
+    parser.add_option("--etherdump", action="store", type="string", dest="etherdump",
+                      help="Specify the filename to dump a pcap capture of the" \
+                      "ethernet traffic")
index 8b27f25c1e8b916e37131b8e6853f5051aff6b41..4b6956b7267f7315dfd1783d60a3e4bf38d1c932 100644 (file)
@@ -39,7 +39,6 @@
 # Authors: Ali Saidi
 
 import optparse
-import os
 import sys
 
 import m5
@@ -55,43 +54,11 @@ from Benchmarks import *
 import Simulation
 import CacheConfig
 from Caches import *
-
-# Get paths we might need.  It's expected this file is in m5/configs/example.
-config_path = os.path.dirname(os.path.abspath(__file__))
-config_root = os.path.dirname(config_path)
+import Options
 
 parser = optparse.OptionParser()
-
-# Simulation options
-parser.add_option("--timesync", action="store_true",
-        help="Prevent simulated time from getting ahead of real time")
-
-# System options
-parser.add_option("--kernel", action="store", type="string")
-parser.add_option("--script", action="store", type="string")
-parser.add_option("--frame-capture", action="store_true",
-        help="Stores changed frame buffers from the VNC server to compressed "\
-        "files in the gem5 output directory")
-
-if buildEnv['TARGET_ISA'] == "arm":
-    parser.add_option("--bare-metal", action="store_true",
-               help="Provide the raw system without the linux specific bits")
-    parser.add_option("--machine-type", action="store", type="choice",
-            choices=ArmMachineType.map.keys(), default="RealView_PBX")
-# Benchmark options
-parser.add_option("--dual", action="store_true",
-                  help="Simulate two systems attached with an ethernet link")
-parser.add_option("-b", "--benchmark", action="store", type="string",
-                  dest="benchmark",
-                  help="Specify the benchmark to run. Available benchmarks: %s"\
-                  % DefinedBenchmarks)
-
-# Metafile options
-parser.add_option("--etherdump", action="store", type="string", dest="etherdump",
-                  help="Specify the filename to dump a pcap capture of the" \
-                  "ethernet traffic")
-
-execfile(os.path.join(config_root, "common", "Options.py"))
+Options.addCommonOptions(parser)
+Options.addFSOptions(parser)
 
 (options, args) = parser.parse_args()
 
index ac7587bf50f60fd493ffd6122243af68c8482b75..b5ce643b9cae060f05029332024e6cc88b347067 100644 (file)
@@ -31,9 +31,7 @@
 #
 
 import optparse
-import os
 import sys
-from os.path import join as joinpath
 
 import m5
 from m5.defines import buildEnv
@@ -48,35 +46,16 @@ import Ruby
 from FSConfig import *
 from SysPaths import *
 from Benchmarks import *
+import Options
 import Simulation
-from Caches import *
-
-# Get paths we might need.  It's expected this file is in m5/configs/example.
-config_path = os.path.dirname(os.path.abspath(__file__))
-config_root = os.path.dirname(config_path)
 
 parser = optparse.OptionParser()
-# System options
-parser.add_option("--kernel", action="store", type="string")
-parser.add_option("--script", action="store", type="string")
-# Benchmark options
-parser.add_option("-b", "--benchmark", action="store", type="string",
-                  dest="benchmark",
-                  help="Specify the benchmark to run. Available benchmarks: %s"\
-                  % DefinedBenchmarks)
-parser.add_option("-o", "--options", default="",
-    help='The options to pass to the binary, use " " around the entire string')
-parser.add_option("-i", "--input", default="", help="Read stdin from a file.")
-parser.add_option("--output", default="", help="Redirect stdout to a file.")
-parser.add_option("--errout", default="", help="Redirect stderr to a file.")
+Options.addCommonOptions(parser)
+Options.addFSOptions(parser)
 
-#
 # Add the ruby specific and protocol specific options
-#
 Ruby.define_options(parser)
 
-execfile(os.path.join(config_root, "common", "Options.py"))
-
 (options, args) = parser.parse_args()
 options.ruby = True
 
index b1e6ae142c30d75af62b5855268da63badde8ec4..a6cf1ec193abae1e1a9f78f1b4d05ee1e3fa00be 100644 (file)
 #
 # "m5 test.py"
 
-import os
 import optparse
 import sys
-from os.path import join as joinpath
 
 import m5
 from m5.defines import buildEnv
@@ -55,32 +53,16 @@ from m5.util import addToPath, fatal
 addToPath('../common')
 addToPath('../ruby')
 
+import Options
 import Ruby
-
 import Simulation
 import CacheConfig
 from Caches import *
 from cpu2000 import *
 
-# Get paths we might need.  It's expected this file is in m5/configs/example.
-config_path = os.path.dirname(os.path.abspath(__file__))
-config_root = os.path.dirname(config_path)
-m5_root = os.path.dirname(config_root)
-
 parser = optparse.OptionParser()
-
-# Benchmark options
-parser.add_option("-c", "--cmd",
-    default=joinpath(m5_root, "tests/test-progs/hello/bin/%s/linux/hello" % \
-            buildEnv['TARGET_ISA']),
-    help="The binary to run in syscall emulation mode.")
-parser.add_option("-o", "--options", default="",
-    help='The options to pass to the binary, use " " around the entire string')
-parser.add_option("-i", "--input", default="", help="Read stdin from a file.")
-parser.add_option("--output", default="", help="Redirect stdout to a file.")
-parser.add_option("--errout", default="", help="Redirect stderr to a file.")
-
-execfile(os.path.join(config_root, "common", "Options.py"))
+Options.addCommonOptions(parser)
+Options.addSEOptions(parser)
 
 if '--ruby' in sys.argv:
     Ruby.define_options(parser)
@@ -110,11 +92,14 @@ if options.bench:
         except:
             print >>sys.stderr, "Unable to find workload for %s: %s" % (buildEnv['TARGET_ISA'], app)
             sys.exit(1)
-else:
+elif options.cmd:
     process = LiveProcess()
     process.executable = options.cmd
     process.cmd = [options.cmd] + options.options.split()
     multiprocesses.append(process)
+else:
+    print >> sys.stderr, "No workload specified. Exiting!\n"
+    sys.exit(1)
 
 
 if options.input != "":
index e2c59497e35efadd7b88b82cc72c694442c4e91d..c69e1bf00d49c8e3436582fc5a24404c312c7431 100644 (file)
@@ -41,16 +41,14 @@ addToPath(config_root+'/configs/common')
 addToPath(config_root+'/configs/ruby')
 
 import Ruby
+import Options
 
 parser = optparse.OptionParser()
+Options.addCommonOptions(parser)
 
-#
 # Add the ruby specific and protocol specific options
-#
 Ruby.define_options(parser)
 
-execfile(os.path.join(config_root, "configs/common", "Options.py"))
-
 (options, args) = parser.parse_args()
 
 #
index c53ed26bd213c659ae9b425e8a5b4e6eb1ad4a6d..70deb2958fa2e30580dbc9894cc6b92914cf2a4d 100644 (file)
@@ -42,16 +42,14 @@ addToPath(config_root+'/configs/common')
 addToPath(config_root+'/configs/ruby')
 
 import Ruby
+import Options
 
 parser = optparse.OptionParser()
+Options.addCommonOptions(parser)
 
-#
 # Add the ruby specific and protocol specific options
-#
 Ruby.define_options(parser)
 
-execfile(os.path.join(config_root, "configs/common", "Options.py"))
-
 (options, args) = parser.parse_args()
 
 #
index 9919cabcbb258c5e83a00594d607e048ca55f358..d2f11abce5452cea7451c3931af0afbd6c558f6d 100644 (file)
@@ -39,17 +39,15 @@ m5_root = os.path.dirname(config_root)
 addToPath(config_root+'/configs/common')
 addToPath(config_root+'/configs/ruby')
 
+import Options
 import Ruby
 
 parser = optparse.OptionParser()
+Options.addCommonOptions(parser)
 
-#
 # Add the ruby specific and protocol specific options
-#
 Ruby.define_options(parser)
 
-execfile(os.path.join(config_root, "configs/common", "Options.py"))
-
 (options, args) = parser.parse_args()
 
 #
index 8339e0e9a27759889ddc2016dc981fca3aa8cbe0..19e827c806084a5176db0e7de44a7f66f33aeb2f 100644 (file)
@@ -35,21 +35,18 @@ import os, optparse, sys
 # Get paths we might need
 config_path = os.path.dirname(os.path.abspath(__file__))
 config_root = os.path.dirname(config_path)
-m5_root = os.path.dirname(config_root)
 addToPath(config_root+'/configs/common')
 addToPath(config_root+'/configs/ruby')
 
 import Ruby
+import Options
 
 parser = optparse.OptionParser()
+Options.addCommonOptions(parser)
 
-#
 # Add the ruby specific and protocol specific options
-#
 Ruby.define_options(parser)
 
-execfile(os.path.join(config_root, "configs/common", "Options.py"))
-
 (options, args) = parser.parse_args()
 
 #