summaryrefslogtreecommitdiff
path: root/src/mem/cache/replacement_policies/fifo_rp.hh
diff options
context:
space:
mode:
authorDaniel R. Carvalho <odanrc@yahoo.com.br>2018-03-27 11:53:33 +0200
committerDaniel Carvalho <odanrc@yahoo.com.br>2018-05-03 14:25:29 +0000
commitc149983d931054d8cf88d2977a1f03a0b8b3b543 (patch)
tree1651101f29d8b06098394ffb078bf2716348664a /src/mem/cache/replacement_policies/fifo_rp.hh
parentddb80527e37e505e74b04755da502934ce8f0645 (diff)
downloadgem5-c149983d931054d8cf88d2977a1f03a0b8b3b543.tar.xz
mem-cache: ReplacementPolicy specific replacement data
Replacement data is specific for each replacement policy, and thus should be instantiated differently by each policy. Touch() and reset() do not need to be aware of CacheBlk, as they only update its ReplacementData. Invalidate() makes replacement policies independent of cache blocks, by removing the awareness of the valid state. An inheritable base ReplaceableEntry class was created to allow usage of replacement policies with any table-like structure. Change-Id: I998917d800fa48504ed95abffa2f1b7bfd68522b Reviewed-on: https://gem5-review.googlesource.com/9421 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/replacement_policies/fifo_rp.hh')
-rw-r--r--src/mem/cache/replacement_policies/fifo_rp.hh53
1 files changed, 50 insertions, 3 deletions
diff --git a/src/mem/cache/replacement_policies/fifo_rp.hh b/src/mem/cache/replacement_policies/fifo_rp.hh
index 16493711c..a686b449b 100644
--- a/src/mem/cache/replacement_policies/fifo_rp.hh
+++ b/src/mem/cache/replacement_policies/fifo_rp.hh
@@ -31,7 +31,7 @@
/**
* @file
* Declaration of a First In First Out replacement policy.
- * The victim is chosen using the timestamp. The oldest block is always chosen
+ * The victim is chosen using the timestamp. The oldest entry is always chosen
* to be evicted, regardless of the amount of times it has been touched.
*/
@@ -43,6 +43,18 @@
class FIFORP : public BaseReplacementPolicy
{
+ /** FIFO-specific implementation of replacement data. */
+ struct FIFOReplData : ReplacementData
+ {
+ /** Tick on which the entry was inserted. */
+ Tick tickInserted;
+
+ /**
+ * Default constructor. Invalidate data.
+ */
+ FIFOReplData() : tickInserted(0) {}
+ };
+
public:
/** Convenience typedef. */
typedef FIFORPParams Params;
@@ -58,12 +70,47 @@ class FIFORP : public BaseReplacementPolicy
~FIFORP() {}
/**
+ * Invalidate replacement data to set it as the next probable victim.
+ * Reset insertion tick to 0.
+ *
+ * @param replacement_data Replacement data to be invalidated.
+ */
+ void invalidate(const std::shared_ptr<ReplacementData>& replacement_data)
+ const override;
+
+ /**
+ * Touch an entry to update its replacement data.
+ * Does not modify the replacement data.
+ *
+ * @param replacement_data Replacement data to be touched.
+ */
+ void touch(const std::shared_ptr<ReplacementData>& replacement_data) const
+ override;
+
+ /**
+ * Reset replacement data. Used when an entry is inserted.
+ * Sets its insertion tick.
+ *
+ * @param replacement_data Replacement data to be reset.
+ */
+ void reset(const std::shared_ptr<ReplacementData>& replacement_data) const
+ override;
+
+ /**
* Find replacement victim using insertion timestamps.
*
* @param cands Replacement candidates, selected by indexing policy.
- * @return Cache block to be replaced.
+ * @return Replacement entry to be replaced.
+ */
+ ReplaceableEntry* getVictim(const ReplacementCandidates& candidates) const
+ override;
+
+ /**
+ * Instantiate a replacement data entry.
+ *
+ * @return A shared pointer to the new replacement data.
*/
- CacheBlk* getVictim(const ReplacementCandidates& cands) override;
+ std::shared_ptr<ReplacementData> instantiateEntry() override;
};
#endif // __MEM_CACHE_REPLACEMENT_POLICIES_FIFO_RP_HH__