configs: combine ruby_se.py and se.py to avoid all that code duplication
authorLisa Hsu <Lisa.Hsu@amd.com>
Sun, 20 Mar 2011 04:13:04 +0000 (21:13 -0700)
committerLisa Hsu <Lisa.Hsu@amd.com>
Sun, 20 Mar 2011 04:13:04 +0000 (21:13 -0700)
configs/example/ruby_se.py [deleted file]
configs/example/se.py

diff --git a/configs/example/ruby_se.py b/configs/example/ruby_se.py
deleted file mode 100644 (file)
index 9c440c9..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# Copyright (c) 2006-2008 The Regents of The University of Michigan
-# 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: Steve Reinhardt
-
-# Simple test script
-#
-# "m5 test.py"
-
-import os
-import optparse
-import sys
-from os.path import join as joinpath
-
-import m5
-from m5.defines import buildEnv
-from m5.objects import *
-from m5.util import addToPath, panic
-
-if buildEnv['FULL_SYSTEM']:
-    panic("This script requires syscall emulation mode (*_SE).")
-
-addToPath('../common')
-addToPath('../ruby')
-
-import Ruby
-
-import Simulation
-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/alpha/linux/hello"),
-    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.")
-
-#
-# 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()
-
-if args:
-    print "Error: script doesn't take any positional arguments"
-    sys.exit(1)
-
-if options.bench:
-    try:
-        if buildEnv['TARGET_ISA'] != 'alpha':
-            print >>sys.stderr, "Simpoints code only works for Alpha ISA at this time"
-            sys.exit(1)
-        exec("workload = %s('alpha', 'tru64', 'ref')" % options.bench)
-        process = workload.makeLiveProcess()
-    except:
-        print >>sys.stderr, "Unable to find workload for %s" % options.bench
-        sys.exit(1)
-else:
-    process = LiveProcess()
-    process.executable = options.cmd
-    process.cmd = [options.cmd] + options.options.split()
-
-
-if options.input != "":
-    process.input = options.input
-if options.output != "":
-    process.output = options.output
-if options.errout != "":
-    process.errout = options.errout
-
-if options.detailed:
-    #check for SMT workload
-    workloads = options.cmd.split(';')
-    if len(workloads) > 1:
-        process = []
-        smt_idx = 0
-        inputs = []
-        outputs = []
-        errouts = []
-
-        if options.input != "":
-            inputs = options.input.split(';')
-        if options.output != "":
-            outputs = options.output.split(';')
-        if options.errout != "":
-            errouts = options.errout.split(';')
-
-        for wrkld in workloads:
-            smt_process = LiveProcess()
-            smt_process.executable = wrkld
-            smt_process.cmd = wrkld + " " + options.options
-            if inputs and inputs[smt_idx]:
-                smt_process.input = inputs[smt_idx]
-            if outputs and outputs[smt_idx]:
-                smt_process.output = outputs[smt_idx]
-            if errouts and errouts[smt_idx]:
-                smt_process.errout = errouts[smt_idx]
-            process += [smt_process, ]
-            smt_idx += 1
-
-#
-# Currently ruby only works in timing mode 
-#
-class CPUClass(TimingSimpleCPU): pass
-test_mem_mode = 'timing'
-FutureClass = None
-
-CPUClass.clock = options.clock
-
-np = options.num_cpus
-
-system = System(cpu = [CPUClass(cpu_id=i) for i in xrange(np)],
-                physmem = PhysicalMemory())
-
-system.ruby = Ruby.create_system(options, system)
-
-assert(options.num_cpus == len(system.ruby.cpu_ruby_ports))
-
-for (i, cpu) in enumerate(system.cpu):
-    #
-    # Tie the cpu ports to the ruby cpu ports
-    #
-    cpu.icache_port = system.ruby.cpu_ruby_ports[i].port
-    cpu.dcache_port = system.ruby.cpu_ruby_ports[i].port
-
-    '''process = LiveProcess()
-    process.executable = options.cmd
-    process.cmd = [options.cmd, str(i)]
-    '''
-    cpu.workload = process
-
-root = Root(system = system)
-
-Simulation.run(options, root, system, FutureClass)
index 2491a32e44169d2ed2f061d104e2a5d5403369c1..98fbbfbaae46cffbf1d4917f6950498e00f0a440 100644 (file)
@@ -44,6 +44,9 @@ if buildEnv['FULL_SYSTEM']:
     fatal("This script requires syscall emulation mode (*_SE).")
 
 addToPath('../common')
+addToPath('../ruby')
+
+import Ruby
 
 import Simulation
 import CacheConfig
@@ -67,11 +70,16 @@ parser.add_option("-o", "--options", default="",
 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.")
+parser.add_option("--ruby", action="store_true")
 
 execfile(os.path.join(config_root, "common", "Options.py"))
 
 (options, args) = parser.parse_args()
 
+if options.ruby:
+    Ruby.define_options(parser)
+    (options, args) = parser.parse_args()
+
 if args:
     print "Error: script doesn't take any positional arguments"
     sys.exit(1)
@@ -145,7 +153,18 @@ if options.detailed or options.inorder:
             smt_idx += 1
     numThreads = len(workloads)
     
-(CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options)
+if options.ruby:
+    if options.detailed:
+        print >> sys.stderr, "Ruby only works with TimingSimpleCPU!!"
+        sys.exit(1)
+    elif not options.timing:
+        print >> sys.stderr, "****WARN:  using Timing CPU since it's needed by Ruby"
+
+    class CPUClass(TimingSimpleCPU): pass
+    test_mem_mode = 'timing'
+    FutureClass = None
+else:
+    (CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options)
 
 CPUClass.clock = '2GHz'
 CPUClass.numThreads = numThreads;
@@ -156,13 +175,21 @@ system = System(cpu = [CPUClass(cpu_id=i) for i in xrange(np)],
                 physmem = PhysicalMemory(range=AddrRange("512MB")),
                 membus = Bus(), mem_mode = test_mem_mode)
 
-system.physmem.port = system.membus.port
-
-CacheConfig.config_cache(options, system)
+if options.ruby:
+    options.use_map = True
+    system.ruby = Ruby.create_system(options, system)
+    assert(options.num_cpus == len(system.ruby.cpu_ruby_ports))
+else:
+    system.physmem.port = system.membus.port
+    CacheConfig.config_cache(options, system)
 
 for i in xrange(np):
     system.cpu[i].workload = multiprocesses[i]
 
+    if options.ruby:
+        system.cpu[i].icache_port = system.ruby.cpu_ruby_ports[i].port
+        system.cpu[i].dcache_port = system.ruby.cpu_ruby_ports[i].port
+
     if options.fastmem:
         system.cpu[0].physmem_port = system.physmem.port