Skip to content

Commit 49749b6

Browse files
authored
cpu-o3: branchPred: add ftq end reason stats (#232)
1 parent 28ab3ea commit 49749b6

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/cpu/pred/ftb/decoupled_bpred.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,8 @@ DecoupledBPUWithFTB::DBPFTBStats::DBPFTBStats(statistics::Group* parent, unsigne
566566
ADD_STAT(controlCommitSquashOfUncond, statistics::units::Count::get(), "control squash of uncond branch at commit"),
567567
ADD_STAT(controlCommitSquashOfUncondDirect, statistics::units::Count::get(), "control squash of uncond direct branch at commit"),
568568
ADD_STAT(controlCommitSquashOfUncondIndirect, statistics::units::Count::get(), "control squash of indirect branch at commit"),
569-
ADD_STAT(controlCommitSquashOfUncondReturn, statistics::units::Count::get(), "control squash of return branch at commit")
569+
ADD_STAT(controlCommitSquashOfUncondReturn, statistics::units::Count::get(), "control squash of return branch at commit"),
570+
ADD_STAT(ftqEndReasonDist, statistics::units::Count::get(), "distribution of ftq end reason")
570571
{
571572
predsOfEachStage.init(numStages);
572573
commitPredsFromEachStage.init(numStages+1);
@@ -582,6 +583,11 @@ DecoupledBPUWithFTB::DBPFTBStats::DBPFTBStats(statistics::Group* parent, unsigne
582583
commitTrapSquashLatencyDist.init(1,16,1);
583584
commitNonControlSquashLatencyDist.init(1,16,1);
584585
updateLatencyDist.init(1,64,2);
586+
ftqEndReasonDist.init(static_cast<int>(FTQEndReason::NUM_REASONS)).flags(statistics::pdf);
587+
ftqEndReasonDist.subname(static_cast<int>(FTQEndReason::NOT_END), "not_end");
588+
ftqEndReasonDist.subname(static_cast<int>(FTQEndReason::TAKEN), "taken");
589+
ftqEndReasonDist.subname(static_cast<int>(FTQEndReason::SIZE_LIMIT), "size_limit");
590+
ftqEndReasonDist.subname(static_cast<int>(FTQEndReason::LOOP_END), "loop_end");
585591
}
586592

587593
DecoupledBPUWithFTB::BpTrace::BpTrace(FetchStream &stream, const DynInstPtr &inst, bool mispred)
@@ -903,6 +909,7 @@ DecoupledBPUWithFTB::decoupledPredict(const StaticInstPtr &inst,
903909
if (raw_taken) {
904910
if (current_loop_iter >= loop_iter - 1) {
905911
run_out_of_this_entry = true;
912+
dbpFtbStats.ftqEndReasonDist[static_cast<int>(FTQEndReason::LOOP_END)]++;
906913
if (loop_exit) {
907914
taken = false;
908915
lb.tryUnpin();
@@ -914,6 +921,7 @@ DecoupledBPUWithFTB::decoupledPredict(const StaticInstPtr &inst,
914921
} else {
915922
if (taken) {
916923
run_out_of_this_entry = true;
924+
dbpFtbStats.ftqEndReasonDist[static_cast<int>(FTQEndReason::TAKEN)]++;
917925
}
918926
}
919927

@@ -931,6 +939,7 @@ DecoupledBPUWithFTB::decoupledPredict(const StaticInstPtr &inst,
931939
inst->advancePC(*target);
932940
if (target->instAddr() >= end) {
933941
run_out_of_this_entry = true;
942+
dbpFtbStats.ftqEndReasonDist[static_cast<int>(FTQEndReason::SIZE_LIMIT)]++;
934943
}
935944
}
936945
DPRINTF(DecoupleBP, "Predict it %staken to %#lx\n", taken ? "" : "not ",

src/cpu/pred/ftb/decoupled_bpred.hh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <vector>
99

1010
#include "arch/generic/pcstate.hh"
11+
#include "base/statistics.hh"
1112
#include "config/the_isa.hh"
1213
// #include "cpu/base.hh"
1314
#include "cpu/o3/cpu_def.hh"
@@ -532,11 +533,19 @@ class DecoupledBPUWithFTB : public BPredUnit
532533
statistics::Scalar controlCommitSquashOfUncondIndirect;
533534
statistics::Scalar controlCommitSquashOfUncondReturn;
534535

535-
536+
statistics::Vector ftqEndReasonDist;
536537

537538
DBPFTBStats(statistics::Group* parent, unsigned numStages, unsigned fsqSize);
538539
} dbpFtbStats;
539540

541+
enum class FTQEndReason {
542+
NOT_END,
543+
TAKEN,
544+
SIZE_LIMIT,
545+
LOOP_END,
546+
NUM_REASONS
547+
};
548+
540549
public:
541550
void tick();
542551
void ideal_tick();

0 commit comments

Comments
 (0)