gem5-dev@gem5.org

The gem5 Developer List

View all threads

[S] Change in gem5/gem5[develop]: cpu-o3: Copy O3 IEW stats to BaseCPU::ExecuteCPUStats

BB
Bobby Bruce (Gerrit)
Mon, May 8, 2023 7:09 PM

Bobby Bruce has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/69103?usp=email )

Change subject: cpu-o3: Copy O3 IEW stats to BaseCPU::ExecuteCPUStats
......................................................................

cpu-o3: Copy O3 IEW stats to BaseCPU::ExecuteCPUStats

Move numInsts, numBranches, numNop, numRefs, numLoadInsts, numRate to
Base. Merged numRefs into numMemRefs of ExecuteCPUStats. Renamed
numRate to instRate. Updated formatting in ExecuteCPUStats group.

Change-Id: Ibe4c121ac1e04f1c989d4786a52acd5878a43df0
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69103
Tested-by: kokoro noreply+kokoro@google.com
Reviewed-by: Bobby Bruce bbruce@ucdavis.edu
Maintainer: Bobby Bruce bbruce@ucdavis.edu

M src/cpu/base.cc
M src/cpu/base.hh
M src/cpu/o3/iew.cc
3 files changed, 46 insertions(+), 2 deletions(-)

Approvals:
Bobby Bruce: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass

diff --git a/src/cpu/base.cc b/src/cpu/base.cc
index 7c19307..e5a661b 100644
--- a/src/cpu/base.cc
+++ b/src/cpu/base.cc
@@ -203,7 +203,12 @@
baseStats.numCycles;
fetchStats.emplace_back(fetchStatptr);

  •    executeStats.emplace_back(new ExecuteCPUStats(this, i));
    
  •    // create executeStat object for thread i and set rate formulas
    
  •    ExecuteCPUStats* executeStatptr = new ExecuteCPUStats(this, i);
    
  •    executeStatptr->instRate = executeStatptr->numInsts /
    
  •        baseStats.numCycles;
    
  •    executeStats.emplace_back(executeStatptr);
    
  •     // create commitStat object for thread i and set ipc, cpi formulas
        CommitCPUStats* commitStatptr = new CommitCPUStats(this, i);
        commitStatptr->ipc = commitStatptr->numInsts / baseStats.numCycles;
    

