Hoa Nguyen has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/36295 )

Change subject: cpu-simple: Update stats style
......................................................................

cpu-simple: Update stats style

Change-Id: I1e9c7c464f1f7b4b354e9a47c7d974c6806b45da
Signed-off-by: Hoa Nguyen <hoangu...@ucdavis.edu>
---
M src/cpu/simple/atomic.cc
M src/cpu/simple/base.cc
M src/cpu/simple/exec_context.hh
M src/cpu/simple/timing.cc
4 files changed, 219 insertions(+), 302 deletions(-)



diff --git a/src/cpu/simple/atomic.cc b/src/cpu/simple/atomic.cc
index 06607cd..69fdc77 100644
--- a/src/cpu/simple/atomic.cc
+++ b/src/cpu/simple/atomic.cc
@@ -156,7 +156,7 @@

     for (ThreadID tid = 0; tid < numThreads; tid++) {
         if (threadInfo[tid]->thread->status() == ThreadContext::Active) {
-            threadInfo[tid]->notIdleFraction = 1;
+            threadInfo[tid]->execContextStats.notIdleFraction = 1;
             activeThreads.push_back(tid);
             _status = BaseSimpleCPU::Running;

@@ -165,7 +165,7 @@
                 schedule(tickEvent, nextCycle());
             }
         } else {
-            threadInfo[tid]->notIdleFraction = 0;
+            threadInfo[tid]->execContextStats.notIdleFraction = 0;
         }
     }

@@ -226,7 +226,7 @@

     assert(thread_num < numThreads);

-    threadInfo[thread_num]->notIdleFraction = 1;
+    threadInfo[thread_num]->execContextStats.notIdleFraction = 1;
Cycles delta = ticksToCycles(threadInfo[thread_num]->thread->lastActivate - threadInfo[thread_num]->thread->lastSuspend);
     numCycles += delta;
@@ -258,7 +258,7 @@

     assert(_status == BaseSimpleCPU::Running);

-    threadInfo[thread_num]->notIdleFraction = 0;
+    threadInfo[thread_num]->execContextStats.notIdleFraction = 0;

     if (activeThreads.empty()) {
         _status = Idle;
diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index 31d5285..d82db1c 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -164,13 +164,13 @@

     if (!curStaticInst->isMicroop() || curStaticInst->isLastMicroop()) {
         t_info.numInst++;
-        t_info.numInsts++;
+        t_info.execContextStats.numInsts++;

         system->totalNumInsts++;
         t_info.thread->funcExeInst++;
     }
     t_info.numOp++;
-    t_info.numOps++;
+    t_info.execContextStats.numOps++;
 }

 Counter
@@ -214,183 +214,6 @@
     using namespace Stats;

     BaseCPU::regStats();
