gem5 v24.0.0.0
Loading...
Searching...
No Matches
spatio_temporal_memory_streaming.hh
Go to the documentation of this file.
1
41#ifndef __MEM_CACHE_PREFETCH_SPATIO_TEMPORAL_MEMORY_STREAMING_HH__
42#define __MEM_CACHE_PREFETCH_SPATIO_TEMPORAL_MEMORY_STREAMING_HH__
43
44#include <vector>
45
47#include "base/sat_counter.hh"
50
51namespace gem5
52{
53
54struct STeMSPrefetcherParams;
55
56namespace prefetch
57{
58
59class STeMS : public Queued
60{
62 const size_t spatialRegionSize;
66 const unsigned int reconstructionEntries;
67
73 {
79 unsigned int seqCounter;
80
83 {
87 unsigned int offset;
89 unsigned int delta;
91 {}
92 };
95
96 ActiveGenerationTableEntry(int num_positions)
97 : TaggedEntry(), paddress(0), pc(0),
98 seqCounter(0), sequence(num_positions)
99 {
100 }
101
102 void
103 invalidate() override
104 {
106 paddress = 0;
107 pc = 0;
108 seqCounter = 0;
109 for (auto &seq_entry : sequence) {
110 seq_entry.counter.reset();
111 seq_entry.offset = 0;
112 seq_entry.delta = 0;
113 }
114 }
115
123 {
124 paddress = e.paddress;
125 pc = e.pc;
126 seqCounter = e.seqCounter;
127 sequence = e.sequence;
128 }
129
134 void addOffset(unsigned int offset) {
135 // Search for the offset in the deltas array, if it exist, update
136 // the corresponding counter, if not, add the offset to the array
137 for (auto &seq_entry : sequence) {
138 if (seq_entry.counter > 0) {
139 if (seq_entry.offset == offset) {
140 seq_entry.counter++;
141 }
142 } else {
143 // If the counter is 0 it means that this position is not
144 // being used, and we can allocate the new offset here
145 seq_entry.counter++;
146 seq_entry.offset = offset;
147 seq_entry.delta = seqCounter;
148 break;
149 }
150 }
151 seqCounter = 0;
152 }
153 };
154
159
173
176
179
181 unsigned int lastTriggerCounter;
182
191 void addToRMOB(Addr sr_addr, Addr pst_addr, unsigned int delta);
192
202 std::vector<AddrPriority> &addresses);
203
204 public:
205 STeMS(const STeMSPrefetcherParams &p);
206 ~STeMS() = default;
207
208 void calculatePrefetch(const PrefetchInfo &pfi,
209 std::vector<AddrPriority> &addresses,
210 const CacheAccessor &cache) override;
211};
212
213} // namespace prefetch
214} // namespace gem5
215
216#endif//__MEM_CACHE_PREFETCH_SPATIO_TEMPORAL_MEMORY_STREAMING_HH__
Associative container based on the previosuly defined Entry type Each element is indexed by a key of ...
Circular queue.
A tagged entry is an entry containing a tag.
void invalidate() override
Invalidate the block.
Class containing the information needed by the prefetch to train and generate new prefetch requests.
Definition base.hh:111
unsigned int lastTriggerCounter
Counter to keep the count of accesses between trigger accesses.
void calculatePrefetch(const PrefetchInfo &pfi, std::vector< AddrPriority > &addresses, const CacheAccessor &cache) override
void addToRMOB(Addr sr_addr, Addr pst_addr, unsigned int delta)
Adds an entry to the RMOB.
AssociativeSet< ActiveGenerationTableEntry > activeGenerationTable
Active Generation Table (AGT)
AssociativeCache< ActiveGenerationTableEntry > patternSequenceTable
Pattern Sequence Table (PST)
void checkForActiveGenerationsEnd(const CacheAccessor &cache)
Checks if the active generations have ended.
CircularQueue< RegionMissOrderBufferEntry > rmob
Region Miss Order Buffer (RMOB)
bool addDuplicateEntriesToRMOB
Add duplicate entries to RMOB
const size_t spatialRegionSizeBits
log_2 of the spatial region size
STeMS(const STeMSPrefetcherParams &p)
const unsigned int reconstructionEntries
Number of reconstruction entries.
void reconstructSequence(CircularQueue< RegionMissOrderBufferEntry >::iterator rmob_it, std::vector< AddrPriority > &addresses)
Reconstructs a sequence of accesses and generates the prefetch addresses, adding them to the addresse...
const size_t spatialRegionSize
Size of each spatial region.
STL vector class.
Definition stl.hh:37
Bitfield< 23, 0 > offset
Definition types.hh:144
Bitfield< 9 > e
Definition misc_types.hh:65
Bitfield< 0 > p
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
Provides generic cache lookup functions.
Iterator to the circular queue.
unsigned int offset
Offset, in cache lines, within the spatial region.
unsigned int delta
Intearleaving position on the global access sequence.
Entry data type for the Active Generation Table (AGT) and the Pattern Sequence Table (PST)
std::vector< SequenceEntry > sequence
Sequence of accesses.
unsigned int seqCounter
Counter to keep track of the interleaving between sequences.
void update(ActiveGenerationTableEntry const &e)
Update the entry data with an entry from a generation that just ended.
void addOffset(unsigned int offset)
Add a new access to the sequence.
Data type of the Region Miss Order Buffer entry.
Addr pstAddress
Address used to index the PST table, generated using the PC and the offset within the spatial region.
unsigned int delta
Delta within the global miss order sequence.

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0