Hi,
I want to build a heterogeneous system using gem5. I am having 2 cpus (cpuA and
cpuB) and one workload. What I want to do first is to run the benchmark on the
one and leave the other inactive.
My cores parapmeter are the following:
...
mainCpu.switched_out=fastfwd
mainCpu.workload = process
mainCpu.cpu_id = 0
l2cache = ARML2Cache()
secondmainCpu.switched_out=True
secondmainCpu.workload = process
secondmainCpu.cpu_id = 1
I want secondmainCpu to be inactive so I have set its switched_out to True.
for the fast-fwd I am using atomicCpus and then I am switching to the mainCpu
and the secondmainCpu mentioned above.
# Choose the CPU to use initially.
if fastfwd:
startCpu = funcCpu
secondCpu =secondfuncCpu
print "CPU configuation for fast-fwd"
else:
startCpu = mainCpu
secondCpu = secondmainCpu
print "CPU for main simulation"
if fastfwd:
exitEvent = m5.simulate()
if exitEvent.getCause() == "all threads reached the max instruction count":
print "Finished fast-forwarding, switching CPUs"
m5.drain(system)
m5.changeToTiming(system)
m5.switchCpus([(system.mediumcpu, system.secondmainCpu),(system.cpu,
system.mainCpu)])
m5.resume(system)
else:
fatal("Error fast-forwarding: " + exitEvent.getCause())
The problem is that in the main simulation, no matter which core I set active,
it is like my benchmark runs only on secondmainCpu since in the stats always
secondmainCpu.numcycles is different to zero and maincpu.numCycles is 0.
I have also added my own instruction that sets switch_out to True. So code for
my simulation is this:
...
m5.setswitchTrue(system.secondmainCpu)
...
# Repeatedly simulate and dump stats.
numIntervals = 0
while options.max_intervals == 0 or numIntervals < options.max_intervals:
exitEvent = m5.simulate()
if exitEvent.getCause() == "all threads reached the max instruction count":
print "Finished interval", numIntervals, "so dumping stats"
m5.stats.dump()
m5.stats.reset()
maxInsts += options.interval_length
system.mainCpu.setMaxInstsAllThreads(maxInsts)
system.secondmainCpu.setMaxInstsAllThreads(maxInsts)
numIntervals += 1
elif exitEvent.getCause() == "target called exit":
break
else:
fatal("Error simulating: " + exitEvent.getCause())
where setSwitchTrue is being used for setting switced_out to True and here is
its code (in the base.cc):
void
BaseCPU::setswitchTrue()
{
_switchedOut=true;
}
At first I want to run all of the intervals on the one core, without any
switching. Just to simulate with one core active and the other one inactive,
and then vice versa.
Any hints?
Thanks,
Ignatios
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users