from os import getcwd
from os.path import join as joinpath
+
import m5
+from m5.defines import buildEnv
from m5.objects import *
-m5.AddToPath('../common')
-from Caches import L1Cache
+from m5.util import *
+
+addToPath('../common')
def setCPUClass(options):
cptdir = getcwd()
if options.fast_forward and options.checkpoint_restore != None:
- m5.fatal("Error: Can't specify both --fast-forward and --checkpoint-restore")
+ fatal("Can't specify both --fast-forward and --checkpoint-restore")
if options.standard_switch and not options.caches:
- m5.fatal("Error: Must specify --caches when using --standard-switch")
+ fatal("Must specify --caches when using --standard-switch")
np = options.num_cpus
max_checkpoints = options.max_checkpoints
switch_cpus = None
+ if options.prog_intvl:
+ for i in xrange(np):
+ testsys.cpu[i].progress_interval = options.prog_intvl
+
+ if options.maxinsts:
+ for i in xrange(np):
+ testsys.cpu[i].max_insts_any_thread = options.maxinsts
+
if cpu_class:
switch_cpus = [cpu_class(defer_registration=True, cpu_id=(np+i))
for i in xrange(np)]
if options.fast_forward:
testsys.cpu[i].max_insts_any_thread = int(options.fast_forward)
switch_cpus[i].system = testsys
- if not m5.build_env['FULL_SYSTEM']:
+ if not buildEnv['FULL_SYSTEM']:
switch_cpus[i].workload = testsys.cpu[i].workload
switch_cpus[i].clock = testsys.cpu[0].clock
# simulation period
for i in xrange(np):
switch_cpus[i].system = testsys
switch_cpus_1[i].system = testsys
- if not m5.build_env['FULL_SYSTEM']:
+ if not buildEnv['FULL_SYSTEM']:
switch_cpus[i].workload = testsys.cpu[i].workload
switch_cpus_1[i].workload = testsys.cpu[i].workload
switch_cpus[i].clock = testsys.cpu[0].clock
# Fast forward to a simpoint (warning: time consuming)
elif options.simpoint:
if testsys.cpu[i].workload[0].simpoint == 0:
- m5.fatal('simpoint not found')
+ fatal('simpoint not found')
testsys.cpu[i].max_insts_any_thread = \
testsys.cpu[i].workload[0].simpoint
# No distance specified, just switch
if not options.caches:
# O3 CPU must have a cache to work.
- switch_cpus_1[i].addPrivateSplitL1Caches(L1Cache(size = '32kB'),
- L1Cache(size = '64kB'))
- switch_cpus_1[i].connectMemPorts(testsys.membus)
+ print "O3 CPU must be used with caches"
+ sys.exit(1)
testsys.switch_cpus = switch_cpus
testsys.switch_cpus_1 = switch_cpus_1
if options.simpoint:
for i in xrange(np):
if testsys.cpu[i].workload[0].simpoint == 0:
- m5.fatal('no simpoint for testsys.cpu[%d].workload[0]', i)
+ fatal('no simpoint for testsys.cpu[%d].workload[0]', i)
checkpoint_inst = int(testsys.cpu[i].workload[0].simpoint) + offset
testsys.cpu[i].max_insts_any_thread = checkpoint_inst
# used for output below
import re
if not isdir(cptdir):
- m5.fatal("checkpoint dir %s does not exist!", cptdir)
+ fatal("checkpoint dir %s does not exist!", cptdir)
if options.at_instruction:
checkpoint_dir = joinpath(cptdir, "cpt.%s.%s" % \
(options.bench, options.checkpoint_restore))
if not exists(checkpoint_dir):
- m5.fatal("Unable to find checkpoint directory %s",
- checkpoint_dir)
+ fatal("Unable to find checkpoint directory %s", checkpoint_dir)
print "Restoring checkpoint ..."
m5.restoreCheckpoint(root, checkpoint_dir)
elif options.simpoint:
# assume workload 0 has the simpoint
if testsys.cpu[0].workload[0].simpoint == 0:
- m5.fatal('Unable to find simpoint')
+ fatal('Unable to find simpoint')
options.checkpoint_restore += \
int(testsys.cpu[0].workload[0].simpoint)
checkpoint_dir = joinpath(cptdir, "cpt.%s.%d" % \
(options.bench, options.checkpoint_restore))
if not exists(checkpoint_dir):
- m5.fatal("Unable to find checkpoint directory %s.%s",
- options.bench, options.checkpoint_restore)
+ fatal("Unable to find checkpoint directory %s.%s",
+ options.bench, options.checkpoint_restore)
print "Restoring checkpoint ..."
m5.restoreCheckpoint(root,checkpoint_dir)
cpt_num = options.checkpoint_restore
if cpt_num > len(cpts):
- m5.fatal('Checkpoint %d not found', cpt_num)
+ fatal('Checkpoint %d not found', cpt_num)
## Adjust max tick based on our starting tick
maxtick = maxtick - int(cpts[cpt_num - 1])
exit_cause = exit_event.getCause()
print 'Exiting @ cycle %i because %s' % (m5.curTick(), exit_cause)
+ if options.checkpoint_at_end:
+ m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
+