configs/inorder: add options for switch-on-miss to inorder cpu
authorKorey Sewell <ksewell@umich.edu>
Sun, 31 Jan 2010 23:25:13 +0000 (18:25 -0500)
committerKorey Sewell <ksewell@umich.edu>
Sun, 31 Jan 2010 23:25:13 +0000 (18:25 -0500)
src/cpu/inorder/InOrderCPU.py
src/cpu/inorder/cpu.cc
src/cpu/inorder/cpu.hh

index a0b0466a70922168bf201acf39e6baee4b897889..d6db346d4bbd8467ad0c54579d93f8aaad55848c 100644 (file)
@@ -30,10 +30,15 @@ from m5.params import *
 from m5.proxy import *
 from BaseCPU import BaseCPU
 
+class ThreadModel(Enum):
+    vals = ['Single', 'SMT', 'SwitchOnCacheMiss']
+
 class InOrderCPU(BaseCPU):
     type = 'InOrderCPU'
     activity = Param.Unsigned(0, "Initial count")
 
+    threadModel = Param.ThreadModel('SMT', "Multithreading model (SE-MODE only)")
+    
     cachePorts = Param.Unsigned(2, "Cache Ports")
     stageWidth = Param.Unsigned(1, "Stage width")
 
index 38f6b4eed3177ff97640f4f5699d264eebd80c08..a1e6c9c8686a087c22755048c9bc38e4a62cb95c 100644 (file)
@@ -197,7 +197,7 @@ InOrderCPU::InOrderCPU(Params *params)
       deferRegistration(false/*params->deferRegistration*/),
       stageTracing(params->stageTracing),
       numVirtProcs(1)
-{
+{    
     ThreadID active_threads;
     cpu_params = params;
 
@@ -216,6 +216,15 @@ InOrderCPU::InOrderCPU(Params *params)
               "in your InOrder implementation or "
               "edit your workload size.");
     }
+
+    if (active_threads > 1) {
+        threadModel = (InOrderCPU::ThreadModel) params->threadModel;
+    } else {
+        threadModel = Single;
+    }
+     
+        
+    
 #endif
 
     // Bind the fetch & data ports from the resource pool.
index 463ca54458126033aee194ae6f0aa0fb4ccc8452..804054f8cce8f09449305d0c4999eb3f39846807 100644 (file)
@@ -100,6 +100,15 @@ class InOrderCPU : public BaseCPU
     /** Type of core that this is */
     std::string coreType;
 
+    // Only need for SE MODE
+    enum ThreadModel {
+        Single,
+        SMT,
+        SwitchOnCacheMiss
+    };
+    
+    ThreadModel threadModel;
+
     int readCpuId() { return cpu_id; }
 
     void setCpuId(int val) { cpu_id = val; }
@@ -117,7 +126,6 @@ class InOrderCPU : public BaseCPU
 
     /** Overall CPU status. */
     Status _status;
-
   private:
     /** Define TickEvent for the CPU */
     class TickEvent : public Event