-
-    for (ThreadID tid = 0; tid < numThreads; tid++) {
-        SimpleExecContext& t_info = *threadInfo[tid];
-
-        std::string thread_str = name();
-        if (numThreads > 1)
-            thread_str += ".thread" + std::to_string(tid);
-
-        t_info.numInsts
-            .name(thread_str + ".committedInsts")
-            .desc("Number of instructions committed")
-            ;
-
-        t_info.numOps
-            .name(thread_str + ".committedOps")
-            .desc("Number of ops (including micro ops) committed")
-            ;
-
-        t_info.numIntAluAccesses
-            .name(thread_str + ".num_int_alu_accesses")
-            .desc("Number of integer alu accesses")
-            ;
-
-        t_info.numFpAluAccesses
-            .name(thread_str + ".num_fp_alu_accesses")
-            .desc("Number of float alu accesses")
-            ;
-
-        t_info.numVecAluAccesses
-            .name(thread_str + ".num_vec_alu_accesses")
-            .desc("Number of vector alu accesses")
-            ;
-
-        t_info.numCallsReturns
-            .name(thread_str + ".num_func_calls")
-            .desc("number of times a function call or return occured")
-            ;
-
-        t_info.numCondCtrlInsts
-            .name(thread_str + ".num_conditional_control_insts")
-            .desc("number of instructions that are conditional controls")
-            ;
-
-        t_info.numIntInsts
-            .name(thread_str + ".num_int_insts")
-            .desc("number of integer instructions")
-            ;
-
-        t_info.numFpInsts
-            .name(thread_str + ".num_fp_insts")
-            .desc("number of float instructions")
-            ;
-
-        t_info.numVecInsts
-            .name(thread_str + ".num_vec_insts")
-            .desc("number of vector instructions")
-            ;
-
-        t_info.numIntRegReads
-            .name(thread_str + ".num_int_register_reads")
-            .desc("number of times the integer registers were read")
-            ;
-
-        t_info.numIntRegWrites
-            .name(thread_str + ".num_int_register_writes")
-            .desc("number of times the integer registers were written")
-            ;
-
-        t_info.numFpRegReads
-            .name(thread_str + ".num_fp_register_reads")
-            .desc("number of times the floating registers were read")
-            ;
-
-        t_info.numFpRegWrites
-            .name(thread_str + ".num_fp_register_writes")
-            .desc("number of times the floating registers were written")
-            ;
-
-        t_info.numVecRegReads
-            .name(thread_str + ".num_vec_register_reads")
-            .desc("number of times the vector registers were read")
-            ;
-
-        t_info.numVecRegWrites
-            .name(thread_str + ".num_vec_register_writes")
-            .desc("number of times the vector registers were written")
-            ;
-
-        t_info.numCCRegReads
-            .name(thread_str + ".num_cc_register_reads")
-            .desc("number of times the CC registers were read")
-            .flags(nozero)
-            ;
-
-        t_info.numCCRegWrites
-            .name(thread_str + ".num_cc_register_writes")
-            .desc("number of times the CC registers were written")
-            .flags(nozero)
-            ;
-
-        t_info.numMemRefs
-            .name(thread_str + ".num_mem_refs")
-            .desc("number of memory refs")
-            ;
-
-        t_info.numStoreInsts
-            .name(thread_str + ".num_store_insts")
-            .desc("Number of store instructions")
-            ;
-
-        t_info.numLoadInsts
-            .name(thread_str + ".num_load_insts")
-            .desc("Number of load instructions")
-            ;
-
-        t_info.notIdleFraction
-            .name(thread_str + ".not_idle_fraction")
-            .desc("Percentage of non-idle cycles")
-            ;
-
-        t_info.idleFraction
-            .name(thread_str + ".idle_fraction")
-            .desc("Percentage of idle cycles")
-            ;
-
-        t_info.numBusyCycles
-            .name(thread_str + ".num_busy_cycles")
-            .desc("Number of busy cycles")
-            ;
-
-        t_info.numIdleCycles
-            .name(thread_str + ".num_idle_cycles")
-            .desc("Number of idle cycles")
-            ;
-
-        t_info.icacheStallCycles
-            .name(thread_str + ".icache_stall_cycles")
-            .desc("ICache total stall cycles")
-            .prereq(t_info.icacheStallCycles)
-            ;
-
-        t_info.dcacheStallCycles
-            .name(thread_str + ".dcache_stall_cycles")
-            .desc("DCache total stall cycles")
-            .prereq(t_info.dcacheStallCycles)
-            ;
-
-        t_info.statExecutedInstType
-            .init(Enums::Num_OpClass)
-            .name(thread_str + ".op_class")
-            .desc("Class of executed instruction")
-            .flags(total | pdf | dist)
-            ;
-
-        for (unsigned i = 0; i < Num_OpClasses; ++i) {
- t_info.statExecutedInstType.subname(i, Enums::OpClassStrings[i]);
-        }
-
-        t_info.idleFraction = constant(1.0) - t_info.notIdleFraction;
-        t_info.numIdleCycles = t_info.idleFraction * numCycles;
-        t_info.numBusyCycles = t_info.notIdleFraction * numCycles;
-
-        t_info.numBranches
-            .name(thread_str + ".Branches")
-            .desc("Number of branches fetched")
-            .prereq(t_info.numBranches);
-
-        t_info.numPredictedBranches
-            .name(thread_str + ".predictedBranches")
-            .desc("Number of branches predicted as taken")
-            .prereq(t_info.numPredictedBranches);
-
-        t_info.numBranchMispred
-            .name(thread_str + ".BranchMispred")
-            .desc("Number of branch mispredictions")
-            .prereq(t_info.numBranchMispred);
-    }
 }

 void
