I am using the drain() functionality, and I also tried doDrain() which
loops until all objects have completely drained but that doesn't seem to
function properly for the o3 cpu model. Even when I try to do a single
switch starting from an o3 and switching to a simpleTiming cpu only once
I get the following assertion failure. I dump the instList in
mem_dep_unit and it always seems that cpu 1 has a single instruction
remaining. This only seems to happen when I use more than 1 core, if I
use a single core I can switch just fine.
**** REAL SIMULATION ****
info: Entering event queue @ 0. Starting simulation...
info: Launching CPU 1 @ 99779000
info: Entering event queue @ 100000000. Starting simulation...
hack: be nice to actually delete the event here
switching cpus
Instruction list 0 size: 0
Instruction list 1 size: 0
Instruction list 2 size: 0
Instruction list 3 size: 0
Memory dependence hash size: 0
================================
Instruction list 0 size: 1
Instruction:0
PC: (0xfffffc0000010034=>0xfffffc0000010038)
[sn:175]
[tid:0]
Issued:1
Squashed:0
Instruction list 1 size: 0
Instruction list 2 size: 0
Instruction list 3 size: 0
Memory dependence hash size: 1
================================
m5.opt: build/ALPHA_FS/cpu/o3/mem_dep_unit_impl.hh:117: void
MemDepUnit<MemDepPred, Impl>::switchOut() [with MemDepPred = StoreSet,
Impl = O3CPUImpl]: Assertion `instList[0].empty()' failed.
Here is the code I added to the fs.py config script.
if options.big_core:
little_core_cpus = [TimingSimpleCPU(defer_registration=True,
cpu_id=(np+i)) for i in xrange(np)]
for i in xrange(np):
little_core_cpus[i].system = testsys
little_core_cpus[i].clock = testsys.cpu[0].clock
testsys.little_core_cpus = little_core_cpus
switch_little_core_cpu_list = [(testsys.cpu[i],
little_core_cpus[i]) for i in xrange(np)]
print "**** REAL SIMULATION ****"
if options.big_core:
exit_event = m5.simulate(100000000)
m5.doDrain(testsys)
m5.switchCpus(switch_little_core_cpu_list)
m5.resume(testsys)
exit_event = m5.simulate(maxtick - m5.curTick())
else:
exit_event = m5.simulate(maxtick)
On 03/10/2011 12:57 AM, Ali Saidi wrote:
It is possible. I don't know if it works in the current code, but it did work
at some point in the past. You probably need to drain() the system before you
make the switch which should prevent any instructions from being inflight in
the cpu.
Ali
On Mar 9, 2011, at 2:53 PM, Anthony Gutierrez wrote:
I found a problem with my original script, I realized I wasn't reversing the
order of the switch list after I switched cpus. I corrected this but I still
get the same assertion failure. Can anybody tell me, is what I'm trying to do
even possible in m5 without major code modifications? i.e. switching back and
forth periodically between two different sets of cores.
-Tony
_______________________________________________
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
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users