changeset ee038fbbe5d2 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ee038fbbe5d2
description:
        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.

diffstat:

 configs/common/Simulation.py |  67 ++++++++++++++++++++++---------------------
 1 files changed, 35 insertions(+), 32 deletions(-)

diffs (84 lines):

diff -r b4d0bdb52694 -r ee038fbbe5d2 configs/common/Simulation.py
--- a/configs/common/Simulation.py      Wed Aug 01 17:07:34 2012 -0500
+++ b/configs/common/Simulation.py      Mon Aug 06 18:14:31 2012 -0500
@@ -38,45 +38,48 @@
 
 addToPath('../common')
 
+def getCPUClass(cpu_type):
+    """Returns the required cpu class and the mode of operation.
+    """
+
+    if cpu_type == "timing":
+        return TimingSimpleCPU, 'timing'
+    elif cpu_type == "detailed":
+        return DerivO3CPU, 'timing'
+    elif cpu_type == "arm_detailed":
+        return O3_ARM_v7a_3, 'timing'
+    elif cpu_type == "inorder":
+        return InOrderCPU, 'timing'
+    else:
+        return AtomicSimpleCPU, 'atomic'
+
 def setCPUClass(options):
+    """Returns two cpu classes and the initial mode of operation.
 
-    atomic = False
-    if options.cpu_type == "timing":
-        class TmpClass(TimingSimpleCPU): pass
-    elif options.cpu_type == "detailed" or options.cpu_type == "arm_detailed":
+       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:
-            print "O3 CPU must be used with caches"
-            sys.exit(1)
-        if options.cpu_type == "arm_detailed":
-            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:
-        class TmpClass(AtomicSimpleCPU): pass
-        atomic = True
+            fatal("O3/Inorder CPU must be used with caches")
 
+    TmpClass, test_mem_mode = getCPUClass(options.cpu_type)
     CPUClass = None
-    test_mem_mode = 'atomic'
 
-    if not atomic:
-        if options.checkpoint_restore != None:
-            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:
+    if options.checkpoint_restore != None:
+        if options.restore_with_cpu != options.cpu_type:
             CPUClass = TmpClass
-            class TmpClass(AtomicSimpleCPU): pass
-        else:
-            test_mem_mode = 'timing'
+            TmpClass, test_mem_mode = getCPUClass(options.restore_with_cpu)
+    elif options.fast_forward:
+        CPUClass = TmpClass
+        TmpClass = AtomicSimpleCPU
+        test_mem_mode = 'atomic'
 
     return (TmpClass, test_mem_mode, CPUClass)
 
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to