X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=configs%2Fexample%2Fse.py;h=a34a03b29fe919ab5ed7cc249d764ba0a6473c75;hb=1b49c56679b18b068e04cfe074bf984897fe656b;hp=67a2340cee2a2cded50ea667c5d74f8dffc6e83e;hpb=ac15e42c1782f39882ab47745ed690b7d30b1f86;p=gem5.git diff --git a/configs/example/se.py b/configs/example/se.py index 67a2340ce..a34a03b29 100644 --- a/configs/example/se.py +++ b/configs/example/se.py @@ -30,16 +30,26 @@ # # "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, fatal -if m5.build_env['FULL_SYSTEM']: - m5.fatal("This script requires syscall emulation mode (*_SE).") +if buildEnv['FULL_SYSTEM']: + fatal("This script requires syscall emulation mode (*_SE).") + +addToPath('../common') +addToPath('../ruby') + +import Ruby -from m5.objects import * -import os, optparse, sys -from os.path import join as joinpath -m5.AddToPath('../common') import Simulation +import CacheConfig from Caches import * from cpu2000 import * @@ -52,7 +62,8 @@ parser = optparse.OptionParser() # Benchmark options parser.add_option("-c", "--cmd", - default=joinpath(m5_root, "tests/test-progs/hello/bin/alpha/linux/hello"), + 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') @@ -62,26 +73,41 @@ parser.add_option("--errout", default="", help="Redirect stderr to a file.") execfile(os.path.join(config_root, "common", "Options.py")) +if buildEnv['PROTOCOL'] != 'None': + parser.add_option("--ruby", action="store_true") + if '--ruby' in sys.argv: + Ruby.define_options(parser) + (options, args) = parser.parse_args() if args: print "Error: script doesn't take any positional arguments" sys.exit(1) +multiprocesses = [] +apps = [] + if options.bench: - try: - if m5.build_env['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 + apps = options.bench.split("-") + if len(apps) != options.num_cpus: + print "number of benchmarks not equal to set num_cpus!" sys.exit(1) + + for app in apps: + try: + if buildEnv['TARGET_ISA'] == 'alpha': + exec("workload = %s('alpha', 'tru64', 'ref')" % app) + else: + exec("workload = %s(buildEnv['TARGET_ISA'], 'linux', 'ref')" % app) + multiprocesses.append(workload.makeLiveProcess()) + except: + print >>sys.stderr, "Unable to find workload for %s: %s" % (buildEnv['TARGET_ISA'], app) + sys.exit(1) else: process = LiveProcess() process.executable = options.cmd process.cmd = [options.cmd] + options.options.split() + multiprocesses.append(process) if options.input != "": @@ -94,8 +120,9 @@ if options.errout != "": # By default, set workload to path of user-specified binary workloads = options.cmd +numThreads = 1 -if options.detailed: +if options.detailed or options.inorder: #check for SMT workload workloads = options.cmd.split(';') if len(workloads) > 1: @@ -124,11 +151,23 @@ if options.detailed: smt_process.errout = errouts[smt_idx] process += [smt_process, ] smt_idx += 1 + numThreads = len(workloads) + +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" -(CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options) + class CPUClass(TimingSimpleCPU): pass + test_mem_mode = 'timing' + FutureClass = None +else: + (CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options) CPUClass.clock = '2GHz' -CPUClass.numThreads = len(workloads) +CPUClass.numThreads = numThreads; np = options.num_cpus @@ -136,23 +175,20 @@ 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 - -if options.l2cache: - system.l2 = L2Cache(size='2MB') - system.tol2bus = Bus() - system.l2.cpu_side = system.tol2bus.port - system.l2.mem_side = system.membus.port +if options.ruby: + options.use_map = True + 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): - if options.caches: - system.cpu[i].addPrivateSplitL1Caches(L1Cache(size = '32kB'), - L1Cache(size = '64kB')) - if options.l2cache: - system.cpu[i].connectMemPorts(system.tol2bus) - else: - system.cpu[i].connectMemPorts(system.membus) - system.cpu[i].workload = process + 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