Hi Vilas,
Things woudl probably get even faster for you if you were to use
checkpoints. the standard switch stuff is generally intended for use after
coming out of a checkpoint. if you use checkpoints, you won't have to do
fast forward every time - just do it once, save state in the form of a
checkpoint, and later resume from that whenever you want.
Lisa
On 12/12/06, Vilas Sridharan <[EMAIL PROTECTED]> wrote:
Hello all --
First of all, thank you for the release of the M5 2.0 beta 2! It seems to
fix all the bugs I was hitting with beta 1.
A question: I would like to use a Simpoint-like method with M5 where I
fast-forward for a specified number of instructions and then simulate for a
specified number of instructions. This has come up on the list a few times
but I haven't really seen a good response on how to accomplish it.
I think I've come up with a way of doing it (at least for single-processor
mode) by modifying the Simulation.py script (in m5/configs/common/); I'd
like to post it here to get feedback and make sure it's doing the right
thing :-). I modeled the fast-forwarding on the provided --standard_switch
option. I've noted the additions to the scripts below; if someone could
take a look at it, I'd really appreciate it. (I can send the full script if
that's easier.)
Thanks!
-Vilas
To my controller script (my version of se.py in m5/configs/example/), I
added the following options:
parser.add_option("-f", "--fast_forward", type="int", action="store",
help="fast_forward count in instructions: must be used
with --max_inst")
parser.add_option("--max_inst", type="int", action="store",
help="max_insts_any_thread value")
Then in the run function in Simulation.py, I changed line 76-95 as follows
(changes marked with <<<):
if options.standard_switch or options.fast_forward:
<<<
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))
for i in xrange(np)]
for i in xrange(np):
switch_cpus[i].system = testsys
switch_cpus_1[i].system = testsys
if not m5.build_env['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
switch_cpus_1[i].clock = testsys.cpu[0].clock
#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)
if options.fast_forward:
<<<
switch_cpus[i].max_insts_any_thread = options.fast_forward
<<<
switch_cpus_1[i].max_insts_any_thread = options.max_inst
<<<
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)]
I then added the following prior to line 158 (if options.take_checkpoints
):
if options.fast_forward:
# exit_event = m5.simulate(10000)
m5.changeToTiming(testsys)
m5.switchCpus(switch_cpu_list)
m5.resume(testsys)
exit_event = m5.simulate()
if exit_event.getCause() == "a thread reached the max instruction
count":
print "Reached fast_forward count; simulating for --max_inst"
m5.switchCpus(switch_cpu_list1)
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users