Hi Jason, I am trying to hit the start of the ROI for an application and then switch to the Detailed CPU. For this, I wrote my version of the run function in Simulation.py. I am able to successfully intercept the start of workbegin, however I am unable to successfully CPUs.
*def run1(options, root, testsys, cpu_call): cptdir = getcwd() maxtick = m5.MaxTick root.apply_config(options.param) checkpoint_dir = None m5.instantiate(checkpoint_dir) # the number of cpus np = options.num_cpus switch_cpus = None switch_cpus_1 = None switch_cpus = [TimingSimpleCPU(switched_out=True, cpu_id=(i)) for i in xrange(np)] switch_cpus_1 = [DerivO3CPU(switched_out=True, cpu_id=(i)) for i in xrange(np)] for i in xrange(np): switch_cpus[i].system = testsys switch_cpus_1[i].system = testsys switch_cpus[i].workload = testsys.cpu[i].workload switch_cpus_1[i].workload = testsys.cpu[i].workload switch_cpus[i].clk_domain = testsys.cpu[i].clk_domain switch_cpus_1[i].clk_domain = testsys.cpu[i].clk_domain switch_cpus[i].isa = testsys.cpu[i].isa switch_cpus_1[i].isa = testsys.cpu[i].isa while True: exit_event = m5.simulate() exit_cause = exit_event.getCause() testsys.switch_cpus = switch_cpus_1 # testsys.switch_cpus_1 = switch_cpus_1 switch_cpu_list = [(testsys.cpu[i], switch_cpus_1[i]) for i in xrange(np)] # switch_cpu_list_1 = [(testsys.cpu[i], switch_cpus_1[i]) for i in xrange(np)] if exit_cause == "workbegin": print("Switched CPUS @ tick on hitting ROI %s" % (m5.curTick())) m5.switchCpus(testsys, switch_cpu_list) elif exit_cause == "workend": print("Reached ROI end") break print(exit_event.getCause())* The above is my function. It correctly captures the workbegin, however it throws an error related to the new CPU it tried to switch to: * File "<string>", line 1, in <module> File "/afs/cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/main.py <http://cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/main.py>", line 438, in main exec(filecode, scope) File "configs/example/se.py", line 274, in <module> Simulation.run1(options, root, system, FutureClass) File "/afs/cs.wisc.edu/u/s/h/shyamm/gem5_2/configs/common/Simulation.py <http://cs.wisc.edu/u/s/h/shyamm/gem5_2/configs/common/Simulation.py>", line 467, in run1 m5.switchCpus(testsys, switch_cpu_list) File "/afs/cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/simulate.py <http://cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/simulate.py>", line 275, in switchCpus if not new_cpu.switchedOut(): File "/afs/cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/SimObject.py <http://cs.wisc.edu/u/s/h/shyamm/gem5_2/src/python/m5/SimObject.py>", line 1204, in __getattr__ raise AttributeError(err_string)AttributeError: object 'DerivO3CPU' has no attribute 'switchedOut' (C++ object is not yet constructed, so wrapped C++ methods are unavailable.)* The python bind does happen in the BaseCPU.py file for switchedOut function, I was unable to follow why this exception is still being thrown. Anything I am missing Jason? Thanks, Shyam
_______________________________________________ gem5-users mailing list gem5-users@gem5.org http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users