@@ -398,7 +221,7 @@
 {
     BaseCPU::resetStats();
     for (auto &thread_info : threadInfo) {
-        thread_info->notIdleFraction = (_status != Idle);
+        thread_info->execContextStats.notIdleFraction = (_status != Idle);
     }
 }

@@ -575,7 +398,7 @@
                                 curThread));

         if (predict_taken)
-            ++t_info.numPredictedBranches;
+            ++t_info.execContextStats.numPredictedBranches;
     }
 }

@@ -590,7 +413,7 @@
     Addr instAddr = pc.instAddr();

     if (curStaticInst->isMemRef()) {
-        t_info.numMemRefs++;
+        t_info.execContextStats.numMemRefs++;
     }

     if (curStaticInst->isLoad()) {
@@ -598,49 +421,49 @@
     }

     if (curStaticInst->isControl()) {
-        ++t_info.numBranches;
+        ++t_info.execContextStats.numBranches;
     }

     /* Power model statistics */
     //integer alu accesses
     if (curStaticInst->isInteger()){
-        t_info.numIntAluAccesses++;
-        t_info.numIntInsts++;
+        t_info.execContextStats.numIntAluAccesses++;
+        t_info.execContextStats.numIntInsts++;
     }

     //float alu accesses
     if (curStaticInst->isFloating()){
-        t_info.numFpAluAccesses++;
-        t_info.numFpInsts++;
+        t_info.execContextStats.numFpAluAccesses++;
+        t_info.execContextStats.numFpInsts++;
     }

     //vector alu accesses
     if (curStaticInst->isVector()){
-        t_info.numVecAluAccesses++;
-        t_info.numVecInsts++;
+        t_info.execContextStats.numVecAluAccesses++;
+        t_info.execContextStats.numVecInsts++;
     }

     //number of function calls/returns to get window accesses
     if (curStaticInst->isCall() || curStaticInst->isReturn()){
-        t_info.numCallsReturns++;
+        t_info.execContextStats.numCallsReturns++;
     }

     //the number of branch predictions that will be made
     if (curStaticInst->isCondCtrl()){
-        t_info.numCondCtrlInsts++;
+        t_info.execContextStats.numCondCtrlInsts++;
     }

     //result bus acceses
     if (curStaticInst->isLoad()){
-        t_info.numLoadInsts++;
+        t_info.execContextStats.numLoadInsts++;
     }

     if (curStaticInst->isStore() || curStaticInst->isAtomic()){
-        t_info.numStoreInsts++;
+        t_info.execContextStats.numStoreInsts++;
     }
     /* End power model statistics */

-    t_info.statExecutedInstType[curStaticInst->opClass()]++;
+ t_info.execContextStats.statExecutedInstType[curStaticInst->opClass()]++;

     if (FullSystem)
         traceFunctions(instAddr);
@@ -690,7 +513,7 @@
         } else {
             // Mis-predicted branch
branchPred->squash(cur_sn, thread->pcState(), branching, curThread);
-            ++t_info.numBranchMispred;
+            ++t_info.execContextStats.numBranchMispred;
         }
     }
 }
diff --git a/src/cpu/simple/exec_context.hh b/src/cpu/simple/exec_context.hh
index 09b3668..02125b1 100644
--- a/src/cpu/simple/exec_context.hh
+++ b/src/cpu/simple/exec_context.hh
@@ -41,6 +41,8 @@
 #ifndef __CPU_SIMPLE_EXEC_CONTEXT_HH__
 #define __CPU_SIMPLE_EXEC_CONTEXT_HH__

+#include <memory>
+
 #include "arch/registers.hh"
 #include "base/types.hh"
 #include "config/the_isa.hh"
@@ -73,107 +75,199 @@
     TheISA::PCState predPC;

     /** PER-THREAD STATS */
-
-    // Number of simulated instructions
     Counter numInst;
-    Stats::Scalar numInsts;
     Counter numOp;
