From fcfc8b8c4ff98d69aa15fba60e723a9a1c4cda42 Mon Sep 17 00:00:00 2001 From: Rick Strong Date: Wed, 27 Feb 2008 00:35:09 -0500 Subject: [PATCH] Configs: Make using Simpoints easier with some config files that support them easily --HG-- extra : convert_revision : 0f21829306eb68b332f03da410e6c341c8595bdd --- configs/common/Options.py | 50 ++++--- configs/common/Simulation.py | 259 +++++++++++++++++++++++------------ configs/common/cpu2000.py | 50 ++++++- src/sim/Process.py | 3 +- 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=" 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 ") +parser.add_option("--take-checkpoints", action="store", type="string", + help=" 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 ") # 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) - 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): - m5.panic('Checkpoint %d not found' % cpt_num) + 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)) - ## Adjust max tick based on our starting tick - maxtick = maxtick - int(cpts[cpt_num - 1]) + 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)) - ## Restore the checkpoint - m5.restoreCheckpoint(root, - joinpath(cptdir, "cpt.%s" % cpts[cpt_num - 1])) + cpts.sort(lambda a,b: cmp(long(a), long(b))) + + 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: - 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 and at subsequent - ## periods of . 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 and at + # subsequent periods of . 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')