Config: change how cpu class is set

This changes the way in which the cpu class while restoring from a checkpoint
is set. Earlier it was assumed if cpu type with which to restore is not same
as the cpu type with the which to run the simulation, then the checkpoint
should be restored with the atomic cpu. This assumption is being dropped. The
checkpoint can now be restored with any cpu type, the default being atomic cpu.
This commit is contained in:
Nilay Vaish 2012-08-06 18:14:31 -05:00
parent 6721b3e325
commit d81a51a4c8

View file

@ -38,45 +38,48 @@ from O3_ARM_v7a import *
addToPath('../common') addToPath('../common')
def setCPUClass(options): def getCPUClass(cpu_type):
"""Returns the required cpu class and the mode of operation.
"""
atomic = False if cpu_type == "timing":
if options.cpu_type == "timing": return TimingSimpleCPU, 'timing'
class TmpClass(TimingSimpleCPU): pass elif cpu_type == "detailed":
elif options.cpu_type == "detailed" or options.cpu_type == "arm_detailed": return DerivO3CPU, 'timing'
if not options.caches and not options.ruby: elif cpu_type == "arm_detailed":
print "O3 CPU must be used with caches" return O3_ARM_v7a_3, 'timing'
sys.exit(1) elif cpu_type == "inorder":
if options.cpu_type == "arm_detailed": return InOrderCPU, 'timing'
class TmpClass(O3_ARM_v7a_3): pass
else:
class TmpClass(DerivO3CPU): pass
elif options.cpu_type == "inorder":
if not options.caches:
print "InOrder CPU must be used with caches"
sys.exit(1)
class TmpClass(InOrderCPU): pass
else: else:
class TmpClass(AtomicSimpleCPU): pass return AtomicSimpleCPU, 'atomic'
atomic = True
def setCPUClass(options):
"""Returns two cpu classes and the initial mode of operation.
Restoring from a checkpoint or fast forwarding through a benchmark
can be done using one type of cpu, and then the actual
simulation can be carried out using another type. This function
returns these two types of cpus and the initial mode of operation
depending on the options provided.
"""
if options.cpu_type == "detailed" or \
options.cpu_type == "arm_detailed" or \
options.cpu_type == "inorder" :
if not options.caches and not options.ruby:
fatal("O3/Inorder CPU must be used with caches")
TmpClass, test_mem_mode = getCPUClass(options.cpu_type)
CPUClass = None CPUClass = None
test_mem_mode = 'atomic'
if not atomic: if options.checkpoint_restore != None:
if options.checkpoint_restore != None: if options.restore_with_cpu != options.cpu_type:
if options.restore_with_cpu != options.cpu_type:
CPUClass = TmpClass
class TmpClass(AtomicSimpleCPU): pass
else:
if options.restore_with_cpu != "atomic":
test_mem_mode = 'timing'
elif options.fast_forward:
CPUClass = TmpClass CPUClass = TmpClass
class TmpClass(AtomicSimpleCPU): pass TmpClass, test_mem_mode = getCPUClass(options.restore_with_cpu)
else: elif options.fast_forward:
test_mem_mode = 'timing' CPUClass = TmpClass
TmpClass = AtomicSimpleCPU
test_mem_mode = 'atomic'
return (TmpClass, test_mem_mode, CPUClass) return (TmpClass, test_mem_mode, CPUClass)