-    Stats::Scalar numOps;
-
-    // Number of integer alu accesses
-    Stats::Scalar numIntAluAccesses;
-
-    // Number of float alu accesses
-    Stats::Scalar numFpAluAccesses;
-
-    // Number of vector alu accesses
-    Stats::Scalar numVecAluAccesses;
-
-    // Number of function calls/returns
-    Stats::Scalar numCallsReturns;
-
-    // Conditional control instructions;
-    Stats::Scalar numCondCtrlInsts;
-
-    // Number of int instructions
-    Stats::Scalar numIntInsts;
-
-    // Number of float instructions
-    Stats::Scalar numFpInsts;
-
-    // Number of vector instructions
-    Stats::Scalar numVecInsts;
-
-    // Number of integer register file accesses
-    Stats::Scalar numIntRegReads;
-    Stats::Scalar numIntRegWrites;
-
-    // Number of float register file accesses
-    Stats::Scalar numFpRegReads;
-    Stats::Scalar numFpRegWrites;
-
-    // Number of vector register file accesses
-    mutable Stats::Scalar numVecRegReads;
-    Stats::Scalar numVecRegWrites;
-
-    // Number of predicate register file accesses
-    mutable Stats::Scalar numVecPredRegReads;
-    Stats::Scalar numVecPredRegWrites;
-
-    // Number of condition code register file accesses
-    Stats::Scalar numCCRegReads;
-    Stats::Scalar numCCRegWrites;
-
-    // Number of simulated memory references
-    Stats::Scalar numMemRefs;
-    Stats::Scalar numLoadInsts;
-    Stats::Scalar numStoreInsts;
-
-    // Number of idle cycles
-    Stats::Formula numIdleCycles;
-
-    // Number of busy cycles
-    Stats::Formula numBusyCycles;
-
     // Number of simulated loads
     Counter numLoad;
-
-    // Number of idle cycles
-    Stats::Average notIdleFraction;
-    Stats::Formula idleFraction;
-
     // Number of cycles stalled for I-cache responses
-    Stats::Scalar icacheStallCycles;
     Counter lastIcacheStall;
-
     // Number of cycles stalled for D-cache responses
-    Stats::Scalar dcacheStallCycles;
     Counter lastDcacheStall;

