cpu-o3: Move O3 IEW stats to BaseCPU::ExecuteCPUStats
Moved 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: I1fd3a989d917eb2ffaa865b067b80e266d6f55bc Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67395 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu> Maintainer: Bobby Bruce <bbruce@ucdavis.edu>
This commit is contained in:
committed by
Bobby Bruce
parent
1c4cc8dbd0
commit
0974fe6f24
@@ -203,7 +203,11 @@ BaseCPU::BaseCPU(const Params &p, bool is_checker)
|
||||
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);
|
||||
@@ -900,6 +904,19 @@ FetchCPUStats::FetchCPUStats(statistics::Group *parent, int thread_id)
|
||||
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(),
|
||||
@@ -938,36 +955,38 @@ ExecuteCPUStats::ExecuteCPUStats(statistics::Group *parent, int thread_id)
|
||||
"Number of ops (including micro ops) which were discarded before "
|
||||
"commit")
|
||||
{
|
||||
numStoreInsts = numMemRefs - numLoadInsts;
|
||||
|
||||
dcacheStallCycles
|
||||
.prereq(dcacheStallCycles);
|
||||
.prereq(dcacheStallCycles);
|
||||
numCCRegReads
|
||||
.prereq(numCCRegReads)
|
||||
.flags(statistics::nozero);
|
||||
.prereq(numCCRegReads)
|
||||
.flags(statistics::nozero);
|
||||
numCCRegWrites
|
||||
.prereq(numCCRegWrites)
|
||||
.flags(statistics::nozero);
|
||||
.prereq(numCCRegWrites)
|
||||
.flags(statistics::nozero);
|
||||
numFpAluAccesses
|
||||
.prereq(numFpAluAccesses);
|
||||
.prereq(numFpAluAccesses);
|
||||
numFpRegReads
|
||||
.prereq(numFpRegReads);
|
||||
.prereq(numFpRegReads);
|
||||
numIntAluAccesses
|
||||
.prereq(numIntAluAccesses);
|
||||
.prereq(numIntAluAccesses);
|
||||
numIntRegReads
|
||||
.prereq(numIntRegReads);
|
||||
.prereq(numIntRegReads);
|
||||
numIntRegWrites
|
||||
.prereq(numIntRegWrites);
|
||||
.prereq(numIntRegWrites);
|
||||
numMiscRegReads
|
||||
.prereq(numMiscRegReads);
|
||||
.prereq(numMiscRegReads);
|
||||
numMiscRegWrites
|
||||
.prereq(numMiscRegWrites);
|
||||
.prereq(numMiscRegWrites);
|
||||
numVecPredRegReads
|
||||
.prereq(numVecPredRegReads);
|
||||
.prereq(numVecPredRegReads);
|
||||
numVecPredRegWrites
|
||||
.prereq(numVecPredRegWrites);
|
||||
.prereq(numVecPredRegWrites);
|
||||
numVecRegReads
|
||||
.prereq(numVecRegReads);
|
||||
.prereq(numVecRegReads);
|
||||
numVecRegWrites
|
||||
.prereq(numVecRegWrites);
|
||||
.prereq(numVecRegWrites);
|
||||
}
|
||||
|
||||
BaseCPU::
|
||||
|
||||
@@ -716,6 +716,19 @@ class BaseCPU : public ClockedObject
|
||||
{
|
||||
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;
|
||||
|
||||
|
||||
@@ -217,52 +217,14 @@ IEW::IEWStats::IEWStats(CPU *cpu)
|
||||
|
||||
IEW::IEWStats::ExecutedInstStats::ExecutedInstStats(CPU *cpu)
|
||||
: statistics::Group(cpu),
|
||||
ADD_STAT(numInsts, statistics::units::Count::get(),
|
||||
"Number of executed instructions"),
|
||||
ADD_STAT(numLoadInsts, statistics::units::Count::get(),
|
||||
"Number of load instructions executed"),
|
||||
ADD_STAT(numSquashedInsts, statistics::units::Count::get(),
|
||||
"Number of squashed instructions skipped in execute"),
|
||||
ADD_STAT(numSwp, statistics::units::Count::get(),
|
||||
"Number of swp insts executed"),
|
||||
ADD_STAT(numNop, statistics::units::Count::get(),
|
||||
"Number of nop insts executed"),
|
||||
ADD_STAT(numRefs, statistics::units::Count::get(),
|
||||
"Number of memory reference insts executed"),
|
||||
ADD_STAT(numBranches, statistics::units::Count::get(),
|
||||
"Number of branches executed"),
|
||||
ADD_STAT(numStoreInsts, statistics::units::Count::get(),
|
||||
"Number of stores executed"),
|
||||
ADD_STAT(numRate, statistics::units::Rate<
|
||||
statistics::units::Count, statistics::units::Cycle>::get(),
|
||||
"Inst execution rate", numInsts / cpu->baseStats.numCycles)
|
||||
"Number of swp insts executed")
|
||||
{
|
||||
numLoadInsts
|
||||
.init(cpu->numThreads)
|
||||
.flags(statistics::total);
|
||||
|
||||
numSwp
|
||||
.init(cpu->numThreads)
|
||||
.flags(statistics::total);
|
||||
|
||||
numNop
|
||||
.init(cpu->numThreads)
|
||||
.flags(statistics::total);
|
||||
|
||||
numRefs
|
||||
.init(cpu->numThreads)
|
||||
.flags(statistics::total);
|
||||
|
||||
numBranches
|
||||
.init(cpu->numThreads)
|
||||
.flags(statistics::total);
|
||||
|
||||
numStoreInsts
|
||||
.flags(statistics::total);
|
||||
numStoreInsts = numRefs - numLoadInsts;
|
||||
|
||||
numRate
|
||||
.flags(statistics::total);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1053,7 +1015,7 @@ IEW::dispatchInsts(ThreadID tid)
|
||||
|
||||
instQueue.recordProducer(inst);
|
||||
|
||||
iewStats.executedInstStats.numNop[tid]++;
|
||||
cpu->executeStats[tid]->numNop++;
|
||||
|
||||
add_to_iq = false;
|
||||
} else {
|
||||
@@ -1561,7 +1523,7 @@ IEW::updateExeInstStats(const DynInstPtr& inst)
|
||||
{
|
||||
ThreadID tid = inst->threadNumber;
|
||||
|
||||
iewStats.executedInstStats.numInsts++;
|
||||
cpu->executeStats[tid]->numInsts++;
|
||||
|
||||
#if TRACING_ON
|
||||
if (debug::O3PipeView) {
|
||||
@@ -1573,16 +1535,16 @@ IEW::updateExeInstStats(const DynInstPtr& inst)
|
||||
// Control operations
|
||||
//
|
||||
if (inst->isControl())
|
||||
iewStats.executedInstStats.numBranches[tid]++;
|
||||
cpu->executeStats[tid]->numBranches++;
|
||||
|
||||
//
|
||||
// Memory operations
|
||||
//
|
||||
if (inst->isMemRef()) {
|
||||
iewStats.executedInstStats.numRefs[tid]++;
|
||||
cpu->executeStats[tid]->numMemRefs++;
|
||||
|
||||
if (inst->isLoad()) {
|
||||
iewStats.executedInstStats.numLoadInsts[tid]++;
|
||||
cpu->executeStats[tid]->numLoadInsts++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -455,25 +455,11 @@ class IEW
|
||||
{
|
||||
ExecutedInstStats(CPU *cpu);
|
||||
|
||||
/** Stat for total number of executed instructions. */
|
||||
statistics::Scalar numInsts;
|
||||
/** Stat for total number of executed load instructions. */
|
||||
statistics::Vector numLoadInsts;
|
||||
/** Stat for total number of squashed instructions skipped at
|
||||
* execute. */
|
||||
statistics::Scalar numSquashedInsts;
|
||||
/** Number of executed software prefetches. */
|
||||
statistics::Vector numSwp;
|
||||
/** Number of executed nops. */
|
||||
statistics::Vector numNop;
|
||||
/** Number of executed meomory references. */
|
||||
statistics::Vector numRefs;
|
||||
/** Number of executed branches. */
|
||||
statistics::Vector numBranches;
|
||||
/** Number of executed store instructions. */
|
||||
statistics::Formula numStoreInsts;
|
||||
/** Number of instructions executed per cycle. */
|
||||
statistics::Formula numRate;
|
||||
} executedInstStats;
|
||||
|
||||
/** Number of instructions sent to commit. */
|
||||
|
||||
Reference in New Issue
Block a user