Configs: Make using Simpoints easier with some config files that support them easily

--HG--
extra : convert_revision : 0f21829306eb68b332f03da410e6c341c8595bdd
This commit is contained in:
Rick Strong 2008-02-27 00:35:09 -05:00
parent 43ecce5fda
commit fcfc8b8c4f
4 changed files with 256 additions and 106 deletions

View file

@ -29,7 +29,7 @@
# system options # system options
parser.add_option("-d", "--detailed", action="store_true") parser.add_option("-d", "--detailed", action="store_true")
parser.add_option("-t", "--timing", 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("--caches", action="store_true")
parser.add_option("--l2cache", action="store_true") parser.add_option("--l2cache", action="store_true")
parser.add_option("--fastmem", action="store_true") parser.add_option("--fastmem", action="store_true")
@ -41,26 +41,38 @@ parser.add_option("--maxtime", type="float")
# Checkpointing options # Checkpointing options
###Note that performing checkpointing via python script files will override ###Note that performing checkpointing via python script files will override
###checkpoint instructions built into binaries. ###checkpoint instructions built into binaries.
parser.add_option("--take_checkpoints", action="store", type="string", parser.add_option("--take-checkpoints", action="store", type="string",
help="<M,N> will take checkpoint at cycle M and every N cycles \ help="<M,N> will take checkpoint at cycle M and every N cycles thereafter")
thereafter") parser.add_option("--max-checkpoints", action="store", type="int",
parser.add_option("--max_checkpoints", action="store", type="int", help="the maximum number of checkpoints to drop", default=5)
help="the maximum number of checkpoints to drop", parser.add_option("--checkpoint-dir", action="store", type="string",
default=5) help="Place all checkpoints in this absolute directory")
parser.add_option("--checkpoint_dir", action="store", type="string", parser.add_option("-r", "--checkpoint-restore", action="store", type="int",
help="Place all checkpoints in this absolute directory") help="restore from checkpoint <N>")
parser.add_option("-r", "--checkpoint_restore", action="store", type="int",
help="restore from checkpoint <N>")
# CPU Switching - default switch model goes from a checkpoint # CPU Switching - default switch model goes from a checkpoint
# to a timing simple CPU with caches to warm up, then to detailed CPU for # to a timing simple CPU with caches to warm up, then to detailed CPU for
# data measurement # data measurement
parser.add_option("-s", "--standard_switch", action="store_true", parser.add_option("-s", "--standard-switch", action="store_true",
help="switch from timing CPU to Detailed CPU") help="switch from timing CPU to Detailed CPU")
parser.add_option("-w", "--warmup", action="store", type="int", parser.add_option("-w", "--warmup", action="store", type="int",
help="if -s, then this is the warmup period. else, this is ignored", help="if -s, then this is the warmup period. else, this is ignored",
default=5000000000) 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") # Fastforwarding and simpoint related materials
parser.add_option("--max_inst", type="int", action="store", parser.add_option("-W", "--warmup-insts", action="store", type="int",
help="max_insts_any_thread value") 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.""")

View file

@ -51,7 +51,7 @@ def setCPUClass(options):
test_mem_mode = 'atomic' test_mem_mode = 'atomic'
if not atomic: if not atomic:
if options.checkpoint_restore: if options.checkpoint_restore or options.fast_forward:
CPUClass = TmpClass CPUClass = TmpClass
class TmpClass(AtomicSimpleCPU): pass class TmpClass(AtomicSimpleCPU): pass
else: else:
@ -86,6 +86,8 @@ def run(options, root, testsys, cpu_class):
for i in xrange(np)] for i in xrange(np)]
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 switch_cpus[i].system = testsys
if not m5.build_env['FULL_SYSTEM']: if not m5.build_env['FULL_SYSTEM']:
switch_cpus[i].workload = testsys.cpu[i].workload 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)] switch_cpu_list = [(testsys.cpu[i], switch_cpus[i]) for i in xrange(np)]
if options.standard_switch: 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)) switch_cpus = [TimingSimpleCPU(defer_registration=True, cpu_id=(np+i))
for i in xrange(np)] for i in xrange(np)]
switch_cpus_1 = [DerivO3CPU(defer_registration=True, cpu_id=(2*np+i)) 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[i].clock = testsys.cpu[0].clock
switch_cpus_1[i].clock = testsys.cpu[0].clock switch_cpus_1[i].clock = testsys.cpu[0].clock
if options.fast_forward: # if restoring, make atomic cpu simulate only a few instructions
switch_cpus[i].max_insts_any_thread = options.fast_forward 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: if options.max_inst:
switch_cpus_1[i].max_insts_any_thread = 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')) L1Cache(size = '64kB'))
switch_cpus_1[i].connectMemPorts(testsys.membus) switch_cpus_1[i].connectMemPorts(testsys.membus)
testsys.switch_cpus = switch_cpus testsys.switch_cpus = switch_cpus
testsys.switch_cpus_1 = switch_cpus_1 testsys.switch_cpus_1 = switch_cpus_1
switch_cpu_list = [(testsys.cpu[i], switch_cpus[i]) for i in xrange(np)] 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)] switch_cpu_list1 = [(switch_cpus[i], switch_cpus_1[i]) for i in xrange(np)]
elif options.fast_forward: # set the checkpoint in the cpu before m5.instantiate is called
for i in xrange(np): if options.take_checkpoints and \
testsys.cpu[i].max_insts_any_thread = options.fast_forward (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) m5.instantiate(root)
if options.checkpoint_restore: if options.checkpoint_restore:
from os.path import isdir from os.path import isdir, exists
from os import listdir from os import listdir
import re import re
if not isdir(cptdir): if not isdir(cptdir):
m5.panic("checkpoint dir %s does not exist!" % cptdir) m5.panic("checkpoint dir %s does not exist!" % cptdir)
dirs = listdir(cptdir) if options.at_instruction:
expr = re.compile('cpt\.([0-9]*)') checkpoint_dir = joinpath(cptdir, "cpt.%s.%s" % \
cpts = [] (options.bench, options.checkpoint_restore))
for dir in dirs: if not exists(checkpoint_dir):
match = expr.match(dir) m5.panic("Unable to find checkpoint directory %s" % \
if match: checkpoint_dir)
cpts.append(match.group(1))
cpts.sort(lambda a,b: cmp(long(a), long(b))) 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')
cpt_num = options.checkpoint_restore options.checkpoint_restore += \
testsys.cpu[0].workload[0].simpoint
if cpt_num > len(cpts): checkpoint_dir = joinpath(cptdir, "cpt.%s.%d" % \
m5.panic('Checkpoint %d not found' % cpt_num) (options.bench, options.checkpoint_restore))
if not exists(checkpoint_dir):
m5.panic("Unable to find checkpoint directory %s.%s" % \
(options.bench, options.checkpoint_restore))
## Adjust max tick based on our starting tick print "Restoring checkpoint ..."
maxtick = maxtick - int(cpts[cpt_num - 1]) 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))
## Restore the checkpoint cpts.sort(lambda a,b: cmp(long(a), long(b)))
m5.restoreCheckpoint(root,
joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1])) cpt_num = options.checkpoint_restore
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])
## Restore the checkpoint
m5.restoreCheckpoint(root,
joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1]))
if options.standard_switch or cpu_class: 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 # when you change to Timing (or Atomic), you halt the system
## as argument. When you are finished with the system changes # given as argument. When you are finished with the system
## (including switchCpus), you must resume the system manually. # changes (including switchCpus), you must resume the system
## You DON'T need to resume after just switching CPUs if you haven't # manually. You DON'T need to resume after just switching
## changed anything on the system level. # CPUs if you haven't changed anything on the system level.
m5.changeToTiming(testsys) m5.changeToTiming(testsys)
m5.switchCpus(switch_cpu_list) m5.switchCpus(switch_cpu_list)
m5.resume(testsys) m5.resume(testsys)
if options.standard_switch: if options.standard_switch:
if (options.warmup): print "Switch at instruction count:%d" % \
exit_event = m5.simulate(options.warmup) (testsys.switch_cpus[0].max_insts_any_thread)
if options.fast_forward:
#warmup instruction count may have already been set
if options.warmup_insts:
exit_event = m5.simulate() 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.drain(testsys)
m5.switchCpus(switch_cpu_list1) m5.switchCpus(switch_cpu_list1)
m5.resume(testsys) 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 num_checkpoints = 0
exit_cause = '' exit_cause = ''
## Checkpoints being taken via the command line at <when> and at subsequent # Checkpoints being taken via the command line at <when> and at
## periods of <period>. Checkpoint instructions received from the benchmark running # subsequent periods of <period>. Checkpoint instructions
## are ignored and skipped in favor of command line checkpoint instructions. # received from the benchmark running are ignored and skipped in
# favor of command line checkpoint instructions.
if options.take_checkpoints: if options.take_checkpoints:
[when, period] = options.take_checkpoints.split(",", 1) when, period = options.take_checkpoints.split(",", 1)
when = int(when) when = int(when)
period = int(period) period = int(period)
exit_event = m5.simulate(when) if options.at_instruction or options.simpoint:
while exit_event.getCause() == "checkpoint": checkpoint_inst = when
exit_event = m5.simulate(when - m5.curTick())
if exit_event.getCause() == "simulate() limit reached": # maintain correct offset if we restored from some instruction
m5.checkpoint(root, joinpath(cptdir, "cpt.%d")) if options.checkpoint_restore:
num_checkpoints += 1 checkpoint_inst += options.checkpoint_restore
sim_ticks = when print "Creating checkpoint at inst:%d" % (checkpoint_inst)
exit_cause = "maximum %d checkpoints dropped" % max_checkpoints exit_event = m5.simulate()
while num_checkpoints < max_checkpoints and \ print "exit cause = %s" % (exit_event.getCause())
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": # skip checkpoint instructions should they exist
exit_cause = exit_event.getCause(); 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) exit_event = m5.simulate(maxtick)
while exit_event.getCause() == "checkpoint": while exit_event.getCause() == "checkpoint":
m5.checkpoint(root, joinpath(cptdir, "cpt.%d")) m5.checkpoint(root, joinpath(cptdir, "cpt.%d"))
num_checkpoints += 1 num_checkpoints += 1
if num_checkpoints == max_checkpoints: if num_checkpoints == max_checkpoints:
exit_cause = "maximum %d checkpoints dropped" % max_checkpoints exit_cause = "maximum %d checkpoints dropped" % max_checkpoints
break break
exit_event = m5.simulate(maxtick - m5.curTick()) exit_event = m5.simulate(maxtick - m5.curTick())

View file

@ -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. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@ -85,6 +85,9 @@ class Benchmark(object):
if not hasattr(self.__class__, 'output'): if not hasattr(self.__class__, 'output'):
self.output = '%s.out' % self.name self.output = '%s.out' % self.name
if not hasattr(self.__class__, 'simpoint'):
self.simpoint = None
try: try:
func = getattr(self.__class__, input_set) func = getattr(self.__class__, input_set)
except AttributeError: except AttributeError:
@ -137,7 +140,7 @@ class Benchmark(object):
process_args['input'] = self.stdin process_args['input'] = self.stdin
if self.stdout: if self.stdout:
process_args['output'] = self.stdout process_args['output'] = self.stdout
process_args['simpoint'] = self.simpoint
# explicit keywords override defaults # explicit keywords override defaults
process_args.update(kwargs) process_args.update(kwargs)
@ -149,6 +152,7 @@ class Benchmark(object):
# figure out working directory: use m5's outdir unless # figure out working directory: use m5's outdir unless
# overridden by LiveProcess's cwd param # overridden by LiveProcess's cwd param
cwd = process_args.get('cwd') cwd = process_args.get('cwd')
if not cwd: if not cwd:
from m5.main import options from m5.main import options
cwd = options.outdir cwd = options.outdir
@ -179,16 +183,19 @@ class ammp(MinneDefaultBenchmark):
name = 'ammp' name = 'ammp'
number = 188 number = 188
lang = 'C' lang = 'C'
simpoint = 108*100E6
class applu(MinneDefaultBenchmark): class applu(MinneDefaultBenchmark):
name = 'applu' name = 'applu'
number = 173 number = 173
lang = 'F77' lang = 'F77'
simpoint = 2179*100E6
class apsi(MinneDefaultBenchmark): class apsi(MinneDefaultBenchmark):
name = 'apsi' name = 'apsi'
number = 301 number = 301
lang = 'F77' lang = 'F77'
simpoint = 3408*100E6
class art(DefaultBenchmark): class art(DefaultBenchmark):
name = 'art' name = 'art'
@ -241,6 +248,7 @@ class art110(art):
'-endy', '240', '-endy', '240',
'-objects', '10' ] '-objects', '10' ]
self.output = 'ref.1.out' self.output = 'ref.1.out'
self.simpoint = 340*100E6
class art470(art): class art470(art):
def ref(self, isa, os): def ref(self, isa, os):
@ -254,11 +262,13 @@ class art470(art):
'-endy', '180', '-endy', '180',
'-objects', '10' ] '-objects', '10' ]
self.output = 'ref.2.out' self.output = 'ref.2.out'
self.simpoint = 365*100E6
class equake(DefaultBenchmark): class equake(DefaultBenchmark):
name = 'equake' name = 'equake'
number = 183 number = 183
lang = 'C' lang = 'C'
simpoint = 812*100E6
def lgred(self, isa, os): pass def lgred(self, isa, os): pass
@ -266,21 +276,25 @@ class facerec(MinneDefaultBenchmark):
name = 'facerec' name = 'facerec'
number = 187 number = 187
lang = 'F' lang = 'F'
simpoint = 375*100E6
class fma3d(MinneDefaultBenchmark): class fma3d(MinneDefaultBenchmark):
name = 'fma3d' name = 'fma3d'
number = 191 number = 191
lang = 'F' lang = 'F'
simpoint = 2541*100E6
class galgel(MinneDefaultBenchmark): class galgel(MinneDefaultBenchmark):
name = 'galgel' name = 'galgel'
number = 178 number = 178
lang = 'F' lang = 'F'
simpoint = 2491*100E6
class lucas(MinneDefaultBenchmark): class lucas(MinneDefaultBenchmark):
name = 'lucas' name = 'lucas'
number = 189 number = 189
lang = 'F' lang = 'F'
simpoint = 545*100E6
class mesa(Benchmark): class mesa(Benchmark):
name = 'mesa' name = 'mesa'
@ -300,6 +314,7 @@ class mesa(Benchmark):
def ref(self, isa, os): def ref(self, isa, os):
self.__set_args('1000') self.__set_args('1000')
self.simpoint = 1135*100E6
def lgred(self, isa, os): def lgred(self, isa, os):
self.__set_args('1') self.__set_args('1')
@ -308,11 +323,13 @@ class mgrid(MinneDefaultBenchmark):
name = 'mgrid' name = 'mgrid'
number = 172 number = 172
lang = 'F77' lang = 'F77'
simpoint = 3292*100E6
class sixtrack(DefaultBenchmark): class sixtrack(DefaultBenchmark):
name = 'sixtrack' name = 'sixtrack'
number = 200 number = 200
lang = 'F77' lang = 'F77'
simpoint = 3043*100E6
def lgred(self, isa, os): pass def lgred(self, isa, os): pass
@ -320,11 +337,13 @@ class swim(MinneDefaultBenchmark):
name = 'swim' name = 'swim'
number = 171 number = 171
lang = 'F77' lang = 'F77'
simpoint = 2079*100E6
class wupwise(DefaultBenchmark): class wupwise(DefaultBenchmark):
name = 'wupwise' name = 'wupwise'
number = 168 number = 168
lang = 'F77' lang = 'F77'
simpoint = 3237*100E6
def lgred(self, isa, os): pass def lgred(self, isa, os): pass
@ -341,6 +360,7 @@ class bzip2(DefaultBenchmark):
class bzip2_source(bzip2): class bzip2_source(bzip2):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 977*100E6
self.args = [ 'input.source', '58' ] self.args = [ 'input.source', '58' ]
def lgred(self, isa, os): def lgred(self, isa, os):
@ -348,6 +368,7 @@ class bzip2_source(bzip2):
class bzip2_graphic(bzip2): class bzip2_graphic(bzip2):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 718*100E6
self.args = [ 'input.graphic', '58' ] self.args = [ 'input.graphic', '58' ]
def lgred(self, isa, os): def lgred(self, isa, os):
@ -355,6 +376,7 @@ class bzip2_graphic(bzip2):
class bzip2_program(bzip2): class bzip2_program(bzip2):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 458*100E6
self.args = [ 'input.program', '58' ] self.args = [ 'input.program', '58' ]
def lgred(self, isa, os): def lgred(self, isa, os):
@ -364,6 +386,7 @@ class crafty(MinneDefaultBenchmark):
name = 'crafty' name = 'crafty'
number = 186 number = 186
lang = 'C' lang = 'C'
simpoint = 774*100E6
class eon(MinneDefaultBenchmark): class eon(MinneDefaultBenchmark):
name = 'eon' name = 'eon'
@ -386,6 +409,7 @@ class eon_rushmeier(eon):
args = [ 'chair.control.rushmeier', 'chair.camera', 'chair.surfaces', args = [ 'chair.control.rushmeier', 'chair.camera', 'chair.surfaces',
'chair.rushmeier.ppm', 'ppm', 'pixels_out.rushmeier' ] 'chair.rushmeier.ppm', 'ppm', 'pixels_out.rushmeier' ]
output = 'rushmeier_log.out' output = 'rushmeier_log.out'
simpoint = 403*100E6
class gap(DefaultBenchmark): class gap(DefaultBenchmark):
name = 'gap' name = 'gap'
@ -403,6 +427,7 @@ class gap(DefaultBenchmark):
def ref(self, isa, os): def ref(self, isa, os):
self.__set_args('192M') self.__set_args('192M')
self.simpoint = 674*100E6
def lgred(self, isa, os): def lgred(self, isa, os):
self.__set_args('64M') self.__set_args('64M')
@ -435,22 +460,27 @@ class gcc(DefaultBenchmark):
class gcc_166(gcc): class gcc_166(gcc):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 389*100E6
self.args = [ '166.i', '-o', '166.s' ] self.args = [ '166.i', '-o', '166.s' ]
class gcc_200(gcc): class gcc_200(gcc):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 736*100E6
self.args = [ '200.i', '-o', '200.s' ] self.args = [ '200.i', '-o', '200.s' ]
class gcc_expr(gcc): class gcc_expr(gcc):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 36*100E6
self.args = [ 'expr.i', '-o', 'expr.s' ] self.args = [ 'expr.i', '-o', 'expr.s' ]
class gcc_integrate(gcc): class gcc_integrate(gcc):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 4*100E6
self.args = [ 'integrate.i', '-o', 'integrate.s' ] self.args = [ 'integrate.i', '-o', 'integrate.s' ]
class gcc_scilab(gcc): class gcc_scilab(gcc):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 207*100E6
self.args = [ 'scilab.i', '-o', 'scilab.s' ] self.args = [ 'scilab.i', '-o', 'scilab.s' ]
class gzip(DefaultBenchmark): class gzip(DefaultBenchmark):
@ -466,6 +496,7 @@ class gzip(DefaultBenchmark):
class gzip_source(gzip): class gzip_source(gzip):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 334*100E6
self.args = [ 'input.source', '1' ] self.args = [ 'input.source', '1' ]
def smred(self, isa, os): def smred(self, isa, os):
self.args = [ 'input.source', '1' ] self.args = [ 'input.source', '1' ]
@ -476,6 +507,7 @@ class gzip_source(gzip):
class gzip_log(gzip): class gzip_log(gzip):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 265*100E6
self.args = [ 'input.log', '60' ] self.args = [ 'input.log', '60' ]
def smred(self, isa, os): def smred(self, isa, os):
self.args = [ 'input.log', '1' ] self.args = [ 'input.log', '1' ]
@ -486,6 +518,7 @@ class gzip_log(gzip):
class gzip_graphic(gzip): class gzip_graphic(gzip):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 653*100E6
self.args = [ 'input.graphic', '60' ] self.args = [ 'input.graphic', '60' ]
def smred(self, isa, os): def smred(self, isa, os):
self.args = [ 'input.graphic', '1' ] self.args = [ 'input.graphic', '1' ]
@ -496,6 +529,7 @@ class gzip_graphic(gzip):
class gzip_random(gzip): class gzip_random(gzip):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 623*100E6
self.args = [ 'input.random', '60' ] self.args = [ 'input.random', '60' ]
def smred(self, isa, os): def smred(self, isa, os):
self.args = [ 'input.random', '1' ] self.args = [ 'input.random', '1' ]
@ -506,6 +540,7 @@ class gzip_random(gzip):
class gzip_program(gzip): class gzip_program(gzip):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 1189*100E6
self.args = [ 'input.program', '60' ] self.args = [ 'input.program', '60' ]
def smred(self, isa, os): def smred(self, isa, os):
self.args = [ 'input.program', '1' ] self.args = [ 'input.program', '1' ]
@ -519,12 +554,14 @@ class mcf(MinneDefaultBenchmark):
number = 181 number = 181
lang = 'C' lang = 'C'
args = [ 'mcf.in' ] args = [ 'mcf.in' ]
simpoint = 553*100E6
class parser(MinneDefaultBenchmark): class parser(MinneDefaultBenchmark):
name = 'parser' name = 'parser'
number = 197 number = 197
lang = 'C' lang = 'C'
args = [ '2.1.dict', '-batch' ] args = [ '2.1.dict', '-batch' ]
simpoint = 1146*100E6
class perlbmk(DefaultBenchmark): class perlbmk(DefaultBenchmark):
name = 'perlbmk' name = 'perlbmk'
@ -537,6 +574,7 @@ class perlbmk(DefaultBenchmark):
class perlbmk_diffmail(perlbmk): class perlbmk_diffmail(perlbmk):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 141*100E6
self.args = [ '-I', 'lib', 'diffmail.pl', '2', '550', '15', '24', self.args = [ '-I', 'lib', 'diffmail.pl', '2', '550', '15', '24',
'23', '100' ] '23', '100' ]
@ -551,6 +589,7 @@ class perlbmk_scrabbl(perlbmk):
class perlbmk_makerand(perlbmk): class perlbmk_makerand(perlbmk):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 11*100E6
self.args = [ '-I', 'lib', 'makerand.pl' ] self.args = [ '-I', 'lib', 'makerand.pl' ]
def lgred(self, isa, os): def lgred(self, isa, os):
@ -564,6 +603,7 @@ class perlbmk_makerand(perlbmk):
class perlbmk_perfect(perlbmk): class perlbmk_perfect(perlbmk):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 5*100E6
self.args = [ '-I', 'lib', 'perfect.pl', 'b', '3', 'm', '4' ] self.args = [ '-I', 'lib', 'perfect.pl', 'b', '3', 'm', '4' ]
def train(self, isa, os): def train(self, isa, os):
@ -571,6 +611,7 @@ class perlbmk_perfect(perlbmk):
class perlbmk_splitmail1(perlbmk): class perlbmk_splitmail1(perlbmk):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 405*100E6
self.args = [ '-I', 'lib', 'splitmail.pl', '850', '5', '19', self.args = [ '-I', 'lib', 'splitmail.pl', '850', '5', '19',
'18', '1500' ] '18', '1500' ]
@ -602,6 +643,7 @@ class twolf(Benchmark):
self.args = [ 'train' ] self.args = [ 'train' ]
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 1066*100E6
self.args = [ 'ref' ] self.args = [ 'ref' ]
def smred(self, isa, os): def smred(self, isa, os):
@ -653,15 +695,18 @@ class vortex1(vortex):
def ref(self, isa, os): def ref(self, isa, os):
self.args = [ '%s1.raw' % self.endian ] self.args = [ '%s1.raw' % self.endian ]
self.output = 'vortex1.out' self.output = 'vortex1.out'
self.simpoint = 271*100E6
class vortex2(vortex): class vortex2(vortex):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 1024*100E6
self.args = [ '%s2.raw' % self.endian ] self.args = [ '%s2.raw' % self.endian ]
self.output = 'vortex2.out' self.output = 'vortex2.out'
class vortex3(vortex): class vortex3(vortex):
def ref(self, isa, os): def ref(self, isa, os):
self.simpoint = 564*100E6
self.args = [ '%s3.raw' % self.endian ] self.args = [ '%s3.raw' % self.endian ]
self.output = 'vortex3.out' self.output = 'vortex3.out'
@ -678,6 +723,7 @@ class vpr_place(vpr):
output = 'place_log.out' output = 'place_log.out'
class vpr_route(vpr): class vpr_route(vpr):
simpoint = 476*100E6
args = [ 'net.in', 'arch.in', 'place.in', 'route.out', '-nodisp', args = [ 'net.in', 'arch.in', 'place.in', 'route.out', '-nodisp',
'-route_only', '-route_chan_width', '15', '-route_only', '-route_chan_width', '15',
'-pres_fac_mult', '2', '-acc_fac', '1', '-pres_fac_mult', '2', '-acc_fac', '1',

View file

@ -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. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # 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') egid = Param.Int(100, 'effective group id')
pid = Param.Int(100, 'process id') pid = Param.Int(100, 'process id')
ppid = Param.Int(99, 'parent process id') ppid = Param.Int(99, 'parent process id')
simpoint = Param.UInt64(0, 'simulation point at which to start simulation')