se.py revision 7787
17585SAli.Saidi@arm.com# Copyright (c) 2006-2008 The Regents of The University of Michigan
29332Sdam.sunwoo@arm.com# All rights reserved.
37585SAli.Saidi@arm.com#
47585SAli.Saidi@arm.com# Redistribution and use in source and binary forms, with or without
57585SAli.Saidi@arm.com# modification, are permitted provided that the following conditions are
67585SAli.Saidi@arm.com# met: redistributions of source code must retain the above copyright
77585SAli.Saidi@arm.com# notice, this list of conditions and the following disclaimer;
87585SAli.Saidi@arm.com# redistributions in binary form must reproduce the above copyright
97585SAli.Saidi@arm.com# notice, this list of conditions and the following disclaimer in the
107585SAli.Saidi@arm.com# documentation and/or other materials provided with the distribution;
117585SAli.Saidi@arm.com# neither the name of the copyright holders nor the names of its
127585SAli.Saidi@arm.com# contributors may be used to endorse or promote products derived from
137585SAli.Saidi@arm.com# this software without specific prior written permission.
147585SAli.Saidi@arm.com#
157585SAli.Saidi@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
167585SAli.Saidi@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
177585SAli.Saidi@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
187585SAli.Saidi@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
197585SAli.Saidi@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
207585SAli.Saidi@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
217585SAli.Saidi@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
227585SAli.Saidi@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
237585SAli.Saidi@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
247585SAli.Saidi@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
257585SAli.Saidi@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
267585SAli.Saidi@arm.com#
277585SAli.Saidi@arm.com# Authors: Steve Reinhardt
287585SAli.Saidi@arm.com
297585SAli.Saidi@arm.com# Simple test script
307585SAli.Saidi@arm.com#
317585SAli.Saidi@arm.com# "m5 test.py"
327585SAli.Saidi@arm.com
337585SAli.Saidi@arm.comimport os
347585SAli.Saidi@arm.comimport optparse
357585SAli.Saidi@arm.comimport sys
367585SAli.Saidi@arm.comfrom os.path import join as joinpath
377585SAli.Saidi@arm.com
387585SAli.Saidi@arm.comimport m5
397585SAli.Saidi@arm.comfrom m5.defines import buildEnv
407585SAli.Saidi@arm.comfrom m5.objects import *
417585SAli.Saidi@arm.comfrom m5.util import addToPath, fatal
427585SAli.Saidi@arm.com
437585SAli.Saidi@arm.comif buildEnv['FULL_SYSTEM']:
447585SAli.Saidi@arm.com    fatal("This script requires syscall emulation mode (*_SE).")
457585SAli.Saidi@arm.com
469332Sdam.sunwoo@arm.comaddToPath('../common')
479332Sdam.sunwoo@arm.com
487585SAli.Saidi@arm.comimport Simulation
497585SAli.Saidi@arm.comimport CacheConfig
507585SAli.Saidi@arm.comfrom Caches import *
517585SAli.Saidi@arm.comfrom cpu2000 import *
529332Sdam.sunwoo@arm.com
537585SAli.Saidi@arm.com# Get paths we might need.  It's expected this file is in m5/configs/example.
547585SAli.Saidi@arm.comconfig_path = os.path.dirname(os.path.abspath(__file__))
559332Sdam.sunwoo@arm.comconfig_root = os.path.dirname(config_path)
569332Sdam.sunwoo@arm.comm5_root = os.path.dirname(config_root)
579332Sdam.sunwoo@arm.com
587585SAli.Saidi@arm.comparser = optparse.OptionParser()
597585SAli.Saidi@arm.com
607585SAli.Saidi@arm.com# Benchmark options
619332Sdam.sunwoo@arm.comparser.add_option("-c", "--cmd",
629332Sdam.sunwoo@arm.com    default=joinpath(m5_root, "tests/test-progs/hello/bin/%s/linux/hello" % \
639332Sdam.sunwoo@arm.com            buildEnv['TARGET_ISA']),
647585SAli.Saidi@arm.com    help="The binary to run in syscall emulation mode.")
657585SAli.Saidi@arm.comparser.add_option("-o", "--options", default="",
667585SAli.Saidi@arm.com    help='The options to pass to the binary, use " " around the entire string')
677585SAli.Saidi@arm.comparser.add_option("-i", "--input", default="", help="Read stdin from a file.")
687585SAli.Saidi@arm.comparser.add_option("--output", default="", help="Redirect stdout to a file.")
697585SAli.Saidi@arm.comparser.add_option("--errout", default="", help="Redirect stderr to a file.")
707585SAli.Saidi@arm.com
717585SAli.Saidi@arm.comexecfile(os.path.join(config_root, "common", "Options.py"))
727585SAli.Saidi@arm.com
739332Sdam.sunwoo@arm.com(options, args) = parser.parse_args()
749332Sdam.sunwoo@arm.com
759332Sdam.sunwoo@arm.comif args:
769332Sdam.sunwoo@arm.com    print "Error: script doesn't take any positional arguments"
779332Sdam.sunwoo@arm.com    sys.exit(1)
789332Sdam.sunwoo@arm.com
799332Sdam.sunwoo@arm.comif options.bench:
809332Sdam.sunwoo@arm.com    try:
819332Sdam.sunwoo@arm.com        if buildEnv['TARGET_ISA'] != 'alpha':
829332Sdam.sunwoo@arm.com            print >>sys.stderr, "Simpoints code only works for Alpha ISA at this time"
839332Sdam.sunwoo@arm.com            sys.exit(1)
849332Sdam.sunwoo@arm.com        exec("workload = %s('alpha', 'tru64', 'ref')" % options.bench)
859332Sdam.sunwoo@arm.com        process = workload.makeLiveProcess()
869332Sdam.sunwoo@arm.com    except:
877585SAli.Saidi@arm.com        print >>sys.stderr, "Unable to find workload for %s" % options.bench
887585SAli.Saidi@arm.com        sys.exit(1)
897585SAli.Saidi@arm.comelse:
907733SAli.Saidi@ARM.com    process = LiveProcess()
917733SAli.Saidi@ARM.com    process.executable = options.cmd
928527SAli.Saidi@ARM.com    process.cmd = [options.cmd] + options.options.split()
938527SAli.Saidi@ARM.com
949332Sdam.sunwoo@arm.com
959332Sdam.sunwoo@arm.comif options.input != "":
969332Sdam.sunwoo@arm.com    process.input = options.input
979332Sdam.sunwoo@arm.comif options.output != "":
989332Sdam.sunwoo@arm.com    process.output = options.output
999332Sdam.sunwoo@arm.comif options.errout != "":
1007585SAli.Saidi@arm.com    process.errout = options.errout
1017585SAli.Saidi@arm.com
1029649SAndreas.Sandberg@ARM.com
1039649SAndreas.Sandberg@ARM.com# By default, set workload to path of user-specified binary
1049649SAndreas.Sandberg@ARM.comworkloads = options.cmd
1059649SAndreas.Sandberg@ARM.comnumThreads = 1
1069649SAndreas.Sandberg@ARM.com
1078143SAli.Saidi@ARM.comif options.detailed or options.inorder:
1088143SAli.Saidi@ARM.com    #check for SMT workload
1098143SAli.Saidi@ARM.com    workloads = options.cmd.split(';')
1108143SAli.Saidi@ARM.com    if len(workloads) > 1:
1118143SAli.Saidi@ARM.com        process = []
1128143SAli.Saidi@ARM.com        smt_idx = 0
1138143SAli.Saidi@ARM.com        inputs = []
1148143SAli.Saidi@ARM.com        outputs = []
1158143SAli.Saidi@ARM.com        errouts = []
1168143SAli.Saidi@ARM.com
1178143SAli.Saidi@ARM.com        if options.input != "":
1188143SAli.Saidi@ARM.com            inputs = options.input.split(';')
1198143SAli.Saidi@ARM.com        if options.output != "":
1208527SAli.Saidi@ARM.com            outputs = options.output.split(';')
1218527SAli.Saidi@ARM.com        if options.errout != "":
1228527SAli.Saidi@ARM.com            errouts = options.errout.split(';')
1238527SAli.Saidi@ARM.com
1248527SAli.Saidi@ARM.com        for wrkld in workloads:
1258527SAli.Saidi@ARM.com            smt_process = LiveProcess()
1268527SAli.Saidi@ARM.com            smt_process.executable = wrkld
1278527SAli.Saidi@ARM.com            smt_process.cmd = wrkld + " " + options.options
1288527SAli.Saidi@ARM.com            if inputs and inputs[smt_idx]:
1297585SAli.Saidi@arm.com                smt_process.input = inputs[smt_idx]
1307585SAli.Saidi@arm.com            if outputs and outputs[smt_idx]:
1319332Sdam.sunwoo@arm.com                smt_process.output = outputs[smt_idx]
1329332Sdam.sunwoo@arm.com            if errouts and errouts[smt_idx]:
1339332Sdam.sunwoo@arm.com                smt_process.errout = errouts[smt_idx]
1349332Sdam.sunwoo@arm.com            process += [smt_process, ]
1359332Sdam.sunwoo@arm.com            smt_idx += 1
1369332Sdam.sunwoo@arm.com    numThreads = len(workloads)
1379332Sdam.sunwoo@arm.com
1389332Sdam.sunwoo@arm.com(CPUClass, test_mem_mode, FutureClass) = Simulation.setCPUClass(options)
1399332Sdam.sunwoo@arm.com
1409332Sdam.sunwoo@arm.comCPUClass.clock = '2GHz'
1419332Sdam.sunwoo@arm.comCPUClass.numThreads = numThreads;
1427585SAli.Saidi@arm.com
1437585SAli.Saidi@arm.comnp = options.num_cpus
144
145system = System(cpu = [CPUClass(cpu_id=i) for i in xrange(np)],
146                physmem = PhysicalMemory(range=AddrRange("512MB")),
147                membus = Bus(), mem_mode = test_mem_mode)
148
149system.physmem.port = system.membus.port
150
151CacheConfig.config_cache(options, system)
152
153for i in xrange(np):
154    system.cpu[i].workload = process
155
156    if options.fastmem:
157        system.cpu[0].physmem_port = system.physmem.port
158
159root = Root(system = system)
160
161Simulation.run(options, root, system, FutureClass)
162