-    /// @{
-    /// Total number of branches fetched
-    Stats::Scalar numBranches;
-    /// Number of branches predicted as taken
-    Stats::Scalar numPredictedBranches;
-    /// Number of misprediced branches
-    Stats::Scalar numBranchMispred;
-    /// @}
+    struct ExecContextStats : public Stats::Group {
+        ExecContextStats(BaseSimpleCPU *cpu, SimpleThread *thread)
+            : Stats::Group(cpu,
+ csprintf("thread_%i", thread->threadId()).c_str()),
+              ADD_STAT(numInsts, "Number of instructions committed"),
+              ADD_STAT(numOps, "Number of ops (including micro ops) "
+                               "committed"),
+ ADD_STAT(numIntAluAccesses, "Number of integer alu accesses"),
+              ADD_STAT(numFpAluAccesses, "Number of float alu accesses"),
+              ADD_STAT(numVecAluAccesses, "Number of vector alu accesses"),
+ ADD_STAT(numCallsReturns, "Number of times a function call or "
+                                        "return occured"),
+              ADD_STAT(numCondCtrlInsts, "Number of instructions that are "
+                                         "conditional controls"),
+              ADD_STAT(numIntInsts, "Number of integer instructions"),
+              ADD_STAT(numFpInsts, "Number of float instructions"),
+              ADD_STAT(numVecInsts, "Number of vector instructions"),
+ ADD_STAT(numIntRegReads, "Number of times the integer registers "
+                                       "were read"),
+              ADD_STAT(numIntRegWrites, "Number of times the integer "
+                                        "registers were written"),
+ ADD_STAT(numFpRegReads, "Number of times the floating registers "
+                                      "were read"),
+              ADD_STAT(numFpRegWrites, "Number of times the floating "
+                                       "registers were written"),
+ ADD_STAT(numVecRegReads, "Number of times the vector registers "
+                                       "were read"),
+ ADD_STAT(numVecRegWrites, "Number of times the vector registers "
+                                        "were written"),
+              ADD_STAT(numVecPredRegReads, "Number of times the predicate "
+                                           "registers were read"),
+ ADD_STAT(numVecPredRegWrites, "Number of times the predicate "
+                                            "registers were written"),
+ ADD_STAT(numCCRegReads, "Number of times the CC registers were "
+                                      "read"),
+ ADD_STAT(numCCRegWrites, "Number of times the CC registers were "
+                                       "written"),
+              ADD_STAT(numMemRefs, "Number of memory refs"),
+              ADD_STAT(numLoadInsts, "Number of load instructions"),
+              ADD_STAT(numStoreInsts, "Number of store instructions"),
+              ADD_STAT(numIdleCycles, "Number of idle cycles"),
+              ADD_STAT(numBusyCycles, "Number of busy cycles"),
+              ADD_STAT(notIdleFraction, "Percentage of non-idle cycles"),
+              ADD_STAT(idleFraction, "Percentage of idle cycles"),
+              ADD_STAT(icacheStallCycles, "ICache total stall cycles"),
+              ADD_STAT(dcacheStallCycles, "DCache total stall cycles"),
+              ADD_STAT(numBranches, "Number of branches fetched"),
+ ADD_STAT(numPredictedBranches, "Number of branches predicted as"
+                                             " taken"),
+ ADD_STAT(numBranchMispred, "Number of branch mispredictions"), + ADD_STAT(statExecutedInstType, "Class of executed instruction.")
+        {
+            using namespace Stats;

-   // Instruction mix histogram by OpClass
-   Stats::Vector statExecutedInstType;
+            numCCRegReads
+                .flags(nozero);
+
+            numCCRegWrites
+                .flags(nozero);
+
+            icacheStallCycles
+                .prereq(icacheStallCycles);
+
+            dcacheStallCycles
+                .prereq(dcacheStallCycles);
+
+            statExecutedInstType
+                .init(Enums::Num_OpClass)
+                .flags(total | pdf | dist);
+
+            for (unsigned i = 0; i < Num_OpClasses; ++i) {
+                statExecutedInstType.subname(i, Enums::OpClassStrings[i]);
+            }
+
+            idleFraction = constant(1.0) - notIdleFraction;
+            numIdleCycles = idleFraction * cpu->numCycles;
+            numBusyCycles = notIdleFraction * cpu->numCycles;
+
+            numBranches
+                .prereq(numBranches);
+
+            numPredictedBranches
+                .prereq(numPredictedBranches);
+
+            numBranchMispred
+                .prereq(numBranchMispred);
+        }
+
+        // Number of simulated instructions
+        Stats::Scalar numInsts;
+        Stats::Scalar numOps;
+
+        // Number of integer alu accesses
+        Stats::Scalar numIntAluAccesses;
+
+        // Number of float alu accesses
+        Stats::Scalar numFpAluAccesses;
+
+        // Number of vector alu accesses
+        Stats::Scalar numVecAluAccesses;
+
+        // Number of function calls/returns
+        Stats::Scalar numCallsReturns;
+
+        // Conditional control instructions;
+        Stats::Scalar numCondCtrlInsts;
+
+        // Number of int instructions
+        Stats::Scalar numIntInsts;
+
+        // Number of float instructions
+        Stats::Scalar numFpInsts;
+
+        // Number of vector instructions
+        Stats::Scalar numVecInsts;
+
+        // Number of integer register file accesses
+        Stats::Scalar numIntRegReads;
+        Stats::Scalar numIntRegWrites;
+
+        // Number of float register file accesses
+        Stats::Scalar numFpRegReads;
+        Stats::Scalar numFpRegWrites;
+
+        // Number of vector register file accesses
+        mutable Stats::Scalar numVecRegReads;
+        Stats::Scalar numVecRegWrites;
+
+        // Number of predicate register file accesses
+        mutable Stats::Scalar numVecPredRegReads;
+        Stats::Scalar numVecPredRegWrites;
+
+        // Number of condition code register file accesses
+        Stats::Scalar numCCRegReads;
+        Stats::Scalar numCCRegWrites;
+
+        // Number of simulated memory references
+        Stats::Scalar numMemRefs;
+        Stats::Scalar numLoadInsts;
+        Stats::Scalar numStoreInsts;
+
+        // Number of idle cycles
+        Stats::Formula numIdleCycles;
+
+        // Number of busy cycles
+        Stats::Formula numBusyCycles;
+
+        // Number of idle cycles
+        Stats::Average notIdleFraction;
+        Stats::Formula idleFraction;
+
+        // Number of cycles stalled for I-cache responses
+        Stats::Scalar icacheStallCycles;
+
+        // Number of cycles stalled for D-cache responses
+        Stats::Scalar dcacheStallCycles;
+
+        /// @{
+        /// Total number of branches fetched
+        Stats::Scalar numBranches;
+        /// Number of branches predicted as taken
+        Stats::Scalar numPredictedBranches;
+        /// Number of misprediced branches
+        Stats::Scalar numBranchMispred;
+        /// @}
+
+        // Instruction mix histogram by OpClass
+        Stats::Vector statExecutedInstType;
+
+    } execContextStats;

   public:
     /** Constructor */
     SimpleExecContext(BaseSimpleCPU* _cpu, SimpleThread* _thread)
         : cpu(_cpu), thread(_thread), fetchOffset(0), stayAtPC(false),
