Go to the documentation of this file.
34 #include "debug/StoreSet.hh"
37 : clearPeriod(clear_period), SSITSize(_SSIT_size), LFSTSize(_LFST_size)
44 fatal(
"Invalid SSIT size!\n");
55 fatal(
"Invalid LFST size!\n");
121 bool valid_load_SSID =
validSSIT[load_index];
122 bool valid_store_SSID =
validSSIT[store_index];
124 if (!valid_load_SSID && !valid_store_SSID) {
130 SSIT[load_index] = new_set;
134 SSIT[store_index] = new_set;
139 "storeset, creating a new one: %i for load %#x, store %#x\n",
140 new_set, load_PC, store_PC);
141 }
else if (valid_load_SSID && !valid_store_SSID) {
146 SSIT[store_index] = load_SSID;
151 "store to that set: %i for load %#x, store %#x\n",
152 load_SSID, load_PC, store_PC);
153 }
else if (!valid_load_SSID && valid_store_SSID) {
154 SSID store_SSID =
SSIT[store_index];
158 SSIT[load_index] = store_SSID;
161 "load %#x, store %#x\n",
162 store_SSID, load_PC, store_PC);
165 SSID store_SSID =
SSIT[store_index];
170 if (store_SSID > load_SSID) {
171 SSIT[store_index] = load_SSID;
174 "for load %#x, store %#x\n",
175 load_SSID, load_PC, store_PC);
177 SSIT[load_index] = store_SSID;
180 "for load %#x, store %#x\n",
181 store_SSID, load_PC, store_PC);
191 DPRINTF(
StoreSet,
"Wiping predictor state beacuse %d ld/st executed\n",
225 LFST[store_SSID] = store_seq_num;
232 store_PC, store_SSID);
259 "dependency\n", PC,
index, inst_SSID);
264 "inum of %i\n", PC,
index, inst_SSID,
LFST[inst_SSID]);
266 return LFST[inst_SSID];
302 if (
validLFST[store_SSID] &&
LFST[store_SSID] == issued_seq_num) {
319 idx = (*store_list_it).second;
321 if ((*store_list_it).first <= squashed_num) {
325 bool younger =
LFST[idx] > squashed_num;
360 while (store_list_it !=
storeList.end()) {
361 cprintf(
"%i: [sn:%lli] SSID:%i\n",
362 num, (*store_list_it).first, (*store_list_it).second);
#define fatal(...)
This implements a cprintf based fatal() function.
std::vector< InstSeqNum > LFST
Last Fetched Store Table.
void dump()
Debug function to dump the contents of the store list.
void insertStore(Addr store_PC, InstSeqNum store_seq_num, ThreadID tid)
Inserts a store into the store set predictor.
int16_t ThreadID
Thread index/ID type.
void insertLoad(Addr load_PC, InstSeqNum load_seq_num)
Inserts a load into the store set predictor.
InstSeqNum checkInst(Addr PC)
Checks if the instruction with the given PC is dependent upon any store.
int indexMask
Mask to obtain the index.
std::map< InstSeqNum, int, ltseqnum >::iterator SeqNumMapIt
void init(uint64_t clear_period, int SSIT_size, int LFST_size)
Initializes the store set predictor with the given table sizes.
int calcIndex(Addr PC)
Calculates the index into the SSIT based on the PC.
void cprintf(const char *format, const Args &...args)
std::vector< bool > validSSIT
Bit vector to tell if the SSIT has a valid entry.
StoreSet()
Default constructor.
Implements a store set predictor for determining if memory instructions are dependent upon each other...
int SSITSize
Store Set ID Table size, in entries.
void squash(InstSeqNum squashed_num, ThreadID tid)
Squashes for a specific thread until the given sequence number.
void checkClear()
Clears the store set predictor every so often so that all the entries aren't used and stores are cons...
void issued(Addr issued_PC, InstSeqNum issued_seq_num, bool is_store)
Records this PC/sequence number as issued.
std::vector< bool > validLFST
Bit vector to tell if the LFST has a valid entry.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t clearPeriod
Number of loads/stores to process before wiping predictor so all entries don't get saturated.
void violation(Addr store_PC, Addr load_PC)
Records a memory ordering violation between the younger load and the older store.
std::map< InstSeqNum, int, ltseqnum > storeList
Map of stores that have been inserted into the store set, but not yet issued or squashed.
int LFSTSize
Last Fetched Store Table size, in entries.
void clear()
Resets all tables.
int memOpsPred
Number of memory operations predicted since last clear of predictor.
std::vector< SSID > SSIT
The Store Set ID Table.
SSID calcSSID(Addr PC)
Calculates a Store Set ID based on the PC.
~StoreSet()
Default destructor.
bool isPowerOf2(const T &n)
Generated on Wed Sep 30 2020 14:02:09 for gem5 by doxygen 1.8.17