gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
tage_sc_l_64KB.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 Metempsy Technology Consulting
3  * All rights reserved.
4  *
5  * Copyright (c) 2006 INRIA (Institut National de Recherche en
6  * Informatique et en Automatique / French National Research Institute
7  * for Computer Science and Applied Mathematics)
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions are
13  * met: redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer;
15  * redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in the
17  * documentation and/or other materials provided with the distribution;
18  * neither the name of the copyright holders nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  * Author: André Seznec, Pau Cabre, Javier Bueno
35  *
36  */
37 
38 /*
39  * 64KB TAGE-SC-L branch predictor (devised by Andre Seznec)
40  */
41 
43 
44 namespace gem5
45 {
46 
47 namespace branch_prediction
48 {
49 
51  const TAGE_SC_L_64KB_StatisticalCorrectorParams &p)
53  numEntriesSecondLocalHistories(p.numEntriesSecondLocalHistories),
54  numEntriesThirdLocalHistories(p.numEntriesThirdLocalHistories),
55  pnb(p.pnb),
56  logPnb(p.logPnb),
57  pm(p.pm),
58  snb(p.snb),
59  logSnb(p.logSnb),
60  sm(p.sm),
61  tnb(p.tnb),
62  logTnb(p.logTnb),
63  tm(p.tm),
64  imnb(p.imnb),
65  logImnb(p.logImnb),
66  imm(p.imm)
67 {
72 
73 }
74 
77 {
79 
80  sh->setNumOrdinalHistories(3);
81  sh->initLocalHistory(1, numEntriesFirstLocalHistories, 2);
82  sh->initLocalHistory(2, numEntriesSecondLocalHistories, 5);
83  sh->initLocalHistory(3, numEntriesThirdLocalHistories, logTnb);
84 
85  sh->imHist.resize(1 << im[0]);
86  return sh;
87 }
88 
89 unsigned
91  BranchInfo* bi, int hitBank, int altBank) const
92 {
93  return (bi->predBeforeSC + (((hitBank+1)/4)<<4) + (bi->highConf<<1) +
94  (bi->lowConf <<2) + ((altBank!=0)<<3) +
95  ((branch_pc^(branch_pc>>2))<<7)) & ((1<<logBias) -1);
96 }
97 
98 int
100  BranchInfo* bi, int & lsum, int64_t pathHist)
101 {
103  static_cast<SC_64KB_ThreadHistory *>(scHistory);
104 
105  lsum += gPredict(
106  (branch_pc << 1) + bi->predBeforeSC, sh->bwHist, bwm,
107  bwgehl, bwnb, logBwnb, wbw);
108 
109  lsum += gPredict(
110  branch_pc, pathHist, pm, pgehl, pnb, logPnb, wp);
111 
112  lsum += gPredict(
113  branch_pc, sh->getLocalHistory(1, branch_pc), lm,
114  lgehl, lnb, logLnb, wl);
115 
116  lsum += gPredict(
117  branch_pc, sh->getLocalHistory(2, branch_pc), sm,
118  sgehl, snb, logSnb, ws);
119 
120  lsum += gPredict(
121  branch_pc, sh->getLocalHistory(3, branch_pc), tm,
122  tgehl, tnb, logTnb, wt);
123 
124  lsum += gPredict(
125  branch_pc, sh->imHist[scHistory->imliCount], imm,
126  imgehl, imnb, logImnb, wim);
127 
128  lsum += gPredict(
129  branch_pc, sh->imliCount, im, igehl, inb, logInb, wi);
130 
131  int thres = (updateThreshold>>3) + pUpdateThreshold[getIndUpd(branch_pc)]
132  + 12*((wb[getIndUpds(branch_pc)] >= 0) + (wp[getIndUpds(branch_pc)] >= 0)
133  + (ws[getIndUpds(branch_pc)] >= 0) + (wt[getIndUpds(branch_pc)] >= 0)
134  + (wl[getIndUpds(branch_pc)] >= 0) + (wbw[getIndUpds(branch_pc)] >= 0)
135  + (wi[getIndUpds(branch_pc)] >= 0));
136 
137  return thres;
138 }
139 
140 int
142 {
143  return (i >= (nbr - 2)) ? 1 : 0;
144 }
145 
146 void
148  const StaticInstPtr &inst, bool taken, BranchInfo* tage_bi,
149  Addr corrTarget)
150 {
151  int brtype = inst->isDirectCtrl() ? 0 : 2;
152  if (! inst->isUncondCtrl()) {
153  ++brtype;
154  }
155  // Non speculative SC histories update
156  if (brtype & 1) {
158  static_cast<SC_64KB_ThreadHistory *>(scHistory);
159  int64_t imliCount = sh->imliCount;
160  sh->imHist[imliCount] = (sh->imHist[imliCount] << 1)
161  + taken;
162  sh->updateLocalHistory(2, branch_pc, taken, branch_pc & 15);
163  sh->updateLocalHistory(3, branch_pc, taken);
164  }
165 
166  StatisticalCorrector::scHistoryUpdate(branch_pc, inst, taken, tage_bi,
167  corrTarget);
168 }
169 
170 void
172  bool taken, BranchInfo* bi, int64_t phist)
173 {
175  static_cast<SC_64KB_ThreadHistory *>(scHistory);
176 
177  gUpdate((pc << 1) + bi->predBeforeSC, taken, sh->bwHist, bwm,
178  bwgehl, bwnb, logBwnb, wbw, bi);
179 
180  gUpdate(pc, taken, phist, pm,
181  pgehl, pnb, logPnb, wp, bi);
182 
183  gUpdate(pc, taken, sh->getLocalHistory(1, pc), lm,
184  lgehl, lnb, logLnb, wl, bi);
185 
186  gUpdate(pc, taken, sh->getLocalHistory(2, pc), sm,
187  sgehl, snb, logSnb, ws, bi);
188 
189  gUpdate(pc, taken, sh->getLocalHistory(3, pc), tm,
190  tgehl, tnb, logTnb, wt, bi);
191 
192  gUpdate(pc, taken, sh->imHist[scHistory->imliCount], imm,
193  imgehl, imnb, logImnb, wim, bi);
194 
195  gUpdate(pc, taken, sh->imliCount, im,
196  igehl, inb, logInb, wi, bi);
197 }
198 
199 int
201 {
202  return index;
203 }
204 
205 uint16_t
207 {
208  // very similar to the TAGE implementation, but w/o shifting the pc
209  int tag = pc ^ threadHistory[tid].computeTags[0][bank].comp ^
210  (threadHistory[tid].computeTags[1][bank].comp << 1);
211 
212  return (tag & ((1ULL << tagTableTagWidths[bank]) - 1));
213 }
214 
215 void
217  bool alloc, bool taken, TAGEBase::BranchInfo* bi, int nrand)
218 {
219  if (! alloc) {
220  return;
221  }
222 
223  int penalty = 0;
224  int numAllocated = 0;
225  bool maxAllocReached = false;
226 
227  for (int I = calcDep(bi); I < nHistoryTables; I += 2) {
228  // Handle the 2-way associativity for allocation
229  for (int j = 0; j < 2; ++j) {
230  int i = ((j == 0) ? I : (I ^ 1)) + 1;
231  if (noSkip[i]) {
232  if (gtable[i][bi->tableIndices[i]].u == 0) {
233  int8_t ctr = gtable[i][bi->tableIndices[i]].ctr;
234  if (abs (2 * ctr + 1) <= 3) {
235  gtable[i][bi->tableIndices[i]].tag = bi->tableTags[i];
236  gtable[i][bi->tableIndices[i]].ctr = taken ? 0 : -1;
237  numAllocated++;
238  maxAllocReached = (numAllocated == maxNumAlloc);
239  I += 2;
240  break;
241  } else {
242  if (gtable[i][bi->tableIndices[i]].ctr > 0) {
243  gtable[i][bi->tableIndices[i]].ctr--;
244  } else {
245  gtable[i][bi->tableIndices[i]].ctr++;
246  }
247  }
248  } else {
249  penalty++;
250  }
251  }
252  }
253  if (maxAllocReached) {
254  break;
255  }
256  }
257 
258  tCounter += (penalty - 2 * numAllocated);
259 
260  handleUReset();
261 }
262 
263 void
266 {
267  if (bi->hitBank > 0) {
268  if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
269  if (bi->longestMatchPred != taken) {
270  // acts as a protection
271  if (bi->altBank > 0) {
272  ctrUpdate(gtable[bi->altBank][bi->altBankIndex].ctr, taken,
274  }
275  if (bi->altBank == 0){
276  baseUpdate(branch_pc, taken, bi);
277  }
278  }
279  }
280 
281  ctrUpdate(gtable[bi->hitBank][bi->hitBankIndex].ctr, taken,
283 
284  //sign changes: no way it can have been useful
285  if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
286  gtable[bi->hitBank][bi->hitBankIndex].u = 0;
287  }
288 
289  if (bi->altTaken == taken) {
290  if (bi->altBank > 0) {
291  int8_t ctr = gtable[bi->altBank][bi->altBankIndex].ctr;
292  if (abs (2 * ctr + 1) == 7) {
293  if (gtable[bi->hitBank][bi->hitBankIndex].u == 1) {
294  if (bi->longestMatchPred == taken) {
295  gtable[bi->hitBank][bi->hitBankIndex].u = 0;
296  }
297  }
298  }
299  }
300  }
301  } else {
302  baseUpdate(branch_pc, taken, bi);
303  }
304 
305  if ((bi->longestMatchPred != bi->altTaken) &&
306  (bi->longestMatchPred == taken) &&
307  (gtable[bi->hitBank][bi->hitBankIndex].u < (1 << tagTableUBits) -1)) {
308  gtable[bi->hitBank][bi->hitBankIndex].u++;
309  }
310 }
311 
312 TAGE_SC_L_64KB::TAGE_SC_L_64KB(const TAGE_SC_L_64KBParams &params)
313  : TAGE_SC_L(params)
314 {
315 }
316 
317 } // namespace branch_prediction
318 } // namespace gem5
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::tm
std::vector< int > tm
Definition: tage_sc_l_64KB.hh:98
gem5::branch_prediction::StatisticalCorrector::scHistory
SCThreadHistory * scHistory
Definition: statistical_corrector.hh:139
gem5::branch_prediction::TAGE_SC_L_TAGE::calcDep
int calcDep(TAGEBase::BranchInfo *bi)
Definition: tage_sc_l.cc:305
gem5::branch_prediction::StatisticalCorrector::scHistoryUpdate
virtual void scHistoryUpdate(Addr branch_pc, const StaticInstPtr &inst, bool taken, BranchInfo *tage_bi, Addr corrTarget)
Definition: statistical_corrector.cc:295
gem5::branch_prediction::StatisticalCorrector::gUpdate
virtual void gUpdate(Addr branch_pc, bool taken, int64_t hist, std::vector< int > &length, std::vector< int8_t > *tab, int nbr, int logs, std::vector< int8_t > &w, BranchInfo *bi)
Definition: statistical_corrector.cc:209
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::logTnb
const unsigned logTnb
Definition: tage_sc_l_64KB.hh:97
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::scHistoryUpdate
void scHistoryUpdate(Addr branch_pc, const StaticInstPtr &inst, bool taken, BranchInfo *tage_bi, Addr corrTarget) override
Definition: tage_sc_l_64KB.cc:147
gem5::branch_prediction::StatisticalCorrector::lm
std::vector< int > lm
Definition: statistical_corrector.hh:158
gem5::branch_prediction::TAGEBase::tagTableUBits
const unsigned tagTableUBits
Definition: tage_base.hh:427
gem5::branch_prediction::TAGEBase::threadHistory
std::vector< ThreadHistory > threadHistory
Definition: tage_base.hh:464
gem5::branch_prediction::TAGE_SC_L_TAGE_64KB::handleTAGEUpdate
void handleTAGEUpdate(Addr branch_pc, bool taken, TAGEBase::BranchInfo *bi) override
Handles the update of the TAGE entries.
Definition: tage_sc_l_64KB.cc:264
gem5::branch_prediction::StatisticalCorrector::SCThreadHistory::imliCount
int64_t imliCount
Definition: statistical_corrector.hh:83
gem5::MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:47
gem5::branch_prediction::TAGEBase::maxNumAlloc
unsigned maxNumAlloc
Definition: tage_base.hh:481
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::SC_64KB_ThreadHistory
Definition: tage_sc_l_64KB.hh:109
gem5::branch_prediction::StatisticalCorrector::wl
std::vector< int8_t > wl
Definition: statistical_corrector.hh:160
gem5::branch_prediction::StatisticalCorrector::igehl
std::vector< int8_t > * igehl
Definition: statistical_corrector.hh:166
gem5::branch_prediction::StatisticalCorrector::inb
const unsigned inb
Definition: statistical_corrector.hh:163
gem5::branch_prediction::StatisticalCorrector::bwgehl
std::vector< int8_t > * bwgehl
Definition: statistical_corrector.hh:152
gem5::branch_prediction::TAGE_SC_L_64KB::TAGE_SC_L_64KB
TAGE_SC_L_64KB(const TAGE_SC_L_64KBParams &params)
Definition: tage_sc_l_64KB.cc:312
gem5::branch_prediction::StatisticalCorrector
Definition: statistical_corrector.hh:58
gem5::branch_prediction::StatisticalCorrector::bwm
std::vector< int > bwm
Definition: statistical_corrector.hh:151
gem5::branch_prediction::TAGE_SC_L
Definition: tage_sc_l.hh:156
gem5::branch_prediction::StatisticalCorrector::lnb
const unsigned lnb
Definition: statistical_corrector.hh:156
gem5::branch_prediction::TAGEBase::ctrUpdate
static void ctrUpdate(T &ctr, bool taken, int nbits)
Updates a direction counter based on the actual branch outcome.
Definition: tage_base.cc:261
gem5::branch_prediction::StatisticalCorrector::initGEHLTable
void initGEHLTable(unsigned numLenghts, std::vector< int > lengths, std::vector< int8_t > *&table, unsigned logNumEntries, std::vector< int8_t > &w, int8_t wInitValue)
Definition: statistical_corrector.cc:134
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::branch_prediction::TAGEBase::noSkip
std::vector< bool > noSkip
Definition: tage_base.hh:486
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::tgehl
std::vector< int8_t > * tgehl
Definition: tage_sc_l_64KB.hh:99
gem5::PowerISA::bi
Bitfield< 20, 16 > bi
Definition: types.hh:80
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::sgehl
std::vector< int8_t > * sgehl
Definition: tage_sc_l_64KB.hh:92
gem5::branch_prediction::TAGEBase::tagTableCounterBits
const unsigned tagTableCounterBits
Definition: tage_base.hh:426
gem5::branch_prediction::StatisticalCorrector::updateThreshold
int updateThreshold
Definition: statistical_corrector.hh:175
gem5::branch_prediction::TAGEBase::BranchInfo
Definition: tage_base.hh:128
gem5::branch_prediction::TAGEBase::gtable
TageEntry ** gtable
Definition: tage_base.hh:438
gem5::branch_prediction::StatisticalCorrector::wi
std::vector< int8_t > wi
Definition: statistical_corrector.hh:167
gem5::RefCountingPtr< StaticInst >
tage_sc_l_64KB.hh
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::wp
std::vector< int8_t > wp
Definition: tage_sc_l_64KB.hh:86
gem5::branch_prediction::StatisticalCorrector::bwnb
const unsigned bwnb
Definition: statistical_corrector.hh:149
gem5::branch_prediction::TAGEBase::baseUpdate
void baseUpdate(Addr pc, bool taken, BranchInfo *bi)
Updates the bimodal predictor.
Definition: tage_base.cc:302
gem5::branch_prediction::TAGEBase::tagTableTagWidths
std::vector< unsigned > tagTableTagWidths
Definition: tage_base.hh:433
gem5::ArmISA::j
Bitfield< 24 > j
Definition: misc_types.hh:57
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::wt
std::vector< int8_t > wt
Definition: tage_sc_l_64KB.hh:100
gem5::branch_prediction::StatisticalCorrector::logBias
const unsigned logBias
Definition: statistical_corrector.hh:141
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::imgehl
std::vector< int8_t > * imgehl
Definition: tage_sc_l_64KB.hh:106
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::logSnb
const unsigned logSnb
Definition: tage_sc_l_64KB.hh:90
gem5::branch_prediction::StatisticalCorrector::im
std::vector< int > im
Definition: statistical_corrector.hh:165
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::imm
std::vector< int > imm
Definition: tage_sc_l_64KB.hh:105
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::tnb
const unsigned tnb
Definition: tage_sc_l_64KB.hh:96
gem5::branch_prediction::StatisticalCorrector::pUpdateThreshold
std::vector< int > pUpdateThreshold
Definition: statistical_corrector.hh:176
gem5::branch_prediction::TAGEBase::nHistoryTables
const unsigned nHistoryTables
Definition: tage_base.hh:425
gem5::branch_prediction::StatisticalCorrector::numEntriesFirstLocalHistories
const unsigned numEntriesFirstLocalHistories
Definition: statistical_corrector.hh:146
gem5::branch_prediction::TAGE_SC_L_TAGE_64KB::gtag
uint16_t gtag(ThreadID tid, Addr pc, int bank) const override
Computes the partial tag of a tagged table.
Definition: tage_sc_l_64KB.cc:206
gem5::branch_prediction::StatisticalCorrector::getIndUpds
unsigned getIndUpds(Addr branch_pc) const
Definition: statistical_corrector.cc:177
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::getIndBiasBank
unsigned getIndBiasBank(Addr branch_pc, BranchInfo *bi, int hitBank, int altBank) const override
Definition: tage_sc_l_64KB.cc:90
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::logPnb
const unsigned logPnb
Definition: tage_sc_l_64KB.hh:83
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::wim
std::vector< int8_t > wim
Definition: tage_sc_l_64KB.hh:107
gem5::branch_prediction::TAGEBase::TageEntry::u
uint8_t u
Definition: tage_base.hh:79
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::pgehl
std::vector< int8_t > * pgehl
Definition: tage_sc_l_64KB.hh:85
gem5::StaticInst::isDirectCtrl
bool isDirectCtrl() const
Definition: static_inst.hh:163
gem5::branch_prediction::StatisticalCorrector::logInb
const unsigned logInb
Definition: statistical_corrector.hh:164
gem5::branch_prediction::TAGE_SC_L_TAGE_64KB::gindex_ext
int gindex_ext(int index, int bank) const override
Definition: tage_sc_l_64KB.cc:200
gem5::PowerISA::tm
Bitfield< 32 > tm
Definition: misc.hh:112
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::numEntriesThirdLocalHistories
const unsigned numEntriesThirdLocalHistories
Definition: tage_sc_l_64KB.hh:79
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::pnb
const unsigned pnb
Definition: tage_sc_l_64KB.hh:82
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::branch_prediction::TAGEBase::tCounter
int64_t tCounter
Definition: tage_base.hh:476
gem5::branch_prediction::StatisticalCorrector::BranchInfo
Definition: statistical_corrector.hh:200
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::logImnb
const unsigned logImnb
Definition: tage_sc_l_64KB.hh:104
gem5::branch_prediction::StatisticalCorrector::logBwnb
const unsigned logBwnb
Definition: statistical_corrector.hh:150
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::TAGE_SC_L_64KB_StatisticalCorrector
TAGE_SC_L_64KB_StatisticalCorrector(const TAGE_SC_L_64KB_StatisticalCorrectorParams &p)
Definition: tage_sc_l_64KB.cc:50
gem5::ArmISA::sh
Bitfield< 8, 7 > sh
Definition: misc_types.hh:718
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::makeThreadHistory
SCThreadHistory * makeThreadHistory() override
Definition: tage_sc_l_64KB.cc:76
gem5::branch_prediction::StatisticalCorrector::lgehl
std::vector< int8_t > * lgehl
Definition: statistical_corrector.hh:159
gem5::ArmISA::sm
Bitfield< 0, 0 > sm
Definition: misc_types.hh:819
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::gIndexLogsSubstr
int gIndexLogsSubstr(int nbr, int i) override
Definition: tage_sc_l_64KB.cc:141
gem5::ArmISA::imm
Bitfield< 7, 0 > imm
Definition: types.hh:132
gem5::branch_prediction::TAGE_SC_L_TAGE::handleUReset
void handleUReset() override
Handles the U bits reset.
Definition: tage_sc_l.cc:316
gem5::branch_prediction::StatisticalCorrector::wbw
std::vector< int8_t > wbw
Definition: statistical_corrector.hh:153
gem5::branch_prediction::TAGE_SC_L_TAGE_64KB::handleAllocAndUReset
void handleAllocAndUReset(bool alloc, bool taken, TAGEBase::BranchInfo *bi, int nrand) override
Handles Allocation and U bits reset on an update.
Definition: tage_sc_l_64KB.cc:216
gem5::MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::numEntriesSecondLocalHistories
const unsigned numEntriesSecondLocalHistories
Definition: tage_sc_l_64KB.hh:78
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::gUpdates
void gUpdates(ThreadID tid, Addr pc, bool taken, BranchInfo *bi, int64_t phist) override
Definition: tage_sc_l_64KB.cc:171
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::pm
std::vector< int > pm
Definition: tage_sc_l_64KB.hh:84
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::ws
std::vector< int8_t > ws
Definition: tage_sc_l_64KB.hh:93
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::imnb
const unsigned imnb
Definition: tage_sc_l_64KB.hh:103
gem5::branch_prediction::StatisticalCorrector::SCThreadHistory
Definition: statistical_corrector.hh:75
gem5::branch_prediction::StatisticalCorrector::logLnb
const unsigned logLnb
Definition: statistical_corrector.hh:157
gem5::StaticInst::isUncondCtrl
bool isUncondCtrl() const
Definition: static_inst.hh:166
gem5::branch_prediction::StatisticalCorrector::getIndUpd
virtual unsigned getIndUpd(Addr branch_pc) const
Definition: statistical_corrector.cc:171
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::snb
const unsigned snb
Definition: tage_sc_l_64KB.hh:89
gem5::branch_prediction::TAGEBase::TageEntry::tag
uint16_t tag
Definition: tage_base.hh:78
gem5::branch_prediction::TAGEBase::TageEntry::ctr
int8_t ctr
Definition: tage_base.hh:77
gem5::branch_prediction::StatisticalCorrector::wb
std::vector< int8_t > wb
Definition: statistical_corrector.hh:173
gem5::branch_prediction::StatisticalCorrector::gPredict
int gPredict(Addr branch_pc, int64_t hist, std::vector< int > &length, std::vector< int8_t > *tab, int nbr, int logs, std::vector< int8_t > &w)
Definition: statistical_corrector.cc:193
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::gPredictions
int gPredictions(ThreadID tid, Addr branch_pc, BranchInfo *bi, int &lsum, int64_t phist) override
Definition: tage_sc_l_64KB.cc:99
gem5::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235
gem5::branch_prediction::TAGE_SC_L_64KB_StatisticalCorrector::sm
std::vector< int > sm
Definition: tage_sc_l_64KB.hh:91

Generated on Sun Jul 30 2023 01:56:53 for gem5 by doxygen 1.8.17