- numInst(0), numOp(0), numLoad(0), lastIcacheStall(0), lastDcacheStall(0)
+        numInst(0), numOp(0), numLoad(0), lastIcacheStall(0),
+        lastDcacheStall(0), execContextStats(cpu, thread)
     { }

     /** Reads an integer register. */
     RegVal
     readIntRegOperand(const StaticInst *si, int idx) override
     {
-        numIntRegReads++;
+        execContextStats.numIntRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isIntReg());
         return thread->readIntReg(reg.index());
@@ -183,7 +277,7 @@
     void
     setIntRegOperand(const StaticInst *si, int idx, RegVal val) override
     {
-        numIntRegWrites++;
+        execContextStats.numIntRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isIntReg());
         thread->setIntReg(reg.index(), val);
@@ -194,7 +288,7 @@
     RegVal
     readFloatRegOperandBits(const StaticInst *si, int idx) override
     {
-        numFpRegReads++;
+        execContextStats.numFpRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isFloatReg());
         return thread->readFloatReg(reg.index());
@@ -205,7 +299,7 @@
     void
setFloatRegOperandBits(const StaticInst *si, int idx, RegVal val) override
     {
-        numFpRegWrites++;
+        execContextStats.numFpRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isFloatReg());
         thread->setFloatReg(reg.index(), val);
@@ -215,7 +309,7 @@
     const VecRegContainer &
     readVecRegOperand(const StaticInst *si, int idx) const override
     {
-        numVecRegReads++;
+        execContextStats.numVecRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isVecReg());
         return thread->readVecReg(reg);
@@ -225,7 +319,7 @@
     VecRegContainer &
     getWritableVecRegOperand(const StaticInst *si, int idx) override
     {
-        numVecRegWrites++;
+        execContextStats.numVecRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecReg());
         return thread->getWritableVecReg(reg);
@@ -236,7 +330,7 @@
     setVecRegOperand(const StaticInst *si, int idx,
                      const VecRegContainer& val) override
     {
-        numVecRegWrites++;
+        execContextStats.numVecRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecReg());
         thread->setVecReg(reg, val);
@@ -249,7 +343,7 @@
     VecLaneT<VecElem, true>
     readVecLaneOperand(const StaticInst *si, int idx) const
     {
-        numVecRegReads++;
+        execContextStats.numVecRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isVecReg());
         return thread->readVecLane<VecElem>(reg);
@@ -284,7 +378,7 @@
     setVecLaneOperandT(const StaticInst *si, int idx,
             const LD& val)
     {
-        numVecRegWrites++;
+        execContextStats.numVecRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecReg());
         return thread->setVecLane(reg, val);
@@ -315,7 +409,7 @@
     VecElem
     readVecElemOperand(const StaticInst *si, int idx) const override
     {
-        numVecRegReads++;
+        execContextStats.numVecRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isVecElem());
         return thread->readVecElem(reg);
@@ -326,7 +420,7 @@
     setVecElemOperand(const StaticInst *si, int idx,
                       const VecElem val) override
     {
-        numVecRegWrites++;
+        execContextStats.numVecRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecElem());
         thread->setVecElem(reg, val);
