gem5  v20.1.0.0
statistical_corrector.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  * Statistical corrector base class
40  */
41 
43 
44  #include "params/StatisticalCorrector.hh"
45 
47  const StatisticalCorrectorParams *p)
48  : SimObject(p),
49  logBias(p->logBias),
50  logSizeUp(p->logSizeUp),
51  logSizeUps(logSizeUp / 2),
52  numEntriesFirstLocalHistories(p->numEntriesFirstLocalHistories),
53  bwnb(p->bwnb),
54  logBwnb(p->logBwnb),
55  bwm(p->bwm),
56  lnb(p->lnb),
57  logLnb(p->logLnb),
58  lm(p->lm),
59  inb(p->inb),
60  logInb(p->logInb),
61  im(p->im),
62  chooserConfWidth(p->chooserConfWidth),
63  updateThresholdWidth(p->updateThresholdWidth),
64  pUpdateThresholdWidth(p->pUpdateThresholdWidth),
65  extraWeightsWidth(p->extraWeightsWidth),
66  scCountersWidth(p->scCountersWidth),
67  firstH(0),
68  secondH(0),
69  stats(this)
70 {
71  wb.resize(1 << logSizeUps, 4);
72 
73  initGEHLTable(lnb, lm, lgehl, logLnb, wl, p->lWeightInitValue);
74  initGEHLTable(bwnb, bwm, bwgehl, logBwnb, wbw, p->bwWeightInitValue);
75  initGEHLTable(inb, im, igehl, logInb, wi, p->iWeightInitValue);
76 
77  updateThreshold = 35 << 3;
78 
79  pUpdateThreshold.resize(1 << logSizeUp, p->initialUpdateThresholdValue);
80 
81  bias.resize(1 << logBias);
82  biasSK.resize(1 << logBias);
83  biasBank.resize(1 << logBias);
84 }
85 
88 {
89  return new BranchInfo();
90 }
91 
94 {
95  return new SCThreadHistory();
96 }
97 
98 void
100 {
101  for (int j = 0; j < (1 << logBias); j++) {
102  switch (j & 3) {
103  case 0:
104  bias[j] = -32;
105  biasSK[j] = -8;
106  biasBank[j] = -32;
107  break;
108  case 1:
109  bias[j] = 31;
110  biasSK[j] = 7;
111  biasBank[j] = 31;
112  break;
113  case 2:
114  bias[j] = -1;
115  biasSK[j] = -32;
116  biasBank[j] = -1;
117  break;
118  case 3:
119  bias[j] = 0;
120  biasSK[j] = 31;
121  biasBank[j] = 0;
122  break;
123  }
124  }
125 }
126 
127 void
129  std::vector<int> lengths, std::vector<int8_t> * & table,
130  unsigned logNumEntries, std::vector<int8_t> & w, int8_t wInitValue)
131 {
132  assert(lengths.size() == numLenghts);
133  if (numLenghts == 0) {
134  return;
135  }
136  table = new std::vector<int8_t> [numLenghts];
137  for (int i = 0; i < numLenghts; ++i) {
138  table[i].resize(1 << logNumEntries, 0);
139  for (int j = 0; j < ((1 << logNumEntries) - 1); ++j) {
140  if (! (j & 1)) {
141  table[i][j] = -1;
142  }
143  }
144  }
145 
146  w.resize(1 << logSizeUps, wInitValue);
147 }
148 
149 unsigned
151  bool bias) const
152 {
153  return (((((branch_pc ^(branch_pc >>2))<<1) ^ (bi->lowConf & bias)) <<1)
154  + bi->predBeforeSC) & ((1<<logBias) -1);
155 }
156 
157 unsigned
159 {
160  return (((((branch_pc ^ (branch_pc >> (logBias-2)))<<1) ^
161  (bi->highConf))<<1) + bi->predBeforeSC) & ((1<<logBias) -1);
162 }
163 
164 unsigned
166 {
167  return ((branch_pc ^ (branch_pc >>2)) & ((1 << (logSizeUp)) - 1));
168 }
169 
170 unsigned
172 {
173  return ((branch_pc ^ (branch_pc >>2)) & ((1 << (logSizeUps)) - 1));
174 }
175 
176 int64_t
177 StatisticalCorrector::gIndex(Addr branch_pc, int64_t bhist, int logs, int nbr,
178  int i)
179 {
180  return (((int64_t) branch_pc) ^ bhist ^ (bhist >> (8 - i)) ^
181  (bhist >> (16 - 2 * i)) ^ (bhist >> (24 - 3 * i)) ^
182  (bhist >> (32 - 3 * i)) ^ (bhist >> (40 - 4 * i))) &
183  ((1 << (logs - gIndexLogsSubstr(nbr, i))) - 1);
184 }
185 
186 int
187 StatisticalCorrector::gPredict(Addr branch_pc, int64_t hist,
188  std::vector<int> & length, std::vector<int8_t> * tab, int nbr,
189  int logs, std::vector<int8_t> & w)
190 {
191  int percsum = 0;
192  for (int i = 0; i < nbr; i++) {
193  int64_t bhist = hist & ((int64_t) ((1 << length[i]) - 1));
194  int64_t index = gIndex(branch_pc, bhist, logs, nbr, i);
195  int8_t ctr = tab[i][index];
196  percsum += (2 * ctr + 1);
197  }
198  percsum = (1 + (w[getIndUpds(branch_pc)] >= 0)) * percsum;
199  return percsum;
200 }
201 
202 void
203 StatisticalCorrector::gUpdate(Addr branch_pc, bool taken, int64_t hist,
205  int nbr, int logs, std::vector<int8_t> & w,
206  BranchInfo* bi)
207 {
208  int percsum = 0;
209  for (int i = 0; i < nbr; i++) {
210  int64_t bhist = hist & ((int64_t) ((1 << length[i]) - 1));
211  int64_t index = gIndex(branch_pc, bhist, logs, nbr, i);
212  percsum += (2 * tab[i][index] + 1);
213  ctrUpdate(tab[i][index], taken, scCountersWidth);
214  }
215 
216  int xsum = bi->lsum - ((w[getIndUpds(branch_pc)] >= 0)) * percsum;
217  if ((xsum + percsum >= 0) != (xsum >= 0)) {
218  ctrUpdate(w[getIndUpds(branch_pc)], ((percsum >= 0) == taken),
220  }
221 }
222 
223 bool
224 StatisticalCorrector::scPredict(ThreadID tid, Addr branch_pc, bool cond_branch,
225  BranchInfo* bi, bool prev_pred_taken, bool bias_bit,
226  bool use_conf_ctr, int8_t conf_ctr, unsigned conf_bits,
227  int hitBank, int altBank, int64_t phist, int init_lsum)
228 {
229  bool pred_taken = prev_pred_taken;
230  if (cond_branch) {
231 
232  bi->predBeforeSC = prev_pred_taken;
233 
234  // first calc/update the confidences from the TAGE prediction
235  if (use_conf_ctr) {
236  bi->lowConf = (abs(2 * conf_ctr + 1) == 1);
237  bi->medConf = (abs(2 * conf_ctr + 1) == 5);
238  bi->highConf = (abs(2 * conf_ctr + 1) >= (1<<conf_bits) - 1);
239  }
240 
241  int lsum = init_lsum;
242 
243  int8_t ctr = bias[getIndBias(branch_pc, bi, bias_bit)];
244  lsum += (2 * ctr + 1);
245  ctr = biasSK[getIndBiasSK(branch_pc, bi)];
246  lsum += (2 * ctr + 1);
247  ctr = biasBank[getIndBiasBank(branch_pc, bi, hitBank, altBank)];
248  lsum += (2 * ctr + 1);
249 
250  lsum = (1 + (wb[getIndUpds(branch_pc)] >= 0)) * lsum;
251 
252  int thres = gPredictions(tid, branch_pc, bi, lsum, phist);
253 
254  // These will be needed at update time
255  bi->lsum = lsum;
256  bi->thres = thres;
257 
258  bool scPred = (lsum >= 0);
259 
260  if (pred_taken != scPred) {
261  bool useScPred = true;
262  //Choser uses TAGE confidence and |LSUM|
263  if (bi->highConf) {
264  if (abs (lsum) < (thres / 4)) {
265  useScPred = false;
266  } else if (abs (lsum) < (thres / 2)) {
267  useScPred = (secondH < 0);
268  }
269  }
270 
271  if (bi->medConf) {
272  if (abs (lsum) < (thres / 4)) {
273  useScPred = (firstH < 0);
274  }
275  }
276 
277  bi->usedScPred = useScPred;
278  if (useScPred) {
279  pred_taken = scPred;
280  bi->scPred = scPred;
281  }
282  }
283  }
284 
285  return pred_taken;
286 }
287 
288 void
290  const StaticInstPtr &inst, bool taken, BranchInfo * tage_bi,
291  Addr corrTarget)
292 {
293  int brtype = inst->isDirectCtrl() ? 0 : 2;
294  if (! inst->isUncondCtrl()) {
295  ++brtype;
296  }
297  // Non speculative SC histories update
298  if (brtype & 1) {
299  if (corrTarget < branch_pc) {
300  //This branch corresponds to a loop
301  if (!taken) {
302  //exit of the "loop"
303  scHistory->imliCount = 0;
304  } else {
305  if (scHistory->imliCount < ((1 << im[0]) - 1)) {
306  scHistory->imliCount++;
307  }
308  }
309  }
310 
311  scHistory->bwHist = (scHistory->bwHist << 1) +
312  (taken & (corrTarget < branch_pc));
313  scHistory->updateLocalHistory(1, branch_pc, taken);
314  }
315 }
316 
317 void
319  bool taken, BranchInfo *bi, Addr corrTarget, bool b, int hitBank,
320  int altBank, int64_t phist)
321 {
322  bool scPred = (bi->lsum >= 0);
323 
324  if (bi->predBeforeSC != scPred) {
325  if (abs(bi->lsum) < bi->thres) {
326  if (bi->highConf) {
327  if ((abs(bi->lsum) < bi->thres / 2)) {
328  if ((abs(bi->lsum) >= bi->thres / 4)) {
329  ctrUpdate(secondH, (bi->predBeforeSC == taken),
331  }
332  }
333  }
334  }
335  if (bi->medConf) {
336  if ((abs(bi->lsum) < bi->thres / 4)) {
337  ctrUpdate(firstH, (bi->predBeforeSC == taken),
339  }
340  }
341  }
342 
343  if ((scPred != taken) || ((abs(bi->lsum) < bi->thres))) {
344  ctrUpdate(updateThreshold, (scPred != taken), updateThresholdWidth);
345  ctrUpdate(pUpdateThreshold[getIndUpd(branch_pc)], (scPred != taken),
347 
348  unsigned indUpds = getIndUpds(branch_pc);
349  unsigned indBias = getIndBias(branch_pc, bi, b);
350  unsigned indBiasSK = getIndBiasSK(branch_pc, bi);
351  unsigned indBiasBank = getIndBiasBank(branch_pc, bi, hitBank, altBank);
352 
353  int xsum = bi->lsum -
354  ((wb[indUpds] >= 0) * ((2 * bias[indBias] + 1) +
355  (2 * biasSK[indBiasSK] + 1) +
356  (2 * biasBank[indBiasBank] + 1)));
357 
358  if ((xsum + ((2 * bias[indBias] + 1) + (2 * biasSK[indBiasSK] + 1) +
359  (2 * biasBank[indBiasBank] + 1)) >= 0) != (xsum >= 0))
360  {
361  ctrUpdate(wb[indUpds],
362  (((2 * bias[indBias] + 1) +
363  (2 * biasSK[indBiasSK] + 1) +
364  (2 * biasBank[indBiasBank] + 1) >= 0) == taken),
366  }
367 
368  ctrUpdate(bias[indBias], taken, scCountersWidth);
369  ctrUpdate(biasSK[indBiasSK], taken, scCountersWidth);
370  ctrUpdate(biasBank[indBiasBank], taken, scCountersWidth);
371 
372  gUpdates(tid, branch_pc, taken, bi, phist);
373  }
374 }
375 
376 void
378 {
379  if (taken == bi->scPred) {
380  stats.correct++;
381  } else {
382  stats.wrong++;
383  }
384 }
385 
386 void
388 {
390  initBias();
391 }
392 
393 size_t
395 {
396  // Not implemented
397  return 0;
398 }
399 
401  Stats::Group *parent)
402  : Stats::Group(parent),
403  ADD_STAT(correct, "Number of time the SC predictor is the"
404  " provider and the prediction is correct"),
405  ADD_STAT(wrong, "Number of time the SC predictor is the"
406  " provider and the prediction is wrong")
407 {
408 }
StatisticalCorrector::updateThresholdWidth
const unsigned updateThresholdWidth
Definition: statistical_corrector.hh:175
StatisticalCorrector::gUpdates
virtual void gUpdates(ThreadID tid, Addr pc, bool taken, BranchInfo *bi, int64_t phist)=0
StatisticalCorrector::logSizeUps
const unsigned logSizeUps
Definition: statistical_corrector.hh:137
StatisticalCorrector::secondH
int8_t secondH
Definition: statistical_corrector.hh:183
StaticInst::isDirectCtrl
bool isDirectCtrl() const
Definition: static_inst.hh:178
length
uint8_t length
Definition: inet.hh:422
StatisticalCorrector::getIndBiasBank
virtual unsigned getIndBiasBank(Addr branch_pc, BranchInfo *bi, int hitBank, int altBank) const =0
StatisticalCorrector::gIndex
int64_t gIndex(Addr branch_pc, int64_t bhist, int logs, int nbr, int i)
Definition: statistical_corrector.cc:177
StatisticalCorrector::getSizeInBits
virtual size_t getSizeInBits() const
Definition: statistical_corrector.cc:394
MipsISA::index
Bitfield< 30, 0 > index
Definition: pra_constants.hh:44
StatisticalCorrector::makeThreadHistory
virtual SCThreadHistory * makeThreadHistory()
Definition: statistical_corrector.cc:93
StatisticalCorrector::gPredictions
virtual int gPredictions(ThreadID tid, Addr branch_pc, BranchInfo *bi, int &lsum, int64_t phist)=0
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
StatisticalCorrector::getIndUpds
unsigned getIndUpds(Addr branch_pc) const
Definition: statistical_corrector.cc:171
ThreadID
int16_t ThreadID
Thread index/ID type.
Definition: types.hh:227
StatisticalCorrector::chooserConfWidth
const unsigned chooserConfWidth
Definition: statistical_corrector.hh:173
StatisticalCorrector::bias
std::vector< int8_t > bias
Definition: statistical_corrector.hh:162
statistical_corrector.hh
StatisticalCorrector::StatisticalCorrector
StatisticalCorrector(const StatisticalCorrectorParams *p)
Definition: statistical_corrector.cc:46
StatisticalCorrector::logInb
const unsigned logInb
Definition: statistical_corrector.hh:157
StatisticalCorrector::lgehl
std::vector< int8_t > * lgehl
Definition: statistical_corrector.hh:152
std::vector< int >
StatisticalCorrector::scCountersWidth
const unsigned scCountersWidth
Definition: statistical_corrector.hh:180
StatisticalCorrector::getIndBias
virtual unsigned getIndBias(Addr branch_pc, BranchInfo *bi, bool b) const
Definition: statistical_corrector.cc:150
StatisticalCorrector::pUpdateThreshold
std::vector< int > pUpdateThreshold
Definition: statistical_corrector.hh:169
StatisticalCorrector::getIndUpd
virtual unsigned getIndUpd(Addr branch_pc) const
Definition: statistical_corrector.cc:165
StatisticalCorrector::wi
std::vector< int8_t > wi
Definition: statistical_corrector.hh:160
StatisticalCorrector::StatisticalCorrectorStats::wrong
Stats::Scalar wrong
Definition: statistical_corrector.hh:188
StatisticalCorrector::SCThreadHistory
Definition: statistical_corrector.hh:69
StatisticalCorrector::logLnb
const unsigned logLnb
Definition: statistical_corrector.hh:150
StatisticalCorrector::bwgehl
std::vector< int8_t > * bwgehl
Definition: statistical_corrector.hh:145
PowerISA::bi
Bitfield< 20, 16 > bi
Definition: types.hh:63
StatisticalCorrector::makeBranchInfo
virtual BranchInfo * makeBranchInfo()
Definition: statistical_corrector.cc:87
ArmISA::j
Bitfield< 24 > j
Definition: miscregs_types.hh:54
StatisticalCorrector::SCThreadHistory::updateLocalHistory
void updateLocalHistory(int ordinal, Addr branch_pc, bool taken, Addr extraXor=0)
Definition: statistical_corrector.hh:101
StatisticalCorrector::biasBank
std::vector< int8_t > biasBank
Definition: statistical_corrector.hh:164
StatisticalCorrector::StatisticalCorrectorStats::correct
Stats::Scalar correct
Definition: statistical_corrector.hh:187
MipsISA::w
Bitfield< 0 > w
Definition: pra_constants.hh:278
ADD_STAT
#define ADD_STAT(n,...)
Convenience macro to add a stat to a statistics group.
Definition: group.hh:67
StatisticalCorrector::StatisticalCorrectorStats::StatisticalCorrectorStats
StatisticalCorrectorStats(Stats::Group *parent)
Definition: statistical_corrector.cc:400
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:203
StatisticalCorrector::wbw
std::vector< int8_t > wbw
Definition: statistical_corrector.hh:146
StatisticalCorrector::updateStats
void updateStats(bool taken, BranchInfo *bi)
Definition: statistical_corrector.cc:377
StatisticalCorrector::lm
std::vector< int > lm
Definition: statistical_corrector.hh:151
StatisticalCorrector::init
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: statistical_corrector.cc:387
StatisticalCorrector::im
std::vector< int > im
Definition: statistical_corrector.hh:158
StatisticalCorrector::stats
StatisticalCorrector::StatisticalCorrectorStats stats
StatisticalCorrector::logSizeUp
const unsigned logSizeUp
Definition: statistical_corrector.hh:136
StatisticalCorrector::gIndexLogsSubstr
virtual int gIndexLogsSubstr(int nbr, int i)=0
StatisticalCorrector::scHistory
SCThreadHistory * scHistory
Definition: statistical_corrector.hh:132
StatisticalCorrector::updateThreshold
int updateThreshold
Definition: statistical_corrector.hh:168
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
StatisticalCorrector::SCThreadHistory::bwHist
int64_t bwHist
Definition: statistical_corrector.hh:75
StatisticalCorrector::scPredict
virtual bool scPredict(ThreadID tid, Addr branch_pc, bool cond_branch, BranchInfo *bi, bool prev_pred_taken, bool bias_bit, bool use_conf_ctr, int8_t conf_ctr, unsigned conf_bits, int hitBank, int altBank, int64_t phist, int init_lsum=0)
Definition: statistical_corrector.cc:224
StatisticalCorrector::scHistoryUpdate
virtual void scHistoryUpdate(Addr branch_pc, const StaticInstPtr &inst, bool taken, BranchInfo *tage_bi, Addr corrTarget)
Definition: statistical_corrector.cc:289
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:128
StatisticalCorrector::inb
const unsigned inb
Definition: statistical_corrector.hh:156
StatisticalCorrector::wl
std::vector< int8_t > wl
Definition: statistical_corrector.hh:153
StatisticalCorrector::biasSK
std::vector< int8_t > biasSK
Definition: statistical_corrector.hh:163
StatisticalCorrector::getIndBiasSK
virtual unsigned getIndBiasSK(Addr branch_pc, BranchInfo *bi) const
Definition: statistical_corrector.cc:158
StatisticalCorrector::SCThreadHistory::imliCount
int64_t imliCount
Definition: statistical_corrector.hh:76
ArmISA::b
Bitfield< 7 > b
Definition: miscregs_types.hh:376
StatisticalCorrector::logBwnb
const unsigned logBwnb
Definition: statistical_corrector.hh:143
StatisticalCorrector::ctrUpdate
void ctrUpdate(T &ctr, bool taken, int nbits)
Definition: statistical_corrector.hh:56
StatisticalCorrector::BranchInfo
Definition: statistical_corrector.hh:192
StatisticalCorrector::igehl
std::vector< int8_t > * igehl
Definition: statistical_corrector.hh:159
StatisticalCorrector::condBranchUpdate
virtual void condBranchUpdate(ThreadID tid, Addr branch_pc, bool taken, BranchInfo *bi, Addr corrTarget, bool bias_bit, int hitBank, int altBank, int64_t phist)
Definition: statistical_corrector.cc:318
Stats::Group
Statistics container.
Definition: group.hh:83
StatisticalCorrector::firstH
int8_t firstH
Definition: statistical_corrector.hh:182
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:187
StatisticalCorrector::logBias
const unsigned logBias
Definition: statistical_corrector.hh:134
StatisticalCorrector::pUpdateThresholdWidth
const unsigned pUpdateThresholdWidth
Definition: statistical_corrector.hh:176
Stats
Definition: statistics.cc:61
StatisticalCorrector::lnb
const unsigned lnb
Definition: statistical_corrector.hh:149
RefCountingPtr< StaticInst >
StatisticalCorrector::bwnb
const unsigned bwnb
Definition: statistical_corrector.hh:142
StatisticalCorrector::extraWeightsWidth
const unsigned extraWeightsWidth
Definition: statistical_corrector.hh:178
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
StatisticalCorrector::initBias
virtual void initBias()
Definition: statistical_corrector.cc:99
StaticInst::isUncondCtrl
bool isUncondCtrl() const
Definition: static_inst.hh:181
StatisticalCorrector::wb
std::vector< int8_t > wb
Definition: statistical_corrector.hh:166
StatisticalCorrector::bwm
std::vector< int > bwm
Definition: statistical_corrector.hh:144
SimObject
Abstract superclass for simulation objects.
Definition: sim_object.hh:92

Generated on Wed Sep 30 2020 14:02:09 for gem5 by doxygen 1.8.17