changeset e975e8afba8b in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=e975e8afba8b
description:
        cpu: Add branch predictor PMU probe points

        This changeset adds probe points that can be used to implement PMU
        counters for branch predictor stats. The following probes are
        supported:

         * BPRedUnit::ppBranches / Branches
         * BPRedUnit::ppMisses / Misses

diffstat:

 src/cpu/pred/bpred_unit.hh      |  31 +++++++++++++++++++++++++++++++
 src/cpu/pred/bpred_unit_impl.hh |  20 ++++++++++++++++++++
 2 files changed, 51 insertions(+), 0 deletions(-)

diffs (106 lines):

diff -r afeb5cdb3907 -r e975e8afba8b src/cpu/pred/bpred_unit.hh
--- a/src/cpu/pred/bpred_unit.hh        Thu Oct 16 05:49:39 2014 -0400
+++ b/src/cpu/pred/bpred_unit.hh        Thu Oct 16 05:49:40 2014 -0400
@@ -56,6 +56,7 @@
 #include "cpu/inst_seq.hh"
 #include "cpu/static_inst.hh"
 #include "params/BranchPredictor.hh"
+#include "sim/probe/pmu.hh"
 #include "sim/sim_object.hh"
 
 /**
@@ -76,6 +77,8 @@
      */
     void regStats();
 
+    void regProbePoints() M5_ATTR_OVERRIDE;
+
     /** Perform sanity checks after a drain. */
     void drainSanityCheck() const;
 
@@ -290,6 +293,34 @@
     Stats::Scalar usedRAS;
     /** Stat for number of times the RAS is incorrect. */
     Stats::Scalar RASIncorrect;
+
+  protected:
+    /**
+     * @{
+     * @name PMU Probe points.
+     */
+
+    /**
+     * Helper method to instantiate probe points belonging to this
+     * object.
+     *
+     * @param name Name of the probe point.
+     * @return A unique_ptr to the new probe point.
+     */
+    ProbePoints::PMUUPtr pmuProbePoint(const char *name);
+
+
+    /**
+     * Branches seen by the branch predictor
+     *
+     * @note This counter includes speculative branches.
+     */
+    ProbePoints::PMUUPtr ppBranches;
+
+    /** Miss-predicted branches */
+    ProbePoints::PMUUPtr ppMisses;
+
+    /** @} */
 };
 
 #endif // __CPU_PRED_BPRED_UNIT_HH__
diff -r afeb5cdb3907 -r e975e8afba8b src/cpu/pred/bpred_unit_impl.hh
--- a/src/cpu/pred/bpred_unit_impl.hh   Thu Oct 16 05:49:39 2014 -0400
+++ b/src/cpu/pred/bpred_unit_impl.hh   Thu Oct 16 05:49:40 2014 -0400
@@ -119,6 +119,22 @@
         ;
 }
 
+ProbePoints::PMUUPtr
+BPredUnit::pmuProbePoint(const char *name)
+{
+    ProbePoints::PMUUPtr ptr;
+    ptr.reset(new ProbePoints::PMU(getProbeManager(), name));
+
+    return ptr;
+}
+
+void
+BPredUnit::regProbePoints()
+{
+    ppBranches = pmuProbePoint("Branches");
+    ppMisses = pmuProbePoint("Misses");
+}
+
 void
 BPredUnit::drainSanityCheck() const
 {
@@ -141,6 +157,7 @@
     TheISA::PCState target = pc;
 
     ++lookups;
+    ppBranches->notify(1);
 
     void *bp_history = NULL;
 
@@ -259,6 +276,8 @@
     TheISA::PCState target;
 
     ++lookups;
+    ppBranches->notify(1);
+
     DPRINTF(Branch, "[tid:%i] [sn:%i] %s ... PC %s doing branch "
             "prediction\n", tid, seqNum,
             inst->disassemble(instPC.instAddr()), instPC);
@@ -438,6 +457,7 @@
     History &pred_hist = predHist[tid];
 
     ++condIncorrect;
+    ppMisses->notify(1);
 
     DPRINTF(Branch, "[tid:%i]: Squashing from sequence number %i, "
             "setting target to %s.\n", tid, squashed_sn, corrTarget);
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to