From e2f01afff3b80f945a43ba4a066c35c2c72443ca Mon Sep 17 00:00:00 2001 From: eavivi Date: Wed, 2 Sep 2020 10:35:27 -0700 Subject: [PATCH] cpu-minor: convert fetch2 to new style stats Change-Id: Idfe0f1f256c93209fe51140b9cab3b454153c597 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33975 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- src/cpu/minor/fetch2.cc | 73 ++++++++++++++++++--------------------- src/cpu/minor/fetch2.hh | 19 +++++----- src/cpu/minor/pipeline.cc | 8 ----- src/cpu/minor/pipeline.hh | 3 -- 4 files changed, 44 insertions(+), 59 deletions(-) diff --git a/src/cpu/minor/fetch2.cc b/src/cpu/minor/fetch2.cc index d090eddd5..c43b2f8ec 100644 --- a/src/cpu/minor/fetch2.cc +++ b/src/cpu/minor/fetch2.cc @@ -69,7 +69,7 @@ Fetch2::Fetch2(const std::string &name, processMoreThanOneInput(params.fetch2CycleInput), branchPredictor(*params.branchPred), fetchInfo(params.numThreads), - threadPriority(0) + threadPriority(0), stats(&cpu_) { if (outputWidth < 1) fatal("%s: decodeInputWidth must be >= 1 (%d)\n", name, outputWidth); @@ -413,17 +413,17 @@ Fetch2::evaluate() // Collect some basic inst class stats if (decoded_inst->isLoad()) - loadInstructions++; + stats.loadInstructions++; else if (decoded_inst->isStore()) - storeInstructions++; + stats.storeInstructions++; else if (decoded_inst->isAtomic()) - amoInstructions++; + stats.amoInstructions++; else if (decoded_inst->isVector()) - vecInstructions++; + stats.vecInstructions++; else if (decoded_inst->isFloating()) - fpInstructions++; + stats.fpInstructions++; else if (decoded_inst->isInteger()) - intInstructions++; + stats.intInstructions++; DPRINTF(Fetch, "Instruction extracted from line %s" " lineWidth: %d output_index: %d inputIndex: %d" @@ -602,40 +602,33 @@ Fetch2::isDrained() (*predictionOut.inputWire).isBubble(); } -void -Fetch2::regStats() +Fetch2::Fetch2Stats::Fetch2Stats(MinorCPU *cpu) + : Stats::Group(cpu, "fetch2"), + ADD_STAT(intInstructions, + "Number of integer instructions successfully decoded"), + ADD_STAT(fpInstructions, + "Number of floating point instructions successfully decoded"), + ADD_STAT(vecInstructions, + "Number of SIMD instructions successfully decoded"), + ADD_STAT(loadInstructions, + "Number of memory load instructions successfully decoded"), + ADD_STAT(storeInstructions, + "Number of memory store instructions successfully decoded"), + ADD_STAT(amoInstructions, + "Number of memory atomic instructions successfully decoded") { - using namespace Stats; - - intInstructions - .name(name() + ".int_instructions") - .desc("Number of integer instructions successfully decoded") - .flags(total); - - fpInstructions - .name(name() + ".fp_instructions") - .desc("Number of floating point instructions successfully decoded") - .flags(total); - - vecInstructions - .name(name() + ".vec_instructions") - .desc("Number of SIMD instructions successfully decoded") - .flags(total); - - loadInstructions - .name(name() + ".load_instructions") - .desc("Number of memory load instructions successfully decoded") - .flags(total); - - storeInstructions - .name(name() + ".store_instructions") - .desc("Number of memory store instructions successfully decoded") - .flags(total); - - amoInstructions - .name(name() + ".amo_instructions") - .desc("Number of memory atomic instructions successfully decoded") - .flags(total); + intInstructions + .flags(Stats::total); + fpInstructions + .flags(Stats::total); + vecInstructions + .flags(Stats::total); + loadInstructions + .flags(Stats::total); + storeInstructions + .flags(Stats::total); + amoInstructions + .flags(Stats::total); } void diff --git a/src/cpu/minor/fetch2.hh b/src/cpu/minor/fetch2.hh index d9726a990..3196e4e07 100644 --- a/src/cpu/minor/fetch2.hh +++ b/src/cpu/minor/fetch2.hh @@ -163,13 +163,17 @@ class Fetch2 : public Named std::vector fetchInfo; ThreadID threadPriority; - /** Stats */ - Stats::Scalar intInstructions; - Stats::Scalar fpInstructions; - Stats::Scalar vecInstructions; - Stats::Scalar loadInstructions; - Stats::Scalar storeInstructions; - Stats::Scalar amoInstructions; + struct Fetch2Stats : public Stats::Group + { + Fetch2Stats(MinorCPU *cpu); + /** Stats */ + Stats::Scalar intInstructions; + Stats::Scalar fpInstructions; + Stats::Scalar vecInstructions; + Stats::Scalar loadInstructions; + Stats::Scalar storeInstructions; + Stats::Scalar amoInstructions; + } stats; protected: /** Get a piece of data to work on from the inputBuffer, or 0 if there @@ -212,7 +216,6 @@ class Fetch2 : public Named void minorTrace() const; - void regStats(); /** Is this stage drained? For Fetch2, draining is initiated by * Execute halting Fetch1 causing Fetch2 to naturally drain. diff --git a/src/cpu/minor/pipeline.cc b/src/cpu/minor/pipeline.cc index efde76a57..29dbf8b16 100644 --- a/src/cpu/minor/pipeline.cc +++ b/src/cpu/minor/pipeline.cc @@ -103,14 +103,6 @@ Pipeline::Pipeline(MinorCPU &cpu_, MinorCPUParams ¶ms) : } } -void -Pipeline::regStats() -{ - Ticked::regStats(); - - fetch2.regStats(); -} - void Pipeline::minorTrace() const { diff --git a/src/cpu/minor/pipeline.hh b/src/cpu/minor/pipeline.hh index 485ae7874..caf8355fb 100644 --- a/src/cpu/minor/pipeline.hh +++ b/src/cpu/minor/pipeline.hh @@ -126,9 +126,6 @@ class Pipeline : public Ticked void minorTrace() const; - /** Stats registering */ - void regStats(); - /** Functions below here are BaseCPU operations passed on to pipeline * stages */ -- 2.30.2