@@ -899,6 +904,19 @@
BaseCPU::
ExecuteCPUStats::ExecuteCPUStats(statistics::Group *parent, int thread_id)
: statistics::Group(parent, csprintf("executeStats%i",
thread_id).c_str()),

  • ADD_STAT(numInsts, statistics::units::Count::get(),
  •         "Number of executed instructions"),
    
  • ADD_STAT(numNop, statistics::units::Count::get(),
  •         "Number of nop insts executed"),
    
  • ADD_STAT(numBranches, statistics::units::Count::get(),
  •         "Number of branches executed"),
    
  • ADD_STAT(numLoadInsts, statistics::units::Count::get(),
  •         "Number of load instructions executed"),
    
  • ADD_STAT(numStoreInsts, statistics::units::Count::get(),
  •         "Number of stores executed"),
    
  • ADD_STAT(instRate, statistics::units::Rate<
  •            statistics::units::Count, statistics::units::Cycle>::get(),
    
  •         "Inst execution rate"),
    ADD_STAT(dcacheStallCycles, statistics::units::Cycle::get(),
             "DCache total stall cycles"),
    ADD_STAT(numCCRegReads, statistics::units::Count::get(),
    

@@ -937,6 +955,8 @@
"Number of ops (including micro ops) which were discarded
before "
"commit")
{

  • numStoreInsts = numMemRefs - numLoadInsts;
  • dcacheStallCycles
        .prereq(dcacheStallCycles);
    numCCRegReads
    

diff --git a/src/cpu/base.hh b/src/cpu/base.hh
index 946ea6b..3976b66 100644
--- a/src/cpu/base.hh
+++ b/src/cpu/base.hh
@@ -717,6 +717,19 @@
{
ExecuteCPUStats(statistics::Group *parent, int thread_id);

  •    /* Stat for total number of executed instructions */
    
  •    statistics::Scalar numInsts;
    
  •    /* Number of executed nops */
    
  •    statistics::Scalar numNop;
    
  •    /* Number of executed branches */
    
  •    statistics::Scalar numBranches;
    
  •    /* Stat for total number of executed load instructions */
    
  •    statistics::Scalar numLoadInsts;
    
  •    /* Number of executed store instructions */
    
  •    statistics::Formula numStoreInsts;
    
  •    /* Number of instructions executed per cycle */
    
  •    statistics::Formula instRate;
    
  •     /* Number of cycles stalled for D-cache responses */
        statistics::Scalar dcacheStallCycles;
    

diff --git a/src/cpu/o3/iew.cc b/src/cpu/o3/iew.cc
index e67bc69..1b3598c 100644
--- a/src/cpu/o3/iew.cc
+++ b/src/cpu/o3/iew.cc
@@ -1053,7 +1053,9 @@

          instQueue.recordProducer(inst);
  •        // update both old and new stats
            iewStats.executedInstStats.numNop[tid]++;
    
  •        cpu->executeStats[tid]->numNop++;
    
            add_to_iq = false;
        } else {
    

@@ -1561,7 +1563,9 @@
{
ThreadID tid = inst->threadNumber;

  • // update both old and new stats
    iewStats.executedInstStats.numInsts++;
  • cpu->executeStats[tid]->numInsts++;

#if TRACING_ON
if (debug::O3PipeView) {
@@ -1572,17 +1576,24 @@
//
//  Control operations
//

  • if (inst->isControl())
  • if (inst->isControl()) {

  •    // update both old and new stats
        iewStats.executedInstStats.numBranches[tid]++;
    
  •    cpu->executeStats[tid]->numBranches++;
    
  • }

    //
    //  Memory operations
    //
    if (inst->isMemRef()) {
    
  •    // update both old and new stats
        iewStats.executedInstStats.numRefs[tid]++;
    
  •    cpu->executeStats[tid]->numMemRefs++;
    
        if (inst->isLoad()) {
    
  •        // update both old and new stats
            iewStats.executedInstStats.numLoadInsts[tid]++;
    
  •        cpu->executeStats[tid]->numLoadInsts++;
        }
    }
    

    }

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

Gerrit-MessageType: merged
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ibe4c121ac1e04f1c989d4786a52acd5878a43df0
Gerrit-Change-Number: 69103
Gerrit-PatchSet: 11
Gerrit-Owner: Melissa Jost melissakjost@gmail.com
Gerrit-Reviewer: Bobby Bruce bbruce@ucdavis.edu
Gerrit-Reviewer: kokoro noreply+kokoro@google.com

Bobby Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/69103?usp=email ) Change subject: cpu-o3: Copy O3 IEW stats to BaseCPU::ExecuteCPUStats ...................................................................... cpu-o3: Copy O3 IEW stats to BaseCPU::ExecuteCPUStats Move numInsts, numBranches, numNop, numRefs, numLoadInsts, numRate to Base. Merged numRefs into numMemRefs of ExecuteCPUStats. Renamed numRate to instRate. Updated formatting in ExecuteCPUStats group. Change-Id: Ibe4c121ac1e04f1c989d4786a52acd5878a43df0 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69103 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu> Maintainer: Bobby Bruce <bbruce@ucdavis.edu> --- M src/cpu/base.cc M src/cpu/base.hh M src/cpu/o3/iew.cc 3 files changed, 46 insertions(+), 2 deletions(-) Approvals: Bobby Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/cpu/base.cc b/src/cpu/base.cc index 7c19307..e5a661b 100644 --- a/src/cpu/base.cc +++ b/src/cpu/base.cc @@ -203,7 +203,12 @@ baseStats.numCycles; fetchStats.emplace_back(fetchStatptr); - executeStats.emplace_back(new ExecuteCPUStats(this, i)); + // create executeStat object for thread i and set rate formulas + ExecuteCPUStats* executeStatptr = new ExecuteCPUStats(this, i); + executeStatptr->instRate = executeStatptr->numInsts / + baseStats.numCycles; + executeStats.emplace_back(executeStatptr); + // create commitStat object for thread i and set ipc, cpi formulas CommitCPUStats* commitStatptr = new CommitCPUStats(this, i); commitStatptr->ipc = commitStatptr->numInsts / baseStats.numCycles; @@ -899,6 +904,19 @@ BaseCPU:: ExecuteCPUStats::ExecuteCPUStats(statistics::Group *parent, int thread_id) : statistics::Group(parent, csprintf("executeStats%i", thread_id).c_str()), + ADD_STAT(numInsts, statistics::units::Count::get(), + "Number of executed instructions"), + ADD_STAT(numNop, statistics::units::Count::get(), + "Number of nop insts executed"), + ADD_STAT(numBranches, statistics::units::Count::get(), + "Number of branches executed"), + ADD_STAT(numLoadInsts, statistics::units::Count::get(), + "Number of load instructions executed"), + ADD_STAT(numStoreInsts, statistics::units::Count::get(), + "Number of stores executed"), + ADD_STAT(instRate, statistics::units::Rate< + statistics::units::Count, statistics::units::Cycle>::get(), + "Inst execution rate"), ADD_STAT(dcacheStallCycles, statistics::units::Cycle::get(), "DCache total stall cycles"), ADD_STAT(numCCRegReads, statistics::units::Count::get(), @@ -937,6 +955,8 @@ "Number of ops (including micro ops) which were discarded before " "commit") { + numStoreInsts = numMemRefs - numLoadInsts; + dcacheStallCycles .prereq(dcacheStallCycles); numCCRegReads diff --git a/src/cpu/base.hh b/src/cpu/base.hh index 946ea6b..3976b66 100644 --- a/src/cpu/base.hh +++ b/src/cpu/base.hh @@ -717,6 +717,19 @@ { ExecuteCPUStats(statistics::Group *parent, int thread_id); + /* Stat for total number of executed instructions */ + statistics::Scalar numInsts; + /* Number of executed nops */ + statistics::Scalar numNop; + /* Number of executed branches */ + statistics::Scalar numBranches; + /* Stat for total number of executed load instructions */ + statistics::Scalar numLoadInsts; + /* Number of executed store instructions */ + statistics::Formula numStoreInsts; + /* Number of instructions executed per cycle */ + statistics::Formula instRate; + /* Number of cycles stalled for D-cache responses */ statistics::Scalar dcacheStallCycles; diff --git a/src/cpu/o3/iew.cc b/src/cpu/o3/iew.cc index e67bc69..1b3598c 100644 --- a/src/cpu/o3/iew.cc +++ b/src/cpu/o3/iew.cc @@ -1053,7 +1053,9 @@ instQueue.recordProducer(inst); + // update both old and new stats iewStats.executedInstStats.numNop[tid]++; + cpu->executeStats[tid]->numNop++; add_to_iq = false; } else { @@ -1561,7 +1563,9 @@ { ThreadID tid = inst->threadNumber; + // update both old and new stats iewStats.executedInstStats.numInsts++; + cpu->executeStats[tid]->numInsts++; #if TRACING_ON if (debug::O3PipeView) { @@ -1572,17 +1576,24 @@ // // Control operations // - if (inst->isControl()) + if (inst->isControl()) { + // update both old and new stats iewStats.executedInstStats.numBranches[tid]++; + cpu->executeStats[tid]->numBranches++; + } // // Memory operations // if (inst->isMemRef()) { + // update both old and new stats iewStats.executedInstStats.numRefs[tid]++; + cpu->executeStats[tid]->numMemRefs++; if (inst->isLoad()) { + // update both old and new stats iewStats.executedInstStats.numLoadInsts[tid]++; + cpu->executeStats[tid]->numLoadInsts++; } } } -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/69103?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Ibe4c121ac1e04f1c989d4786a52acd5878a43df0 Gerrit-Change-Number: 69103 Gerrit-PatchSet: 11 Gerrit-Owner: Melissa Jost <melissakjost@gmail.com> Gerrit-Reviewer: Bobby Bruce <bbruce@ucdavis.edu> Gerrit-Reviewer: kokoro <noreply+kokoro@google.com>