@@ -335,7 +429,7 @@
     const VecPredRegContainer&
     readVecPredRegOperand(const StaticInst *si, int idx) const override
     {
-        numVecPredRegReads++;
+        execContextStats.numVecPredRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isVecPredReg());
         return thread->readVecPredReg(reg);
@@ -344,7 +438,7 @@
     VecPredRegContainer&
     getWritableVecPredRegOperand(const StaticInst *si, int idx) override
     {
-        numVecPredRegWrites++;
+        execContextStats.numVecPredRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecPredReg());
         return thread->getWritableVecPredReg(reg);
@@ -354,7 +448,7 @@
     setVecPredRegOperand(const StaticInst *si, int idx,
                          const VecPredRegContainer& val) override
     {
-        numVecPredRegWrites++;
+        execContextStats.numVecPredRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isVecPredReg());
         thread->setVecPredReg(reg, val);
@@ -363,7 +457,7 @@
     RegVal
     readCCRegOperand(const StaticInst *si, int idx) override
     {
-        numCCRegReads++;
+        execContextStats.numCCRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isCCReg());
         return thread->readCCReg(reg.index());
@@ -372,7 +466,7 @@
     void
     setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
     {
-        numCCRegWrites++;
+        execContextStats.numCCRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isCCReg());
         thread->setCCReg(reg.index(), val);
@@ -381,7 +475,7 @@
     RegVal
     readMiscRegOperand(const StaticInst *si, int idx) override
     {
-        numIntRegReads++;
+        execContextStats.numIntRegReads++;
         const RegId& reg = si->srcRegIdx(idx);
         assert(reg.isMiscReg());
         return thread->readMiscReg(reg.index());
@@ -390,7 +484,7 @@
     void
     setMiscRegOperand(const StaticInst *si, int idx, RegVal val) override
     {
-        numIntRegWrites++;
+        execContextStats.numIntRegWrites++;
         const RegId& reg = si->destRegIdx(idx);
         assert(reg.isMiscReg());
         thread->setMiscReg(reg.index(), val);
@@ -403,7 +497,7 @@
     RegVal
     readMiscReg(int misc_reg) override
     {
-        numIntRegReads++;
+        execContextStats.numIntRegReads++;
         return thread->readMiscReg(misc_reg);
     }

@@ -414,7 +508,7 @@
     void
     setMiscReg(int misc_reg, RegVal val) override
     {
-        numIntRegWrites++;
+        execContextStats.numIntRegWrites++;
         thread->setMiscReg(misc_reg, val);
     }

diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc
index ac28d66..0b60506 100644
--- a/src/cpu/simple/timing.cc
+++ b/src/cpu/simple/timing.cc
@@ -131,7 +131,7 @@

     for (ThreadID tid = 0; tid < numThreads; tid++) {
         if (threadInfo[tid]->thread->status() == ThreadContext::Active) {
-            threadInfo[tid]->notIdleFraction = 1;
+            threadInfo[tid]->execContextStats.notIdleFraction = 1;

             activeThreads.push_back(tid);

@@ -142,7 +142,7 @@
                 schedule(fetchEvent, nextCycle());
             }
         } else {
-            threadInfo[tid]->notIdleFraction = 0;
+            threadInfo[tid]->execContextStats.notIdleFraction = 0;
         }
     }

@@ -214,7 +214,7 @@

     assert(thread_num < numThreads);

-    threadInfo[thread_num]->notIdleFraction = 1;
+    threadInfo[thread_num]->execContextStats.notIdleFraction = 1;
     if (_status == BaseSimpleCPU::Idle)
         _status = BaseSimpleCPU::Running;

@@ -248,7 +248,7 @@

     assert(_status == BaseSimpleCPU::Running);

-    threadInfo[thread_num]->notIdleFraction = 0;
+    threadInfo[thread_num]->execContextStats.notIdleFraction = 0;

     if (activeThreads.empty()) {
         _status = Idle;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/36295
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I1e9c7c464f1f7b4b354e9a47c7d974c6806b45da
Gerrit-Change-Number: 36295
Gerrit-PatchSet: 1
Gerrit-Owner: Hoa Nguyen <hoangu...@ucdavis.edu>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to