gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
tage_sc_l_8KB.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  * 8KB TAGE-SC-L branch predictor (devised by Andre Seznec)
40  */
41 
43 
44 #include "base/random.hh"
45 #include "debug/TageSCL.hh"
46 
47 namespace gem5
48 {
49 
50 namespace branch_prediction
51 {
52 
54  const TAGE_SC_L_8KB_StatisticalCorrectorParams &p)
56  gnb(p.gnb),
57  logGnb(p.logGnb),
58  gm(p.gm)
59 {
61 }
62 
65 {
67  sh->setNumOrdinalHistories(1);
68  sh->initLocalHistory(1, numEntriesFirstLocalHistories, 2);
69  return sh;
70 }
71 
72 unsigned
74  BranchInfo* bi, int hitBank, int altBank) const
75 {
76  return (bi->predBeforeSC + (((hitBank+1)/4)<<4) + (bi->highConf<<1) +
77  (bi->lowConf <<2) +((altBank!=0)<<3)) & ((1<<logBias) -1);
78 }
79 
80 int
82  ThreadID tid, Addr branch_pc, BranchInfo* bi, int & lsum, int64_t phist)
83 {
85  lsum += gPredict(
86  branch_pc, sh->globalHist, gm, ggehl, gnb, logGnb, wg);
87 
88  lsum += gPredict(
89  branch_pc, sh->bwHist, bwm, bwgehl, bwnb, logBwnb, wbw);
90 
91  // only 1 local history here
92  lsum += gPredict(
93  branch_pc, sh->getLocalHistory(1, branch_pc), lm,
94  lgehl, lnb, logLnb, wl);
95 
96  lsum += gPredict(
97  branch_pc, sh->imliCount, im, igehl, inb, logInb, wi);
98 
99  int thres = (updateThreshold>>3)+pUpdateThreshold[getIndUpd(branch_pc)];
100 
101  return thres;
102 }
103 
105 {
106  return 0;
107 }
108 
109 void
111  const StaticInstPtr &inst, bool taken, BranchInfo *tage_bi,
112  Addr corrTarget)
113 {
114  int brtype = inst->isDirectCtrl() ? 0 : 2;
115  if (! inst->isUncondCtrl()) {
116  ++brtype;
117  }
118  // Non speculative SC histories update
119  if (brtype & 1) {
121  static_cast<SC_8KB_ThreadHistory *>(scHistory);
122  sh->globalHist = (sh->globalHist << 1) + taken;
123  }
124 
125  StatisticalCorrector::scHistoryUpdate(branch_pc, inst, taken, tage_bi,
126  corrTarget);
127 }
128 
129 void
131  BranchInfo* bi, int64_t phist)
132 {
134  gUpdate(pc, taken, sh->globalHist, gm, ggehl, gnb, logGnb, wg, bi);
135  gUpdate(pc, taken, sh->bwHist, bwm, bwgehl, bwnb, logBwnb, wbw, bi);
136  gUpdate(pc, taken, sh->getLocalHistory(1, pc), lm, lgehl, lnb, logLnb, wl,
137  bi);
138  gUpdate(pc, taken, sh->imliCount, im, igehl, inb, logInb, wi, bi);
139 }
140 
141 TAGE_SC_L_8KB::TAGE_SC_L_8KB(const TAGE_SC_L_8KBParams &params)
142  : TAGE_SC_L(params)
143 {
144 }
145 
146 void
148 {
149  // Some hardcoded values are used here
150  // (they do not seem to depend on any parameter)
151  for (int i = 1; i <= nHistoryTables; i++) {
152  history.computeIndices[i].init(
153  histLengths[i], 17 + (2 * ((i - 1) / 2) % 4));
154  history.computeTags[0][i].init(
155  history.computeIndices[i].origLength, 13);
156  history.computeTags[1][i].init(
157  history.computeIndices[i].origLength, 11);
158  DPRINTF(TageSCL, "HistLength:%d, TTSize:%d, TTTWidth:%d\n",
160  }
161 }
162 
163 int
165 {
166  return (index ^ (index >> logTagTableSizes[bank])
167  ^ (index >> 2 * logTagTableSizes[bank]));
168 }
169 
170 uint16_t
172 {
173  int tag = (threadHistory[tid].computeIndices[bank - 1].comp << 2) ^ pc ^
174  (pc >> instShiftAmt) ^
175  threadHistory[tid].computeIndices[bank].comp;
176  int hlen = (histLengths[bank] > pathHistBits) ? pathHistBits :
177  histLengths[bank];
178 
179  tag = (tag >> 1) ^ ((tag & 1) << 10) ^
180  F(threadHistory[tid].pathHist, hlen, bank);
181  tag ^= threadHistory[tid].computeTags[0][bank].comp ^
182  (threadHistory[tid].computeTags[1][bank].comp << 1);
183 
184  return ((tag ^ (tag >> tagTableTagWidths[bank]))
185  & ((1ULL << tagTableTagWidths[bank]) - 1));
186 }
187 
188 void
190  bool alloc, bool taken, TAGEBase::BranchInfo* bi, int nrand)
191 {
192  if (!alloc) {
193  return;
194  }
195 
196  int penalty = 0;
197  int truePen = 0;
198  int numAllocated = 0;
199  bool maxAllocReached = false;
200 
201  for (int I = calcDep(bi); I < nHistoryTables; I += 2) {
202  // Handle the 2-way associativity for allocation
203  for (int j = 0; j < 2; ++j) {
204  int i = ((j == 0) ? I : (I ^ 1)) + 1;
205  if (i > nHistoryTables) {
206  break;
207  }
208  if (noSkip[i]) {
209  if (gtable[i][bi->tableIndices[i]].u == 0) {
210  gtable[i][bi->tableIndices[i]].u =
211  ((random_mt.random<int>() & 31) == 0);
212  // protect randomly from fast replacement
213  gtable[i][bi->tableIndices[i]].tag = bi->tableTags[i];
214  gtable[i][bi->tableIndices[i]].ctr = taken ? 0 : -1;
215  numAllocated++;
216 
217  if (numAllocated == maxNumAlloc) {
218  maxAllocReached = true;
219  break;
220  }
221  I += 2;
222  } else {
223  int8_t ctr = gtable[i][bi->tableIndices[i]].ctr;
224  if ((gtable[i][bi->tableIndices[i]].u == 1) &
225  (abs (2 * ctr + 1) == 1)) {
226  if ((random_mt.random<int>() & 7) == 0) {
227  gtable[i][bi->tableIndices[i]].u = 0;
228  }
229  } else {
230  truePen++;
231  }
232  penalty++;
233  }
234  } else {
235  break;
236  }
237  }
238  if (maxAllocReached) {
239  break;
240  }
241  }
242 
243  tCounter += (truePen + penalty - 5 * numAllocated);
244 
245  handleUReset();
246 }
247 
248 void
250 {
251  // On real HW it should be u >>= 1 instead of if > 0 then u--
252  if (u > 0) {
253  u--;
254  }
255 }
256 
257 void
260 {
261  if (bi->hitBank > 0) {
262  if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
263  if (bi->longestMatchPred != taken) { // acts as a protection
264  if (bi->altBank > 0) {
265  int8_t ctr = gtable[bi->altBank][bi->altBankIndex].ctr;
266  if (abs (2 * ctr + 1) == 1) {
267  gtable[bi->altBank][bi->altBankIndex].u = 0;
268  }
269 
270  //just mute from protected to unprotected
271  ctrUpdate(gtable[bi->altBank][bi->altBankIndex].ctr, taken,
273  ctr = gtable[bi->altBank][bi->altBankIndex].ctr;
274  if (abs (2 * ctr + 1) == 1) {
275  gtable[bi->altBank][bi->altBankIndex].u = 0;
276  }
277  }
278  if (bi->altBank == 0) {
279  baseUpdate(branch_pc, taken, bi);
280  }
281  }
282  }
283 
284  //just mute from protected to unprotected
285  if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
286  gtable[bi->hitBank][bi->hitBankIndex].u = 0;
287  }
288 
289  ctrUpdate(gtable[bi->hitBank][bi->hitBankIndex].ctr, taken,
291 
292  //sign changes: no way it can have been useful
293  if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
294  gtable[bi->hitBank][bi->hitBankIndex].u = 0;
295  }
296 
297  if (bi->altTaken == taken) {
298  if (bi->altBank > 0) {
299  int8_t ctr = gtable[bi->altBank][bi->altBankIndex].ctr;
300  if (abs (2*ctr + 1) == 7) {
301  if (gtable[bi->hitBank][bi->hitBankIndex].u == 1) {
302  if (bi->longestMatchPred == taken) {
303  gtable[bi->hitBank][bi->hitBankIndex].u = 0;
304  }
305  }
306  }
307  }
308  }
309  } else {
310  baseUpdate(branch_pc, taken, bi);
311  }
312 
313  if ((bi->longestMatchPred != bi->altTaken) &&
314  (bi->longestMatchPred == taken) &&
315  (gtable[bi->hitBank][bi->hitBankIndex].u < (1 << tagTableUBits) -1)) {
316  gtable[bi->hitBank][bi->hitBankIndex].u++;
317  }
318 }
319 
320 } // namespace branch_prediction
321 } // namespace gem5
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::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_8KB_StatisticalCorrector::scHistoryUpdate
void scHistoryUpdate(Addr branch_pc, const StaticInstPtr &inst, bool taken, BranchInfo *tage_bi, Addr corrTarget) override
Definition: tage_sc_l_8KB.cc:110
gem5::branch_prediction::TAGEBase::ThreadHistory::computeIndices
FoldedHistory * computeIndices
Definition: tage_base.hh:460
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::gIndexLogsSubstr
int gIndexLogsSubstr(int nbr, int i) override
Definition: tage_sc_l_8KB.cc:104
gem5::branch_prediction::TAGEBase::FoldedHistory::init
void init(int original_length, int compressed_length)
Definition: tage_base.hh:99
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::StatisticalCorrector::wl
std::vector< int8_t > wl
Definition: statistical_corrector.hh:160
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::getIndBiasBank
unsigned getIndBiasBank(Addr branch_pc, BranchInfo *bi, int hitBank, int altBank) const override
Definition: tage_sc_l_8KB.cc:73
random.hh
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::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::TAGE_SC_L_TAGE_8KB::initFoldedHistories
void initFoldedHistories(ThreadHistory &history) override
Initialization of the folded histories.
Definition: tage_sc_l_8KB.cc:147
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::PowerISA::bi
Bitfield< 20, 16 > bi
Definition: types.hh:80
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 >
gem5::Random::random
std::enable_if_t< std::is_integral_v< T >, T > random()
Use the SFINAE idiom to choose an implementation based on whether the type is integral or floating po...
Definition: random.hh:90
gem5::branch_prediction::TAGE_SC_L_TAGE_8KB::resetUctr
void resetUctr(uint8_t &u) override
Algorithm for resetting a single U counter.
Definition: tage_sc_l_8KB.cc:249
gem5::branch_prediction::StatisticalCorrector::bwnb
const unsigned bwnb
Definition: statistical_corrector.hh:149
gem5::branch_prediction::TAGEBase::FoldedHistory::origLength
int origLength
Definition: tage_base.hh:90
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_8KB_StatisticalCorrector::logGnb
const unsigned logGnb
Definition: tage_sc_l_8KB.hh:80
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::wg
std::vector< int8_t > wg
Definition: tage_sc_l_8KB.hh:83
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::TAGE_SC_L_8KB_StatisticalCorrector
TAGE_SC_L_8KB_StatisticalCorrector(const TAGE_SC_L_8KB_StatisticalCorrectorParams &p)
Definition: tage_sc_l_8KB.cc:53
gem5::branch_prediction::StatisticalCorrector::logBias
const unsigned logBias
Definition: statistical_corrector.hh:141
gem5::branch_prediction::TAGE_SC_L_TAGE_8KB::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_8KB.cc:189
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_8KB_StatisticalCorrector::ggehl
std::vector< int8_t > * ggehl
Definition: tage_sc_l_8KB.hh:82
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:210
gem5::branch_prediction::TAGEBase::pathHistBits
const unsigned pathHistBits
Definition: tage_base.hh:431
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_8KB::TAGE_SC_L_8KB
TAGE_SC_L_8KB(const TAGE_SC_L_8KBParams &params)
Definition: tage_sc_l_8KB.cc:141
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::SC_8KB_ThreadHistory
Definition: tage_sc_l_8KB.hh:85
gem5::branch_prediction::TAGEBase::ThreadHistory::computeTags
FoldedHistory * computeTags[2]
Definition: tage_base.hh:461
gem5::branch_prediction::TAGEBase::TageEntry::u
uint8_t u
Definition: tage_base.hh:79
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::TAGEBase::ThreadHistory
Definition: tage_base.hh:442
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::StatisticalCorrector::logBwnb
const unsigned logBwnb
Definition: statistical_corrector.hh:150
gem5::ArmISA::sh
Bitfield< 8, 7 > sh
Definition: misc_types.hh:718
gem5::branch_prediction::StatisticalCorrector::lgehl
std::vector< int8_t > * lgehl
Definition: statistical_corrector.hh:159
gem5::ArmISA::u
Bitfield< 22 > u
Definition: misc_types.hh:409
gem5::branch_prediction::TAGE_SC_L_TAGE_8KB::gindex_ext
int gindex_ext(int index, int bank) const override
Definition: tage_sc_l_8KB.cc:164
tage_sc_l_8KB.hh
gem5::branch_prediction::TAGEBase::logTagTableSizes
std::vector< int > logTagTableSizes
Definition: tage_base.hh:434
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::TAGE_SC_L_8KB_StatisticalCorrector::gPredictions
int gPredictions(ThreadID tid, Addr branch_pc, BranchInfo *bi, int &lsum, int64_t phist) override
Definition: tage_sc_l_8KB.cc:81
gem5::branch_prediction::StatisticalCorrector::wbw
std::vector< int8_t > wbw
Definition: statistical_corrector.hh:153
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::gm
std::vector< int > gm
Definition: tage_sc_l_8KB.hh:81
gem5::MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::branch_prediction::TAGE_SC_L_TAGE::F
int F(int phist, int size, int bank) const override
Utility function to shuffle the path history depending on which tagged table we are accessing.
Definition: tage_sc_l.cc:199
gem5::branch_prediction::TAGEBase::instShiftAmt
const unsigned instShiftAmt
Definition: tage_base.hh:490
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::TAGE_SC_L_TAGE_8KB::handleTAGEUpdate
void handleTAGEUpdate(Addr branch_pc, bool taken, TAGEBase::BranchInfo *bi) override
Handles the update of the TAGE entries.
Definition: tage_sc_l_8KB.cc:258
gem5::branch_prediction::TAGEBase::histLengths
int * histLengths
Definition: tage_base.hh:471
gem5::branch_prediction::StatisticalCorrector::getIndUpd
virtual unsigned getIndUpd(Addr branch_pc) const
Definition: statistical_corrector.cc:171
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::gnb
const unsigned gnb
Definition: tage_sc_l_8KB.hh:79
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::random_mt
Random random_mt
Definition: random.cc:99
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::gUpdates
void gUpdates(ThreadID tid, Addr pc, bool taken, BranchInfo *bi, int64_t phist) override
Definition: tage_sc_l_8KB.cc:130
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::TAGE_SC_L_TAGE_8KB::gtag
uint16_t gtag(ThreadID tid, Addr pc, int bank) const override
Computes the partial tag of a tagged table.
Definition: tage_sc_l_8KB.cc:171
gem5::branch_prediction::TAGE_SC_L_8KB_StatisticalCorrector::makeThreadHistory
SCThreadHistory * makeThreadHistory() override
Definition: tage_sc_l_8KB.cc:64
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::ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:235

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