gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
signature_path.hh
Go to the documentation of this file.
1 
40 #ifndef __MEM_CACHE_PREFETCH_SIGNATURE_PATH_HH__
41 #define __MEM_CACHE_PREFETCH_SIGNATURE_PATH_HH__
42 
43 #include "base/sat_counter.hh"
46 #include "mem/packet.hh"
47 
48 namespace gem5
49 {
50 
51 struct SignaturePathPrefetcherParams;
52 
53 namespace prefetch
54 {
55 
56 class SignaturePath : public Queued
57 {
58  protected:
60  typedef uint16_t signature_t;
62  typedef int16_t stride_t;
63 
65  const unsigned stridesPerPatternEntry;
67  const uint8_t signatureShift;
74 
76  struct SignatureEntry : public TaggedEntry
77  {
83  {}
84  };
87 
90  {
96  {}
97  };
99  struct PatternEntry : public TaggedEntry
100  {
105  PatternEntry(size_t num_strides, unsigned counter_bits)
106  : TaggedEntry(), strideEntries(num_strides, counter_bits),
107  counter(counter_bits)
108  {
109  }
110 
112  void
113  invalidate() override
114  {
116  for (auto &entry : strideEntries) {
117  entry.counter.reset();
118  entry.stride = 0;
119  }
120  counter.reset();
121  }
122 
130  {
131  PatternStrideEntry *found_entry = nullptr;
132  for (auto &entry : strideEntries) {
133  if (entry.stride == stride) {
134  found_entry = &entry;
135  break;
136  }
137  }
138  return found_entry;
139  }
140 
148  };
151 
159  sig <<= signatureShift;
160  sig ^= str;
161  sig &= mask(signatureBits);
162  return sig;
163  }
164 
179  void addPrefetch(Addr ppn, stride_t last_block, stride_t delta,
180  double path_confidence, signature_t signature,
181  bool is_secure,
182  std::vector<AddrPriority> &addresses);
183 
197  SignatureEntry &getSignatureEntry(Addr ppn, bool is_secure, stride_t block,
198  bool &miss, stride_t &stride, double &initial_confidence);
205  PatternEntry& getPatternEntry(Addr signature);
206 
213  void updatePatternTable(Addr signature, stride_t stride);
214 
221  virtual double calculateLookaheadConfidence(PatternEntry const &sig,
222  PatternStrideEntry const &lookahead) const;
223 
230  virtual double calculatePrefetchConfidence(PatternEntry const &sig,
231  PatternStrideEntry const &entry) const;
232 
238  virtual void increasePatternEntryCounter(PatternEntry &pattern_entry,
239  PatternStrideEntry &pstride_entry);
240 
251  virtual void handleSignatureTableMiss(stride_t current_block,
252  signature_t &new_signature, double &new_conf,
253  stride_t &new_stride);
254 
266  virtual void auxiliaryPrefetcher(Addr ppn, stride_t current_block,
267  bool is_secure, std::vector<AddrPriority> &addresses);
268 
281  virtual void handlePageCrossingLookahead(signature_t signature,
282  stride_t last_offset, stride_t delta, double path_confidence) {
283  }
284 
285  public:
286  SignaturePath(const SignaturePathPrefetcherParams &p);
287  ~SignaturePath() = default;
288 
289  void calculatePrefetch(const PrefetchInfo &pfi,
290  std::vector<AddrPriority> &addresses) override;
291 };
292 
293 } // namespace prefetch
294 } // namespace gem5
295 
296 #endif//__MEM_CACHE_PREFETCH_SIGNATURE_PATH_HH__
gem5::prefetch::SignaturePath::stridesPerPatternEntry
const unsigned stridesPerPatternEntry
Number of strides stored in each pattern entry.
Definition: signature_path.hh:65
gem5::prefetch::SignaturePath::signatureBits
const signature_t signatureBits
Size of the signature, in bits.
Definition: signature_path.hh:69
gem5::prefetch::SignaturePath
Definition: signature_path.hh:56
gem5::prefetch::SignaturePath::PatternEntry::PatternEntry
PatternEntry(size_t num_strides, unsigned counter_bits)
Definition: signature_path.hh:105
gem5::prefetch::SignaturePath::PatternStrideEntry::PatternStrideEntry
PatternStrideEntry(unsigned bits)
Definition: signature_path.hh:95
gem5::prefetch::SignaturePath::PatternStrideEntry::stride
stride_t stride
stride in a page in blkSize increments
Definition: signature_path.hh:92
gem5::prefetch::SignaturePath::handlePageCrossingLookahead
virtual void handlePageCrossingLookahead(signature_t signature, stride_t last_offset, stride_t delta, double path_confidence)
Handles the situation when the lookahead process has crossed the boundaries of the current page.
Definition: signature_path.hh:281
gem5::prefetch::SignaturePath::lookaheadConfidenceThreshold
const double lookaheadConfidenceThreshold
Minimum confidence to keep navigating lookahead entries.
Definition: signature_path.hh:73
gem5::prefetch::SignaturePath::SignatureEntry
Signature entry data type.
Definition: signature_path.hh:76
gem5::prefetch::SignaturePath::signatureShift
const uint8_t signatureShift
Number of bits to shift when generating a new signature.
Definition: signature_path.hh:67
std::vector
STL vector class.
Definition: stl.hh:37
sat_counter.hh
gem5::prefetch::SignaturePath::PatternEntry::invalidate
void invalidate() override
Reset the entries to their initial values.
Definition: signature_path.hh:113
gem5::prefetch::SignaturePath::calculateLookaheadConfidence
virtual double calculateLookaheadConfidence(PatternEntry const &sig, PatternStrideEntry const &lookahead) const
Computes the lookahead path confidence of the provided pattern entry.
Definition: signature_path.cc:213
gem5::prefetch::SignaturePath::prefetchConfidenceThreshold
const double prefetchConfidenceThreshold
Minimum confidence to issue a prefetch.
Definition: signature_path.hh:71
queued.hh
gem5::mask
constexpr uint64_t mask(unsigned nbits)
Generate a 64-bit mask of 'nbits' 1s, right justified.
Definition: bitfield.hh:63
packet.hh
gem5::GenericSatCounter< uint8_t >
gem5::prefetch::SignaturePath::SignatureEntry::signature
signature_t signature
Path signature.
Definition: signature_path.hh:79
gem5::prefetch::SignaturePath::signature_t
uint16_t signature_t
Signature type.
Definition: signature_path.hh:60
gem5::prefetch::SignaturePath::auxiliaryPrefetcher
virtual void auxiliaryPrefetcher(Addr ppn, stride_t current_block, bool is_secure, std::vector< AddrPriority > &addresses)
Auxiliar prefetch mechanism used at the end of calculatePrefetch.
Definition: signature_path.cc:313
gem5::TaggedEntry
A tagged entry is an entry containing a tag.
Definition: tagged_entry.hh:46
gem5::prefetch::SignaturePath::PatternEntry::findStride
PatternStrideEntry * findStride(stride_t stride)
Returns the entry with the desired stride.
Definition: signature_path.hh:129
gem5::prefetch::SignaturePath::increasePatternEntryCounter
virtual void increasePatternEntryCounter(PatternEntry &pattern_entry, PatternStrideEntry &pstride_entry)
Increases the counter of a given PatternEntry/PatternStrideEntry.
Definition: signature_path.cc:147
gem5::prefetch::SignaturePath::PatternEntry::counter
SatCounter8 counter
use counter, used by SPPv2
Definition: signature_path.hh:104
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::prefetch::SignaturePath::updatePatternTable
void updatePatternTable(Addr signature, stride_t stride)
Updates the pattern table with the provided signature and stride.
Definition: signature_path.cc:154
gem5::AssociativeSet
Associative container based on the previosuly defined Entry type Each element is indexed by a key of ...
Definition: associative_set.hh:45
gem5::prefetch::SignaturePath::stride_t
int16_t stride_t
Stride type.
Definition: signature_path.hh:62
gem5::prefetch::SignaturePath::SignatureEntry::lastBlock
stride_t lastBlock
Last accessed block within a page.
Definition: signature_path.hh:81
gem5::GenericSatCounter::reset
void reset()
Reset the counter to its initial value.
Definition: sat_counter.hh:292
gem5::prefetch::SignaturePath::PatternStrideEntry
A stride entry with its counter.
Definition: signature_path.hh:89
gem5::prefetch::SignaturePath::getPatternEntry
PatternEntry & getPatternEntry(Addr signature)
Obtains the PatternEntry of the given signature, if the signature is not found, it allocates a new on...
Definition: signature_path.cc:189
gem5::prefetch::SignaturePath::calculatePrefetch
void calculatePrefetch(const PrefetchInfo &pfi, std::vector< AddrPriority > &addresses) override
Definition: signature_path.cc:229
gem5::prefetch::SignaturePath::PatternEntry::getStrideEntry
PatternStrideEntry & getStrideEntry(stride_t stride)
Gets the entry with the provided stride, if there is no entry with the associated stride,...
Definition: signature_path.cc:70
gem5::bits
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:76
gem5::prefetch::SignaturePath::SignaturePath
SignaturePath(const SignaturePathPrefetcherParams &p)
Definition: signature_path.cc:44
gem5::TaggedEntry::invalidate
virtual void invalidate()
Invalidate the block.
Definition: tagged_entry.hh:103
gem5::prefetch::SignaturePath::handleSignatureTableMiss
virtual void handleSignatureTableMiss(stride_t current_block, signature_t &new_signature, double &new_conf, stride_t &new_stride)
Whenever a new SignatureEntry is allocated, it computes the new signature to be used with the new ent...
Definition: signature_path.cc:138
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::prefetch::Queued
Definition: queued.hh:59
gem5::prefetch::SignaturePath::SignatureEntry::SignatureEntry
SignatureEntry()
Definition: signature_path.hh:82
gem5::prefetch::SignaturePath::addPrefetch
void addPrefetch(Addr ppn, stride_t last_block, stride_t delta, double path_confidence, signature_t signature, bool is_secure, std::vector< AddrPriority > &addresses)
Generates an address to be prefetched.
Definition: signature_path.cc:97
gem5::prefetch::SignaturePath::signatureTable
AssociativeSet< SignatureEntry > signatureTable
Signature table.
Definition: signature_path.hh:86
gem5::VegaISA::ppn
Bitfield< 47, 12 > ppn
Definition: pagetable.hh:57
gem5::prefetch::SignaturePath::patternTable
AssociativeSet< PatternEntry > patternTable
Pattern table.
Definition: signature_path.hh:150
gem5::prefetch::SignaturePath::PatternEntry
Pattern entry data type, a set of stride and counter entries.
Definition: signature_path.hh:99
gem5::prefetch::SignaturePath::PatternEntry::strideEntries
std::vector< PatternStrideEntry > strideEntries
group of stides
Definition: signature_path.hh:102
gem5::prefetch::SignaturePath::~SignaturePath
~SignaturePath()=default
gem5::prefetch::SignaturePath::getSignatureEntry
SignatureEntry & getSignatureEntry(Addr ppn, bool is_secure, stride_t block, bool &miss, stride_t &stride, double &initial_confidence)
Obtains the SignatureEntry of the given page, if the page is not found, it allocates a new one,...
Definition: signature_path.cc:164
associative_set.hh
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::prefetch::SignaturePath::calculatePrefetchConfidence
virtual double calculatePrefetchConfidence(PatternEntry const &sig, PatternStrideEntry const &entry) const
Computes the prefetch confidence of the provided pattern entry.
Definition: signature_path.cc:206
gem5::ArmISA::stride
Bitfield< 21, 20 > stride
Definition: misc_types.hh:504
gem5::prefetch::SignaturePath::updateSignature
signature_t updateSignature(signature_t sig, stride_t str) const
Generates a new signature from an existing one and a new stride.
Definition: signature_path.hh:158
gem5::prefetch::SignaturePath::PatternStrideEntry::counter
SatCounter8 counter
Saturating counter.
Definition: signature_path.hh:94

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