summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/common/Options.py50
-rw-r--r--configs/common/Simulation.py259
-rw-r--r--configs/common/cpu2000.py50
-rw-r--r--src/sim/Process.py3
4 files changed, 256 insertions, 106 deletions
diff --git a/configs/common/Options.py b/configs/common/Options.py
index 3cd3342b8..34833e799 100644
--- a/configs/common/Options.py
+++ b/configs/common/Options.py
@@ -29,7 +29,7 @@
# system options
parser.add_option("-d", "--detailed", action="store_true")
parser.add_option("-t", "--timing", action="store_true")
-parser.add_option("-n", "--num_cpus", type="int", default=1)
+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")
@@ -41,26 +41,38 @@ parser.add_option("--maxtime", type="float")
# 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("--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>")
# 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("-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("-f", "--fast_forward", type="int", action="store",
- help="fast_forward count in instructions: use alone to checkpoint or with -s and -max_inst")
-parser.add_option("--max_inst", type="int", action="store",
- help="max_insts_any_thread value")
+ help="if -s, then this is the warmup period. else, this is ignored",
+ default=5000000000)
+
+# 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("-I", "--max-inst", action="store", type="int", default=None,
+ help="Total number of instructions to simulate (default: run forever)")
+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.""")
diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py
index f6b289fb5..9f3bf0cd9 100644
--- a/configs/common/Simulation.py
+++ b/configs/common/Simulation.py
@@ -51,7 +51,7 @@ def setCPUClass(options):
test_mem_mode = 'atomic'
if not atomic:
- if options.checkpoint_restore:
+ if options.checkpoint_restore or options.fast_forward:
CPUClass = TmpClass
class TmpClass(AtomicSimpleCPU): pass
else:
@@ -86,6 +86,8 @@ def run(options, root, testsys, cpu_class):
for i in xrange(np)]
for i in xrange(np):
+ if options.fast_forward:
+ testsys.cpu[i].max_insts_any_thread = options.fast_forward
switch_cpus[i].system = testsys
if not m5.build_env['FULL_SYSTEM']:
switch_cpus[i].workload = testsys.cpu[i].workload
@@ -95,9 +97,6 @@ def run(options, root, testsys, cpu_class):
switch_cpu_list = [(testsys.cpu[i], switch_cpus[i]) for i in xrange(np)]
if options.standard_switch:
- if (options.fast_forward and options.warmup):
- m5.panic("Must specify either warmup OR fast-forward with -s!")
-
switch_cpus = [TimingSimpleCPU(defer_registration=True, cpu_id=(np+i))
for i in xrange(np)]
switch_cpus_1 = [DerivO3CPU(defer_registration=True, cpu_id=(2*np+i))
@@ -112,8 +111,27 @@ def run(options, root, testsys, cpu_class):
switch_cpus[i].clock = testsys.cpu[0].clock
switch_cpus_1[i].clock = testsys.cpu[0].clock
- if options.fast_forward:
- switch_cpus[i].max_insts_any_thread = options.fast_forward
+ # if restoring, make atomic cpu simulate only a few instructions
+ if options.checkpoint_restore:
+ testsys.cpu[i].max_insts_any_thread = 1
+ # Fast forward to specified location if we are not restoring
+ elif options.fast_forward:
+ testsys.cpu[i].max_insts_any_thread = options.fast_forward
+ # Fast forward to a simpoint (warning: time consuming)
+ elif options.simpoint:
+ if testsys.cpu[i].workload[0].simpoint == None:
+ m5.panic('simpoint not found')
+ testsys.cpu[i].max_insts_any_thread = \
+ testsys.cpu[i].workload[0].simpoint
+ # No distance specified, just switch
+ else:
+ testsys.cpu[i].max_insts_any_thread = 1
+
+ # warmup period
+ if options.warmup_insts:
+ switch_cpus[i].max_insts_any_thread = options.warmup_insts
+
+ # simulation period
if options.max_inst:
switch_cpus_1[i].max_insts_any_thread = options.max_inst
@@ -123,136 +141,209 @@ def run(options, root, testsys, cpu_class):
L1Cache(size = '64kB'))
switch_cpus_1[i].connectMemPorts(testsys.membus)
-
testsys.switch_cpus = switch_cpus
testsys.switch_cpus_1 = switch_cpus_1
switch_cpu_list = [(testsys.cpu[i], switch_cpus[i]) for i in xrange(np)]
switch_cpu_list1 = [(switch_cpus[i], switch_cpus_1[i]) for i in xrange(np)]
- elif options.fast_forward:
- for i in xrange(np):
- testsys.cpu[i].max_insts_any_thread = options.fast_forward
+ # set the checkpoint in the cpu before m5.instantiate is called
+ if options.take_checkpoints and \
+ (options.simpoint or options.at_instruction):
+ offset = int(options.take_checkpoints)
+ # Set an instruction break point
+ if options.simpoint:
+ for i in xrange(np):
+ if testsys.cpu[i].workload[0].simpoint == None:
+ m5.panic('no simpoint for testsys.cpu[%d].workload[0]' % i)
+ checkpoint_inst = testsys.cpu[i].workload[0].simpoint + offset
+ testsys.cpu[i].max_insts_any_thread = checkpoint_inst
+ # used for output below
+ options.take_checkpoints = checkpoint_inst
+ else:
+ options.take_checkpoints = offset
+ # Set all test cpus with the right number of instructions
+ # for the upcoming simulation
+ for i in xrange(np):
+ testsys.cpu[i].max_insts_any_thread = offset
+
+ testsys.cpu_switch_list = cpu_switch_list
m5.instantiate(root)
if options.checkpoint_restore:
- from os.path import isdir
+ from os.path import isdir, exists
from os import listdir
import re
if not isdir(cptdir):
m5.panic("checkpoint dir %s does not exist!" % cptdir)
- dirs = listdir(cptdir)
- expr = re.compile('cpt\.([0-9]*)')
- cpts = []
- for dir in dirs:
- match = expr.match(dir)
- if match:
- cpts.append(match.group(1))
+ if options.at_instruction:
+ checkpoint_dir = joinpath(cptdir, "cpt.%s.%s" % \
+ (options.bench, options.checkpoint_restore))
+ if not exists(checkpoint_dir):
+ m5.panic("Unable to find checkpoint directory %s" % \
+ checkpoint_dir)
+
+ print "Restoring checkpoint ..."
+ m5.restoreCheckpoint(root, checkpoint_dir)
+ print "Done."
+ elif options.simpoint:
+ # assume workload 0 has the simpoint
+ if testsys.cpu[i].workload[0].simpoint == None:
+ m5.panic('Unable to find simpoint')
+
+ options.checkpoint_restore += \
+ testsys.cpu[0].workload[0].simpoint
+
+ checkpoint_dir = joinpath(cptdir, "cpt.%s.%d" % \
+ (options.bench, options.checkpoint_restore))
+ if not exists(checkpoint_dir):
+ m5.panic("Unable to find checkpoint directory %s.%s" % \
+ (options.bench, options.checkpoint_restore))
+
+ print "Restoring checkpoint ..."
+ m5.restoreCheckpoint(root,checkpoint_dir)
+ print "Done."
+ else:
+ dirs = listdir(cptdir)
+ expr = re.compile('cpt\.([0-9]*)')
+ cpts = []
+ for dir in dirs:
+ match = expr.match(dir)
+ if match:
+ cpts.append(match.group(1))
- cpts.sort(lambda a,b: cmp(long(a), long(b)))
+ cpts.sort(lambda a,b: cmp(long(a), long(b)))
- cpt_num = options.checkpoint_restore
+ cpt_num = options.checkpoint_restore
- if cpt_num > len(cpts):
- m5.panic('Checkpoint %d not found' % cpt_num)
+ if cpt_num > len(cpts):
+ m5.panic('Checkpoint %d not found' % cpt_num)
- ## Adjust max tick based on our starting tick
- maxtick = maxtick - int(cpts[cpt_num - 1])
+ ## Adjust max tick based on our starting tick
+ maxtick = maxtick - int(cpts[cpt_num - 1])
- ## Restore the checkpoint
- m5.restoreCheckpoint(root,
- joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1]))
+ ## Restore the checkpoint
+ m5.restoreCheckpoint(root,
+ joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1]))
if options.standard_switch or cpu_class:
- exit_event = m5.simulate(10000)
+ if options.standard_switch:
+ print "Switch at instruction count:%s" % \
+ str(testsys.cpu[0].max_insts_any_thread)
+ exit_event = m5.simulate()
+ elif cpu_class and options.fast_forward:
+ print "Switch at instruction count:%s" % \
+ str(testsys.cpu[0].max_insts_any_thread)
+ exit_event = m5.simulate()
+ else:
+ print "Switch at curTick count:%s" % str(10000)
+ exit_event = m5.simulate(10000)
+ print "Switched CPUS @ cycle = %s" % (m5.curTick())
- ## when you change to Timing (or Atomic), you halt the system given
- ## as argument. When you are finished with the system changes
- ## (including switchCpus), you must resume the system manually.
- ## You DON'T need to resume after just switching CPUs if you haven't
- ## changed anything on the system level.
+ # when you change to Timing (or Atomic), you halt the system
+ # given as argument. When you are finished with the system
+ # changes (including switchCpus), you must resume the system
+ # manually. You DON'T need to resume after just switching
+ # CPUs if you haven't changed anything on the system level.
m5.changeToTiming(testsys)
m5.switchCpus(switch_cpu_list)
m5.resume(testsys)
if options.standard_switch:
- if (options.warmup):
- exit_event = m5.simulate(options.warmup)
- if options.fast_forward:
+ print "Switch at instruction count:%d" % \
+ (testsys.switch_cpus[0].max_insts_any_thread)
+
+ #warmup instruction count may have already been set
+ if options.warmup_insts:
exit_event = m5.simulate()
+ else:
+ exit_event = m5.simulate(options.warmup)
+ print "Switching CPUS @ cycle = %s" % (m5.curTick())
+ print "Simulation ends instruction count:%d" % \
+ (testsys.switch_cpus_1[0].max_insts_any_thread)
m5.drain(testsys)
m5.switchCpus(switch_cpu_list1)
m5.resume(testsys)
- # This should *only* be used by itself to take a checkpoint!
- # Otherwise, use standard_switch
- elif options.fast_forward:
- exit_event = m5.simulate()
-
- while exit_event.getCause() != "a thread reached the max instruction count":
- if exit_event.getCause() == "user interrupt received":
- print "User interrupt! Switching to simulation mode"
- break
- else:
- m5.simulate(True)
-
- if exit_event.getCause() == "a thread reached the max instruction count":
- print "Reached fast_forward count %d; starting simulation at cycle %d" % (options.fast_forward, m5.curTick())
-
- m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
- return
-
num_checkpoints = 0
exit_cause = ''
- ## Checkpoints being taken via the command line at <when> and at subsequent
- ## periods of <period>. Checkpoint instructions received from the benchmark running
- ## are ignored and skipped in favor of command line checkpoint instructions.
+ # Checkpoints being taken via the command line at <when> and at
+ # subsequent periods of <period>. Checkpoint instructions
+ # received from the benchmark running are ignored and skipped in
+ # favor of command line checkpoint instructions.
if options.take_checkpoints:
- [when, period] = options.take_checkpoints.split(",", 1)
+ when, period = options.take_checkpoints.split(",", 1)
when = int(when)
period = int(period)
- exit_event = m5.simulate(when)
- while exit_event.getCause() == "checkpoint":
- exit_event = m5.simulate(when - m5.curTick())
+ if options.at_instruction or options.simpoint:
+ checkpoint_inst = when
- if exit_event.getCause() == "simulate() limit reached":
- m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
- num_checkpoints += 1
+ # maintain correct offset if we restored from some instruction
+ if options.checkpoint_restore:
+ checkpoint_inst += options.checkpoint_restore
- sim_ticks = when
- exit_cause = "maximum %d checkpoints dropped" % max_checkpoints
- while num_checkpoints < max_checkpoints and \
- exit_event.getCause() == "simulate() limit reached":
- if (sim_ticks + period) > maxtick:
- exit_event = m5.simulate(maxtick - sim_ticks)
- exit_cause = exit_event.getCause()
- break
- else:
- exit_event = m5.simulate(period)
- sim_ticks += period
- while exit_event.getCause() == "checkpoint":
- exit_event = m5.simulate(sim_ticks - m5.curTick())
- if exit_event.getCause() == "simulate() limit reached":
- m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
- num_checkpoints += 1
+ print "Creating checkpoint at inst:%d" % (checkpoint_inst)
+ exit_event = m5.simulate()
+ print "exit cause = %s" % (exit_event.getCause())
- if exit_event.getCause() != "simulate() limit reached":
- exit_cause = exit_event.getCause();
+ # skip checkpoint instructions should they exist
+ while exit_event.getCause() == "checkpoint":
+ exit_event = m5.simulate()
+ if exit_event.getCause() == \
+ "a thread reached the max instruction count":
+ m5.checkpoint(root, joinpath(cptdir, "cpt.%s.%d" % \
+ (options.bench, checkpoint_inst)))
+ print "Checkpoint written."
+ num_checkpoints += 1
- else: #no checkpoints being taken via this script
+ if exit_event.getCause() == "user interrupt received":
+ exit_cause = exit_event.getCause();
+ else:
+ exit_event = m5.simulate(when)
+ while exit_event.getCause() == "checkpoint":
+ exit_event = m5.simulate(when - m5.curTick())
+
+ if exit_event.getCause() == "simulate() limit reached":
+ m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
+ num_checkpoints += 1
+
+ sim_ticks = when
+ exit_cause = "maximum %d checkpoints dropped" % max_checkpoints
+ while num_checkpoints < max_checkpoints and \
+ exit_event.getCause() == "simulate() limit reached":
+ if (sim_ticks + period) > maxtick:
+ exit_event = m5.simulate(maxtick - sim_ticks)
+ exit_cause = exit_event.getCause()
+ break
+ else:
+ exit_event = m5.simulate(period)
+ sim_ticks += period
+ while exit_event.getCause() == "checkpoint":
+ exit_event = m5.simulate(sim_ticks - m5.curTick())
+ if exit_event.getCause() == "simulate() limit reached":
+ m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
+ num_checkpoints += 1
+
+ if exit_event.getCause() != "simulate() limit reached":
+ exit_cause = exit_event.getCause();
+
+ else: # no checkpoints being taken via this script
+ if options.fast_forward:
+ m5.stats.reset()
+ print "**** REAL SIMULATION ****"
exit_event = m5.simulate(maxtick)
while exit_event.getCause() == "checkpoint":
m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
num_checkpoints += 1
if num_checkpoints == max_checkpoints:
- exit_cause = "maximum %d checkpoints dropped" % max_checkpoints
+ exit_cause = "maximum %d checkpoints dropped" % max_checkpoints
break
exit_event = m5.simulate(maxtick - m5.curTick())
diff --git a/configs/common/cpu2000.py b/configs/common/cpu2000.py
index 2f5844dc6..7fe15b577 100644
--- a/configs/common/cpu2000.py
+++ b/configs/common/cpu2000.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2006-2007 The Regents of The University of Michigan
+# 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
@@ -85,6 +85,9 @@ class Benchmark(object):
if not hasattr(self.__class__, 'output'):
self.output = '%s.out' % self.name
+ if not hasattr(self.__class__, 'simpoint'):
+ self.simpoint = None
+
try:
func = getattr(self.__class__, input_set)
except AttributeError:
@@ -137,7 +140,7 @@ class Benchmark(object):
process_args['input'] = self.stdin
if self.stdout:
process_args['output'] = self.stdout
-
+ process_args['simpoint'] = self.simpoint
# explicit keywords override defaults
process_args.update(kwargs)
@@ -149,6 +152,7 @@ class Benchmark(object):
# figure out working directory: use m5's outdir unless
# overridden by LiveProcess's cwd param
cwd = process_args.get('cwd')
+
if not cwd:
from m5.main import options
cwd = options.outdir
@@ -179,16 +183,19 @@ class ammp(MinneDefaultBenchmark):
name = 'ammp'
number = 188
lang = 'C'
+ simpoint = 108*100E6
class applu(MinneDefaultBenchmark):
name = 'applu'
number = 173
lang = 'F77'
+ simpoint = 2179*100E6
class apsi(MinneDefaultBenchmark):
name = 'apsi'
number = 301
lang = 'F77'
+ simpoint = 3408*100E6
class art(DefaultBenchmark):
name = 'art'
@@ -241,6 +248,7 @@ class art110(art):
'-endy', '240',
'-objects', '10' ]
self.output = 'ref.1.out'
+ self.simpoint = 340*100E6
class art470(art):
def ref(self, isa, os):
@@ -254,11 +262,13 @@ class art470(art):
'-endy', '180',
'-objects', '10' ]
self.output = 'ref.2.out'
+ self.simpoint = 365*100E6
class equake(DefaultBenchmark):
name = 'equake'
number = 183
lang = 'C'
+ simpoint = 812*100E6
def lgred(self, isa, os): pass
@@ -266,21 +276,25 @@ class facerec(MinneDefaultBenchmark):
name = 'facerec'
number = 187
lang = 'F'
+ simpoint = 375*100E6
class fma3d(MinneDefaultBenchmark):
name = 'fma3d'
number = 191
lang = 'F'
+ simpoint = 2541*100E6
class galgel(MinneDefaultBenchmark):
name = 'galgel'
number = 178
lang = 'F'
+ simpoint = 2491*100E6
class lucas(MinneDefaultBenchmark):
name = 'lucas'
number = 189
lang = 'F'
+ simpoint = 545*100E6
class mesa(Benchmark):
name = 'mesa'
@@ -300,6 +314,7 @@ class mesa(Benchmark):
def ref(self, isa, os):
self.__set_args('1000')
+ self.simpoint = 1135*100E6
def lgred(self, isa, os):
self.__set_args('1')
@@ -308,11 +323,13 @@ class mgrid(MinneDefaultBenchmark):
name = 'mgrid'
number = 172
lang = 'F77'
+ simpoint = 3292*100E6
class sixtrack(DefaultBenchmark):
name = 'sixtrack'
number = 200
lang = 'F77'
+ simpoint = 3043*100E6
def lgred(self, isa, os): pass
@@ -320,11 +337,13 @@ class swim(MinneDefaultBenchmark):
name = 'swim'
number = 171
lang = 'F77'
+ simpoint = 2079*100E6
class wupwise(DefaultBenchmark):
name = 'wupwise'
number = 168
lang = 'F77'
+ simpoint = 3237*100E6
def lgred(self, isa, os): pass
@@ -341,6 +360,7 @@ class bzip2(DefaultBenchmark):
class bzip2_source(bzip2):
def ref(self, isa, os):
+ self.simpoint = 977*100E6
self.args = [ 'input.source', '58' ]
def lgred(self, isa, os):
@@ -348,6 +368,7 @@ class bzip2_source(bzip2):
class bzip2_graphic(bzip2):
def ref(self, isa, os):
+ self.simpoint = 718*100E6
self.args = [ 'input.graphic', '58' ]
def lgred(self, isa, os):
@@ -355,6 +376,7 @@ class bzip2_graphic(bzip2):
class bzip2_program(bzip2):
def ref(self, isa, os):
+ self.simpoint = 458*100E6
self.args = [ 'input.program', '58' ]
def lgred(self, isa, os):
@@ -364,6 +386,7 @@ class crafty(MinneDefaultBenchmark):
name = 'crafty'
number = 186
lang = 'C'
+ simpoint = 774*100E6
class eon(MinneDefaultBenchmark):
name = 'eon'
@@ -386,6 +409,7 @@ class eon_rushmeier(eon):
args = [ 'chair.control.rushmeier', 'chair.camera', 'chair.surfaces',
'chair.rushmeier.ppm', 'ppm', 'pixels_out.rushmeier' ]
output = 'rushmeier_log.out'
+ simpoint = 403*100E6
class gap(DefaultBenchmark):
name = 'gap'
@@ -403,6 +427,7 @@ class gap(DefaultBenchmark):
def ref(self, isa, os):
self.__set_args('192M')
+ self.simpoint = 674*100E6
def lgred(self, isa, os):
self.__set_args('64M')
@@ -435,22 +460,27 @@ class gcc(DefaultBenchmark):
class gcc_166(gcc):
def ref(self, isa, os):
+ self.simpoint = 389*100E6
self.args = [ '166.i', '-o', '166.s' ]
class gcc_200(gcc):
def ref(self, isa, os):
+ self.simpoint = 736*100E6
self.args = [ '200.i', '-o', '200.s' ]
class gcc_expr(gcc):
def ref(self, isa, os):
+ self.simpoint = 36*100E6
self.args = [ 'expr.i', '-o', 'expr.s' ]
class gcc_integrate(gcc):
def ref(self, isa, os):
+ self.simpoint = 4*100E6
self.args = [ 'integrate.i', '-o', 'integrate.s' ]
class gcc_scilab(gcc):
def ref(self, isa, os):
+ self.simpoint = 207*100E6
self.args = [ 'scilab.i', '-o', 'scilab.s' ]
class gzip(DefaultBenchmark):
@@ -466,6 +496,7 @@ class gzip(DefaultBenchmark):
class gzip_source(gzip):
def ref(self, isa, os):
+ self.simpoint = 334*100E6
self.args = [ 'input.source', '1' ]
def smred(self, isa, os):
self.args = [ 'input.source', '1' ]
@@ -476,6 +507,7 @@ class gzip_source(gzip):
class gzip_log(gzip):
def ref(self, isa, os):
+ self.simpoint = 265*100E6
self.args = [ 'input.log', '60' ]
def smred(self, isa, os):
self.args = [ 'input.log', '1' ]
@@ -486,6 +518,7 @@ class gzip_log(gzip):
class gzip_graphic(gzip):
def ref(self, isa, os):
+ self.simpoint = 653*100E6
self.args = [ 'input.graphic', '60' ]
def smred(self, isa, os):
self.args = [ 'input.graphic', '1' ]
@@ -496,6 +529,7 @@ class gzip_graphic(gzip):
class gzip_random(gzip):
def ref(self, isa, os):
+ self.simpoint = 623*100E6
self.args = [ 'input.random', '60' ]
def smred(self, isa, os):
self.args = [ 'input.random', '1' ]
@@ -506,6 +540,7 @@ class gzip_random(gzip):
class gzip_program(gzip):
def ref(self, isa, os):
+ self.simpoint = 1189*100E6
self.args = [ 'input.program', '60' ]
def smred(self, isa, os):
self.args = [ 'input.program', '1' ]
@@ -519,12 +554,14 @@ class mcf(MinneDefaultBenchmark):
number = 181
lang = 'C'
args = [ 'mcf.in' ]
+ simpoint = 553*100E6
class parser(MinneDefaultBenchmark):
name = 'parser'
number = 197
lang = 'C'
args = [ '2.1.dict', '-batch' ]
+ simpoint = 1146*100E6
class perlbmk(DefaultBenchmark):
name = 'perlbmk'
@@ -537,6 +574,7 @@ class perlbmk(DefaultBenchmark):
class perlbmk_diffmail(perlbmk):
def ref(self, isa, os):
+ self.simpoint = 141*100E6
self.args = [ '-I', 'lib', 'diffmail.pl', '2', '550', '15', '24',
'23', '100' ]
@@ -551,6 +589,7 @@ class perlbmk_scrabbl(perlbmk):
class perlbmk_makerand(perlbmk):
def ref(self, isa, os):
+ self.simpoint = 11*100E6
self.args = [ '-I', 'lib', 'makerand.pl' ]
def lgred(self, isa, os):
@@ -564,6 +603,7 @@ class perlbmk_makerand(perlbmk):
class perlbmk_perfect(perlbmk):
def ref(self, isa, os):
+ self.simpoint = 5*100E6
self.args = [ '-I', 'lib', 'perfect.pl', 'b', '3', 'm', '4' ]
def train(self, isa, os):
@@ -571,6 +611,7 @@ class perlbmk_perfect(perlbmk):
class perlbmk_splitmail1(perlbmk):
def ref(self, isa, os):
+ self.simpoint = 405*100E6
self.args = [ '-I', 'lib', 'splitmail.pl', '850', '5', '19',
'18', '1500' ]
@@ -602,6 +643,7 @@ class twolf(Benchmark):
self.args = [ 'train' ]
def ref(self, isa, os):
+ self.simpoint = 1066*100E6
self.args = [ 'ref' ]
def smred(self, isa, os):
@@ -653,15 +695,18 @@ class vortex1(vortex):
def ref(self, isa, os):
self.args = [ '%s1.raw' % self.endian ]
self.output = 'vortex1.out'
+ self.simpoint = 271*100E6
class vortex2(vortex):
def ref(self, isa, os):
+ self.simpoint = 1024*100E6
self.args = [ '%s2.raw' % self.endian ]
self.output = 'vortex2.out'
class vortex3(vortex):
def ref(self, isa, os):
+ self.simpoint = 564*100E6
self.args = [ '%s3.raw' % self.endian ]
self.output = 'vortex3.out'
@@ -678,6 +723,7 @@ class vpr_place(vpr):
output = 'place_log.out'
class vpr_route(vpr):
+ simpoint = 476*100E6
args = [ 'net.in', 'arch.in', 'place.in', 'route.out', '-nodisp',
'-route_only', '-route_chan_width', '15',
'-pres_fac_mult', '2', '-acc_fac', '1',
diff --git a/src/sim/Process.py b/src/sim/Process.py
index 07ed2c692..37a27bf3b 100644
--- a/src/sim/Process.py
+++ b/src/sim/Process.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2005-2007 The Regents of The University of Michigan
+# Copyright (c) 2005-2008 The Regents of The University of Michigan
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -50,3 +50,4 @@ class LiveProcess(Process):
egid = Param.Int(100, 'effective group id')
pid = Param.Int(100, 'process id')
ppid = Param.Int(99, 'parent process id')
+ simpoint = Param.UInt64(0, 'simulation point at which to start simulation')